์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- DynamicProgramming
- algorithm
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- concurrency
- GroupBy
- URLSession
- Til
- HAVIT
- discardableResult
- ๋์ ๊ณํ๋ฒ
- SwiftUI ํํ ๋ฆฌ์ผ
- binarySearch
- ์ด์งํ์
- SQL
- duno
- ๊ธฐ์ด๋ฌธ๋ฒ
- GCD
- SwiftUI Tutorials
- 0์ด๋์ด์๋๊ธธ
- algoritm
- APPJAM
- SOPT
- Swift
- ์ฐ์ํ์ค๋ถ๋ถ์์ด์ํฉ
- ํ๋ก๊ทธ๋๋จธ์ค
- ๊ณ ๋์ kit
- BFS
- IOS
- dfs
- SwiftUI
- Today
- Total
suvera-dev ๐ฅฆ
AWS ๋ฐฐํฌ์๋ํ ๊ตฌ์ถ _ 2. Docker ํ๊ฒฝ ๊ตฌ์ถ / ECR์ ์ด๋ฏธ์ง ์ ๋ก๋ ๋ณธ๋ฌธ
AWS ๋ฐฐํฌ์๋ํ ๊ตฌ์ถ _ 2. Docker ํ๊ฒฝ ๊ตฌ์ถ / ECR์ ์ด๋ฏธ์ง ์ ๋ก๋
suvera 2023. 7. 13. 20:43์ด๋ฒ์๋ ECRํ ์คํธ ์ฉ EC2๋ฅผ ๋ง๋ค๊ธฐ,
๋์ปค ํ๊ฒฝ ๊ตฌ์ถ, ๋น๋ํ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ์ ์๋ ECR์ ์ ๋ก๋ ํ๋ ๊ณผ์ ์ด๋ค.
- ์ต์ข flow๋ ์์ ๊ฐ๋ค. ๊ฐ๋ฐ์๊ฐ github ๋ ํฌ์งํ ๋ฆฌ์ Push ํ์ ๋ github actions๋ฅผ ํตํด workflow๊ฐ ์๋์ผ๋ก ๋์๊ฐ๊ณ , ๋์ปค ์ด๋ฏธ์ง๊ฐ ๋น๋ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น๋๋ ์ด๋ฏธ์ง๋ ECR์ ์ ๋ก๋ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ต์ข ์ ์ผ๋ก ECS Task Definition์ ์๋ก์ด ์ด๋ฏธ์ง ID๊ฐ ๋ค์ด๊ฐ๊ณ , ECS์ ์์ ์์ฑ ๋ช ๋ น์ ํ๋ค. ๊ทธ๋ฌ๋ฉด ๋ฐฐํฌ๊ฐ ์๋ฃ ๋๋ค !
1. ECR์ ํ ์คํธ ํ EC2๋ฅผ ์์ฑ
- ์์ง AutoScalingGroup ์์ฑ ์ ์ด๋ผ ์ธ์คํด์ค๊ฐ ์๋ค. ํ ์คํธ ํ ์ญ์ ํด์ฃผ์.
์ด๋ฆ : ECR-test
AMI : Amazon Linux 2023
์ธ์คํด์ค ์ ํ : t2.micro
์๋ ๋คํธ์ํฌ ์ค์ ์ ๋ณ๊ฒฝํด์ค๋ค.
- VPC : ๊ธฐ์กด์ ์์ฑํ๋ ๊ฒ.
- ์๋ธ๋ท : public-subnet-2a
- ํผ๋ธ๋ฆญ IP ์๋ํ ๋น ํ์ฑํ
- ๋ณด์๊ทธ๋ฃน : ๊ธฐ์กด ๋ณด์๊ทธ๋ฃน -> ecs-ec2-sg
์ ํคํ์ด๋ฅผ ์์ฑ ํด์ค๋ค. -> ์์ฑ๋ pem ํค๋ฅผ ์ ์ฅํด๋๊ธฐ ! SSH ์ ๊ทผ ์ ํ์.
๋๋จธ์ง ์ธ๋ถ์ ๋ณด๋ ์์ ๊ฐ์ด ์ค์ ํด์ค๋ค. -> ์ค๋ฅธ์ชฝ ์ธ์คํด์ค ์์ ๋ฒํผ ๋๋ฅด๊ธฐ !
2. EC2 ์ ์ ํ, Docker ํ๊ฒฝ ๊ตฌ์ฑ.
์ด์ ์์ฑ๋ ์ธ์คํด์ค -> ์์ -> ์ฐ๊ฒฐ์ ๋๋ฅด๊ณ -> SSH ํด๋ผ์ด์ธํธ๋ก ์ด๋.
ํฐ๋ฏธ๋์ ํจ๋ค !
pem key ๊ฐ ์๋ ๊ฒฝ๋ก๋ก ์ด๋ ํ,
์์ ์๋ ์์๋๋ก ํ๋ฉด ๋๋ค.
//pem ํ์ผ ๊ถํ ๋ณ๊ฒฝ
$ chmod 400 esc-ec2-testkey.pem
// ec2 ์ ์ ec2-user๋ ๊ณ์ , ip๋ ec2์ ipv4
$ ssh -i "esc-ec2-testkey.pem" ec2-user@3.38.255.173
์ ์ฒ๋ผ ์ ๋ชจ์์ด ๋จ๋ฉด ์ ์์ ์ฑ๊ณตํ ๊ฒ์ด๋ค !
์ด์ ๋์ปค๋ฅผ ์ค์นํด๋ณด์.
// sudo ๊ถํ๋ถ์ฌ
sudo -i
// docker ์ค์น
yum install -y docker
// docker ์์
systemctl start docker
// ์ด๋ฏธ์ง ๋ฆฌ์คํธ ์ถ๋ ฅ
docker images
์์ง์ ์๋ฌด๊ฒ๋ ์๋ค.
Docker file์ ์์ฑํด๋ณด์.
// dockerfile folder ์์ฑ
$ mkdir dockerfile-folder
// dockerfile folder๋ก ์ด๋
$ cd dockerfile-folder/
// index.html ์์ฑ
$ vi index.html
index.html ์์ ์๋ฌด๊ฑฐ๋ ์์ฑํด๋ณด์ !
<!doctype html>
<h1>ecs gogo!</h1>
์ฐธ๊ณ / vi ํธ์ง๊ธฐ ๋ช ๋ น์ด : insert - i ๋๋ฅด๊ณ , ์์ฑํ๋ค์ esc ๋๋ฅด๊ณ , :wq! ํ๋ฉด ์ ์ฅ ํ ๋๊ฐ์ง๋ค.
dockerfile์ ์์ฑํ๊ณ ์๋ ๋ด์ฉ์ ๋ณต๋ถํด๋ณด์
// dockerfile ์์ฑ
$ vi dockerfile
FROM nginx:latest // ์๋ฒ์ด๋ฏธ์ง nginx๋ ์ต์ ๋ฒ์ ์ ์ฌ์ฉํจ
LABEL name="demo" // dockerfile ์์ฑ์
// index.html ํ์ผ์ ํด๋น ์์น๋ก ๋ณต์ฌ
// ๋ณดํต์ RUN ๋ช
๋ น์ด๋ฅผ ์จ์ image๊ฐ ์ฌ๋ผ๊ฐ์ ๋, ์ํ๋๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ค
COPY ./index.html /usr/share/nginx/html/index.html
// nginx๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก 80ํฌํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ expose๋ฅผ ์ด์ฉํด ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ค
EXPOSE 80
// nginx๋ฅผ ์คํ์ํจ๋ค (global directive ๋ก daemon off๋ฅผ ์ ์ฉ)
CMD ["nginx", "-g", "daemon off;"]
MAINTAINER ๋ deprecated ๋์ด์ LABEL๋ก ๋ณ๊ฒฝํด์ฃผ์๋ค.
์ด์ docker image๋ฅผ build ํ๋ค.!
// $ docker build -t [์์ฑํ ์ด๋ฏธ์ง๋ช
]:[ํ๊ทธ๋ช
] [๋์ปคํ์ผ์ ์์น]
$ docker build -t ecs-nginx .
๋น๋์ ์ฑ๊ณตํ๋ฉด ์ด๋ ๊ฒ ๋ฌ๋ค ! ์์ฑ๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ํ์ธํด๋ณด์.
$ docker images
์ด๋ฏธ์ง๊ฐ ์ ์์ฑ๋์๋ค. ์ด์ ECR๋ก Push ํ๊ธฐ ์ ์, ์์ฑ๋ ์ด๋ฏธ์ง๊ฐ ๋์ํ๋์ง ํ ์คํธ๋ฅผ ํด๋ณด์.
ecs-nginx์ IMAGE ID๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋๋ฐ, ๋ด๋ถ์ ์ผ๋ก 80ํฌํธ๋ฅผ ์ฌ์ฉํ์ง๋ง,
์ธ๋ถ ์ ๊ทผ์ 8000ํฌํธ๋ฅผ ์ด์ด ์ ๊ทผํ ์ ์๋๋ก ํ๋ค.
$ docker create -it --name ecs-nginx-container -p 8000:80 da80b8fb089b
๊ทธ ๋ค์์ผ๋ก docker ์ปจํ ์ด๋์ ID๋ฅผ ๊ฐ์ ธ์์ start ํด์ค๋ค. ( ์ด๋ฏธ์ง id ๋ ํท๊ฐ๋ฆฌ์ง ๋ง์ ~ )
$ docker ps -a
$ docker start 5cef98ddece6
- docker ps๋ ํ์ฌ ์คํ์ค์ธ ์ปจํ ์ด๋ ๋ฆฌ์คํธ ๋ถ๋ฌ์ด, -a ๋ถ์ผ๋ฉด ์คํ ์ค์ด์ง ์์ ๋ชจ๋ ์ปจํ ์ด๋ ๋ฆฌ์คํธ ๋ถ๋ฌ์ด
๋ค์์ผ๋ก, EC2 ๋ณด์๊ทธ๋ฃน์ธ ecs-ec2-sg์ ๊ฐ์ ์ธ๋ฐ์ด๋ ๊ท์น์ 8000ํฌํธ๋ฅผ ์ถ๊ฐํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด์ด์ 3.38.255.173:8000์ผ๋ก ์ ์ํด๋ณด์ !!
์ ์์ด ์ ๋๋๊ฒ์ ํ์ธํ ์ ์๋ฐ !!
์ด์ ํ์์๋ ์ปจํ ์ด๋๋ ์ง์์ค๋ค !
$ docker stop 5cef98ddece6
$ docker rm 5cef98ddece6
์ฐธ๊ณ ๋ก ์ด๋ฏธ์ง๋ฅผ ์ง์ฐ๋ ๋ช ๋ น์ด๋ docker rmi
3. ECR ๋ฆฌํฌ์งํ ๋ฆฌ ์์ฑํ๊ธฐ
ECR ์ฝ์๋ก ์ด๋ํด์ ๋ฆฌํฌ์งํ ๋ฆฌ ์์ฑ ๋๋ฅธ๋ค.
ecr-test ๋ผ๋ ์ด๋ฆ์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ํ๋ผ์ด๋น์ผ๋ก ์์ฑํ๋ค.
4. ๋ฐฐํฌ์ฉ IAM ๊ณ์ ์์ฑ, ๊ถํ ๋ถ์ฌ
IAM ์ฝ์ -> ์ฌ์ฉ์ -> ์ฌ์ฉ์ ์ถ๊ฐ
- ์ด๋ฆ : deployer
- ์ฝ์ ์์ธ์ค ๊ถํ์ ์ฒดํฌ X
๋ค์์ผ๋ก ๋์ด๊ฐ์ ์ง์ ์ ์ฑ ์ฐ๊ฒฐ -> EC2ContainerRegistryPowerUser ๊ฒ์ ํ ์ ํ -> ๊ถํ ๋ถ์ฌ
์๋ ๊ถํ์ ECR์ ๋ํ ๋ชฉ๋ก/์ฝ๊ธฐ/์ฐ๊ธฐ ๊ถํ์ ๊ฐ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ก์ธ์ค ํค๋ฅผ ๋ฐ๊ธฐ ์ํด์
์ฌ์ฉ์ ์์ธ -> ๋ณด์ ์๊ฒฉ ์ฆ๋ช ์ ์ ํํ๋ค.
์๋๋ก ๋ด๋ ค์ ์ก์ธ์ค ํค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญ.
์ ํ์ - ๊ธฐํ๋ก ์ ํํ ๋ง๋ ๋ค์, .csv ํ์ผ ์ ์ฅํด์ฃผ๊ธฐ
csv ํ์ผ๋ก ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ๋ฉด ๋น๋ฐ ์์ธ์ค ํค๋ ๋ฐ๋ก ์ ์ ์ฅํด๋์.
์ด์ EC2 ์๋ฒ๋ก ์ด๋
$ aws configure list
์ ๋ช ๋ น์ด ์ ๋ ฅ ! ์์ง ์ฐ๊ฒฐ๋ aws ๊ณ์ ์ด ์์ ๊ฒ์ด๋ค.
๋ค์ ๋ช ๋ น์ด๋ก aws ํด๋, credentials ํ์ผ์ ์์ฑ + chmod๋ก ๊ถํ ๋ฐ๊พผ ๋ค์ ์์
$ mkdir ~/.aws
$ cd ~/.aws
$ touch credentials
$ chmod 755 ./credentials
$ vi credentials
์๋ ๊ตฌ๋ฌธ์ insert ํ๊ณ ์ ์ฅํด์ค๋ค.
[default]
aws_access_key_id=deployer์ ์ก์ธ์คํค
aws_secret_access_key=deployer์ ๋น๋ฐํค
region=ap-northest-2
output=json
์ด์ ๊ณ์ ์ ๋ณด๊ฐ ๋์จ๋ค !
5. ECR ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ฐฐํฌ
ECR -> ํธ์๋ช ๋ น๋ณด๊ธฐ
2๋ฒ์ ๋์ปค ์ด๋ฏธ์ง๋ ์ด๋ฏธ ๋น๋ ํ์ผ๋ฏ๋ก,
1 -> 3 -> 4 ๋ช ๋ น์ ๋ฐ๋ผ์ ์คํํด๋ณด์.
3๋ฒ ๋ช ๋ น์ ecr-test ์๋ ์ด๋ฏธ์ง ์ด๋ฆ์ธ ecs-nginx๋ก ๋ฐ๊ฟ์ฃผ์.
์ด๋ฏธ์ง ์ ๋ก๋ ์๋ฃ !