ํด๋น ๊ฒ์๋ฌผ์ ๊ณต๋ถ๋ฅผ ๋ชฉ์ ์ผ๋ก ์ ๋ฆฌํ์ผ๋ฉฐ, ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ค. ์๋ฌด๋ฆฌ ์ฝ์ด๋ ์ง์ ๋ฐฐํฌํด๋ณด์ง ์๋ ์ด์ 100% ์๋ฟ์ง๋ ์์ ๊ฒ ๊ฐ์ง๋ง, ์ต๋ํ ์ง์์ ๋ชจ์๋ชจ์ ์ ๋ฆฌํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.
opensoure.com
์ด๋ณด๋ฅผ ์ํ ๋์ปค ์๋ด์ ์๋ฆฌ์ฆ
๋์ปค ๊ณต์ ๋ฌธ์
Docker์ ECR, ECS ๊ฒฝํ
์ ๊ตณ์ด ๋์ปค(์ปจํ
์ด๋)๋ฅผ ์จ์ผ ํ๋์?
๋์ฒด ์ ํ์ํ ๊น?
๊ฐ๋ฐ์์ ์์คํ ์ด์์(system operators) ๋ชจ๋์๊ฒ ๋์์ด ๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ฝ๋๊ฐ ์ด๋ค ์์คํ ์์ ๋์๊ฐ์ง์ ๋ํ ๊ฑฑ์ ์ ํ์ง ์๊ณ ์ฝ๋ ์์ฑ์๋ง ์ง์คํ ์ ์๊ณ , ์ด์์ ์ ์ฅ์์๋ ๋์ปค๊ฐ ์์คํ ์ ์๋ฅผ ์ ์ฌ์ ์ผ๋ก ์ค์ฌ์ฃผ๊ณ , ์ ์ฐ์ฑ์ ์ค ์ ์๊ธฐ์ ํฐ ์ฅ์ ์ ์ง๋๋ค.
๋์ปค๋ฅผ ์ฒ์ ์จ๋ณด์ ๋ถ์ ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๋ ๋ฐฐํฌ ํ์คํ ๋ฆฌ๋ฅผ ๋จ๊ธธ ์ ์๊ณ , ๋กค๋ฐฑ์ด ์ฌ์์ ์ข์๋ค๊ณ ํ๋ค. ๊ฐ์ ์๋ฒ๋ฅผ ๋๋ฆฌ๋ ค๊ณ ํ ๋ ์๋ก ๋ค๋ฅธ ํ๊ฒฝ์์ ์คํํ๊ฒ ๋๋ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ , ์์กด์ฑ ๋ฌธ์ ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ฐ ๋ฌธ์ ๋ฅผ ์์ ์ค ์ ์๋ ๊ฒ์ด ์ปจํ ์ด๋ ๊ฐ๋ ์ด๋ค.
ํธ์คํธ ์ปดํจํฐ์์ ๋ค์์ ์ด์ ์ฒด์ ๋ฅผ ๋์์ ์คํํ๊ธฐ ์ํ ๋ ผ๋ฆฌ์ ํ๋ซํผ์ ๋งํ๋ค. ๊ฐ์ํ ๋จธ์ ๋ชจ๋ํฐ ๋๋ ๊ฐ์ํ ๋จธ์ ๋งค๋์ ๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค. ์ฝ๊ฒ ๋งํด์ ํ์ดํผ๋ฐ์ด์ ๋๋ถ์ ๋งฅ๋ถ์์ ์๋์ฐ๋ ๋ฆฌ๋ ์ค๋ฅผ ์ธ ์ ์๋๊ฑฐ๋ค.
์ฝ๋์์ ๋ ๋ชจ๋ ๊ฐ์ ์ฐ๊ฒฐ, ๊ฐ์ฒด ์งํฅ ์ธ์ด์์๋ ๋ ํด๋์ค ๊ฐ์ ๊ด๊ณ๋ผ๊ณ ๋ ํ๋ค. ํ๋์ ๋ชจ๋์ด ๋ฐ๋๋ฉด ์์กดํ ๋ค๋ฅธ ๋ชจ๋๊น์ง ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์ํํ๋ค.
๋ค์ด์ ์คํธ๋ ์ด๋ฏธ์ง๋ฅผ ํด์ํ ๊ฐ์ด๋ค.
A digest is the sha256 hash of a docker image, but an image is not really a single file but rather a set of layers.
๋์ปค๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด Dockerfile์ด๋ผ๋ ํ์ผ์ ์์ฒด DSL(Domain-specific language)์ธ์ด๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ์์ฑ ๊ณผ์ ์ ์ ๋๋ค. dockerfile์ ํตํด image๋ฅผ buildํ๊ฒ ๋๋ค.
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
๋์ปค ์ด๋ฏธ์ง๋ก ์๋ฒ๋ฅผ ์คํํ๋ฉด ๋์ปค ์ปจํ ์ด๋๊ฐ ๋ง๋ค์ด์ง๋ค. ์ฆ ์ปจํ ์ด๋๋ ์ด๋ฏธ์ง๋ฅผ ์คํํ ์ํ๋ผ๊ณ ๋ณผ ์ ์๋ค. ์ฌ๊ธฐ์ ์ถ๊ฐ๋๊ฑฐ๋ ๋ณํ๋ ๊ฐ์ ์ปจํ ์ด๋์ ์ ์ฅ๋๋ค.
๊ฐ์ ์ด๋ฏธ์ง์์ ์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ์ ์๊ณ ์ปจํ ์ด๋์ ์ํ๊ฐ ๋ฐ๋๊ฑฐ๋ ์ปจํ ์ด๋๊ฐ ์ญ์ ๋๋๋ผ๋ ์ด๋ฏธ์ง๋ ๋ณํ์ง ์๊ณ ๊ทธ๋๋ก ๋จ์์๋ค. ์ด๋ ๋ฐฐํฌ(ํน์ ์คํ)์์ ๊ณผ ์๊ด ์์ด ์๋ฒ์ ๋ด์ฉ์ ๋๊ฐ์ด ๋ง๋ค ์ ์๊ฒ๋ ๋ง๋ค์ด์ค๋ค.
๋์ปค ํ์ผ == ์๋ฒ ์ด์ ๊ธฐ๋ก
๋์ปค ์ด๋ฏธ์ง == ๋์ปค ํ์ผ + ์คํ ์์
๋์ปค ์ปจํ ์ด๋ == ๋์ปค ์ด๋ฏธ์ง + ํ๊ฒฝ ๋ณ์
๋์ปค ์ด๋ฏธ์ง๋ docker hub์ ๋ฑ๋กํ๊ฑฐ๋ docker registry ์ ์ฅ์๋ฅผ ์ง์ ๋ง๋ค์ด์ ๊ด๋ฆฌํ ์ ์๋ค. ๋ด ๊ณ์ ์ ๋ค์ด๊ฐ๋ฉด ์์ฑํ repository์ tags์ image๋ค์ด ์๋ค.
๋์ปค ์ด๋ฏธ์ง๋ ์ปจํ ์ด๋ ์คํ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ณดํต ์ฉ๋์ด n๋ฐฑ๋ฉ๊ฐ๋ก n๊ธฐ๊ฐ๊ฐ ๋๋ ๊ฒฝ์ฐ๋ ํํ๋ค. ๊ฐ์ ์ด๋ฏธ์ง์์ ์กฐ๊ธ ๋ณํํ๋ค๊ณ ๋น์ทํ ์ฉ๋์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ ๋ฐ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ ์ด์ด ๊ฐ๋ ์ ์ฌ์ฉํ๋ค.
์ด๋ฏธ์ง๋ฅผ ํ ๋ฐ์ผ๋ฉด ๋ ์ด์ด๋ค์ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ปจํ ์ด๋๋ฅผ ์คํํ ๋๋ ์ด ๋ ์ด์ด๋ค์ ์ฐจ๋ก๋๋ก ์์์ฌ๋ ค์ ํน์ ์์น์ ๋ง์ดํธ๋ฅผ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฏธ์ง์ ์ํ๋ ๋ ์ด์ด๋ค์ ์ฝ๊ธฐ ์ ์ฉ์ด๊ธฐ ๋๋ฌธ์ ์ ๋๋ก ๋ณํ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ๋ง์ง๋ง์ผ๋ก ์ปจํ ์ด๋ ์ ์ฉ ์ฐ๊ธฐ ๊ฐ๋ฅํ ๋ ์ด์ด๋ฅผ ํ ์ธต ๋ ์๊ณ , ์ปจํ ์ด๋์์ ์ผ์ด๋๋ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ด ๋ ์ด์ด์ ์ ์ฅํฉ๋๋ค.
ubuntu 16.04 ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ฉด ์๋์ ๊ฐ์ด ๋ฌ๋ค. ๋๋ ์ฌ์ฉํ ์ด๋ฏธ์ง๊ฐ ์์ผ๋ฉด ๋ชป ์ฐ๋ ์ค ์์๋๋ฐ, run ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ ๋ ํด๋น ์ด๋ฆ์ผ๋ก ์ ์ฅ๋ ์ด๋ฏธ์ง๊ฐ ์๋ค๋ฉด ๋ค์ด๋ก๋(pull)๋ฅผ ํ๊ณ ์ปจํ ์ด๋๋ฅผ ์์ฑ, ์์๊น์ง ํด์ค๋ค ๐ฏ
โฏ docker run ubuntu:16.04
Unable to find image 'ubuntu:16.04' locally
16.04: Pulling from library/ubuntu
6aa38bd67045: Pull complete
981ae4862c05: Pull complete
5bad8949dcb1: Pull complete
ca9461589e70: Pull complete
Digest: sha256:69bc24edd22c270431d1a9e6dbf57cfc4a77b2da199462d0251b145fdd7fa538
Status: Downloaded newer image for ubuntu:16.04
ํน์ ํ๋์ ํ๋ผ๋ command๊ฐ ์์๊ธฐ ๋๋ฌธ์ ์์์๋ ์ปจํ ์ด๋ ์์ฑ ํ ๋ฐ๋ก ์ข ๋ฃ๋๋ค. -a option์ผ๋ก ์ปจํ ์ด๋๋ฅผ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
โฏ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3000f258ecf ubuntu:16.04 "/bin/bash" 13 seconds ago Exited (0) 13 seconds ago stupefied_robinson
/bin/bash ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด ์ปจํ ์ด๋๋ฅผ ์คํํ๋ฉด ์๋์ ๊ฐ์ด root@container์id ๊ฐ ์์ ๋จ๊ณ , ls๋ฅผ ํด๋ณด๋ฉด ๋ฆฌ๋ ์ค์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์์ ๋๊ฐ์ run์ด์ง๋ง ์๋์ ๊ฒฝ์ฐ ์ด๋ฏธ์ง ๋ค์ด๋ก๋ ์์ด ๋ฐ๋ก ์์๋ ๊ฒ์ ์ ์ ์๋ค.
โฏ docker run --rm -it ubuntu:16.04 /bin/bash
root@4be0ed8f8460:/#
root@4be0ed8f8460:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
โฏ docker run -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
mysql:5.7
Unable to find image 'mysql:5.7' locally
5.7: Pulling from library/mysql
8559a31e96f4: Pull complete
d51ce1c2e575: Pull complete
c2344adc4858: Pull complete
fcf3ceff18fc: Pull complete
16da0c38dc5b: Pull complete
b905d1797e97: Pull complete
4b50d1c6b05c: Pull complete
d85174a87144: Pull complete
a4ad33703fa8: Pull complete
f7a5433ce20d: Pull complete
3dcd2a278b4a: Pull complete
Digest: sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854
Status: Downloaded newer image for mysql:5.7
091243f216ca14e5d56bbd83a392cb41326ede3e6a7859ee62a239d98960bb26
๋ฌด์จ ์ด์ ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ์์ ๋งํ๋ mysql -h127.0.0.1 -uroot์ ๊ฒฝ์ฐ access๊ฐ ๊ฑฐ์ ๋๋ค. ๊ทธ๋์ ๊ตฌ๊ธ๋ง์ ํด๋ณด๋ค๊ฐ ๊ทธ๋ฅ ์ปจํ ์ด๋๋ฅผ runํ๊ณ bash shell์ ๋ค์ด๊ฐ์ mysql์ ์คํํ๋ ๋ฐฉ๋ฒ์ ํ๋๊น ๋๋ค.
โฏ mysql -h127.0.0.1 -uroot
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
โฏ docker exec -it aaa732ddb37544 /bin/bash
root@aaa732ddb375:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.30 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
์คํ์ค์ธ ์ปจํ ์ด๋๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ปค๋งจ๋.
# ์คํ ์ค์ธ ๋์ปค๊ฐ ์์ ๊ฒฝ์ฐ
โฏ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad28f0249913 mysql:5.7 "docker-entrypoint.sโฆ" 5 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
์คํ์ด ์ข ๋ฃ๋ ๊ฒ์ ํฌํจํด์ ๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ๋ณด๋ ์ปค๋งจ๋ ๋ฐ ์ต์
โฏ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8e55741a8b3e chloeyeeunlee/rolex:0.2.0 "gunicorn --bind 0.0โฆ" 7 weeks ago Exited (255) 6 weeks ago 0.0.0.0:8000->8000/tcp rolex3
bc5dfa15cef2 chloeyeeunlee/rolex:0.2.0 "gunicorn --bind 0.0โฆ" 7 weeks ago Created rolex2
4acad6b533be 433bed511d1b "gunicorn --bind 0.0โฆ" 7 weeks ago Exited (0) 7 weeks ago rolex
4b8d6e0590bd redis:5 "docker-entrypoint.sโฆ" 8 weeks ago Exited (0) 7 weeks ago happy_villani
95dea880cdf4 docker/getting-started "nginx -g 'daemon ofโฆ" 8 weeks ago Exited (255) 7 weeks ago 0.0.0.0:80->80/tcp tender_perlman
์์ฑ๋ ํน์ ๋ค์ด๋ก๋ ๋ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ปค๋งจ๋
โฏ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
chloeyeeunlee/rolex 0.1.0 467b4e02da19 7 weeks ago 986MB
chloeyeeunlee/rolex 0.2.0 467b4e02da19 7 weeks ago 986MB
python 3 659f826fabf4 7 weeks ago 934MB
redis 5 a4d3716dbb72 2 months ago 98.3MB
docker/getting-started latest 3c156928aeec 2 months ago 24.8MB
container ID๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด ์ค์งํ ์ ์๋ค.
โฏ docker stop ad28f0249913
ad28f0249913
โฏ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
์ด๋ฏธ์ง๋ ์ฌ๋ฌ ๊ฐ์ ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์, deleted๊ฐ ์ฌ๋ฌ๊ฐ ๋จ๋ ๊ฒ์ ๋ชจ๋ ๋ ์ด์ด๊ฐ ์ญ์ ๋์๋ค๋ ๋ป์ด๋ค. ๋ค์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๊ฐ๋ฉด ํด๋น ID๋ฅผ ๊ฐ์ง ์ด๋ฏธ์ง๊ฐ ์ญ์ ๋ ๊ฒ์ ์ ์ ์๋ค.
โฏ docker rmi 3c156928aeec
Untagged: docker/getting-started:latest
Untagged: docker/getting-started@sha256:d2c4fb0641519ea208f20ab03dc40ec2a5a53fdfbccca90bef14f870158ed577
Deleted: sha256:3c156928aeec9595a140d3e9bb67fc6849650a0a756bbb0b1690ce9a4ddca884
Deleted: sha256:bd0923edebaabd47c31d4f79115f9cbd91e6045c9b2585f02b346af81a6d3dbd
Deleted: sha256:0d6528f3488cda7f74d825579182af56cbdd7fed5bccacfa3042834b514157ac
Deleted: sha256:ec7d8444b0ff84cd1e55ec191abe60e26f996ac883d87dcb50fdca507f2af8be
Deleted: sha256:beee9f30bc1f711043e78d4a2be0668955d4b761d587d6f60c2c8dc081efb203
โฏ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 c522ac0d6194 42 hours ago 126MB
mysql 5.7 9cfcce23593a 4 weeks ago 448MB
chloeyeeunlee/rolex 0.1.0 467b4e02da19 7 weeks ago 986MB
chloeyeeunlee/rolex 0.2.0 467b4e02da19 7 weeks ago 986MB
chloeyeeunlee/rolex <none> 433bed511d1b 7 weeks ago 986MB
python 3 659f826fabf4 7 weeks ago 934MB
redis 5 a4d3716dbb72 2 months ago 98.3MB