๐ก ๋ณธ ๋ฌธ์๋ 'Dockerfile'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
๋ง๋ค์ด์ง Docker ์ด๋ฏธ์ง๋ฅผ ์ฐพ๋ ๊ณผ์ , Dockerfile์ ์์ฑํ๊ณ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๊ณผ์ , ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ๋ ๊ณผ์ ๋ฑ ๊ธฐ์ด์ ์ธ ๋์ปค์ ๋ํด ๋ค๋ฃฌ ๋ด์ฉ์ด๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. Dockerfile ์ ๋ํ์ฌ
1.1 Dockerfile์ด๋?
Docker File์ด๋ Docker Image๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ค์ ํ์ผ์ ๋๋ค. ์ด ํ์ผ๋ด์ ์์ฑ๋ ์ธ์คํธ๋ญ์ ๋ค์ ์ฐธ์กฐํ์ฌ Docker File์ ์์ฑํ๋ฉด, ์ค์ ๋ ๋ด์ฉ๋๋ก Docker Image๋ฅผ ๋ง๋ค์ด์ง๋๋ค.
1.2 Docker ์ด๋ฏธ์ง ์ฌ์ฉํ๊ธฐ
1.2.1 Docker ์ด๋ฏธ์ง ์ฐพ์๋ณด๊ธฐ
์์ ์ค๋ช ํ๋ฏ์ด Docker Image๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ ์ง์ Dockerfile์ ์์ฑํ๊ณ ๋น๋ํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ด๋ฏธ์ง๋ ํน์ ์ ๋ช ์คํ์์ค๋ฅผ ์คํ์ํค๊ธฐ ์ํ pre-request ๊ณผ์ ์ผ๋ก ์ํ๋๋ ํ๊ฒฝ ๊ตฌ์ฑ์ ๊ฒฝ์ฐ ์ด๋ฏธ ๋ง๋ค์ด์ง ์ด๋ฏธ์ง๊ฐ ์์ ์ ์์ผ๋ ๋ฐ๋์ ๋ค์์ ๋ช ๋ น์ด๋ก ์ฐพ์๋ณด๊ณ Dockerfile๋ฅผ ์์ฑํ์๊ธฐ ๋ฐ๋๋๋ค.
$ docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 17430 [OK]
linuxserver/nginx An Nginx container… 178
...
- NAME: ๊ฒ์๋ ์ด๋ฏธ์ง์ ์ด๋ฆ์ ๋๋ค. ๊ณต์ ์ด๋ฏธ์ง๋ฅผ ์ ์ธํ ๋๋จธ์ง๋ '๋ ์ง์คํธ๋ฆฌ ์ฃผ์/์ ์ฅ์ ์์ ์/์ด๋ฏธ์ง ์ด๋ฆ' ํํ์ ๋๋ค.
- DESCRIPTION: ์ด๋ฏธ์ง์ ๋ํ ์ค๋ช ์ ๋๋ค.
- STARS: ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ๋ ์ฌ์ฉ์์๊ฒ ๋ฐ๋ ํ๊ฐ ํ์์ ๋๋ค.
- OFFICIAL: [OK] ํ์๋ ํด๋น ์ด๋ฏธ์ง์ ํฌํจ๋ ์ ํ๋ฆฌ์ผ์ด์ , ๋ฏธ๋ค์จ์ด ๋ฑ์ ๊ฐ๋ฐํ ์ ์ฒด์์ ๊ณต์์ ์ผ๋ก ์ ๊ณตํ ์ด๋ฏธ์ง๋ผ๋ ์๋ฏธ์ ๋๋ค.
- AUTOMATED: [OK] ํ์๋ ๋์ปค ํ๋ธ์์ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ ์ด๋ฏธ์ง ๋น๋ ์๋ํ ๊ธฐ๋ฅ์ ํ์ฉํด ์์ฑํ ์ด๋ฏธ์ง๋ฅผ ์๋ฏธํฉ๋๋ค.
1.2.2 Docker ์ด๋ฏธ์ง ๋ด๋ ค๋ฐ๊ธฐ
์ํ๋ ์ด๋ฏธ์ง๊ฐ ์๋ค๋ฉด ๋ค์์ ๋ช ๋ ค์ด๋ฅผ ํตํด ์ด๋ฏธ์ง๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
$ docker pull nginx
search๋ก ํ์ธ์ ๋๋ถ๋ถ์ ์ด๋ฏธ์ง๊ฐ ์์ ๊ฒ์ ๋๋ค. ๊ฐํน ์๊ฑฐ๋ ์ง์ ์ปค์คํ ํด์ผํ๋ ๊ฒฝ์ฐ Dockerfile์ ์์ฑํ์ฌ ์งํํ๋ฉด ๋ฉ๋๋ค.
1.3 Dockerfile ์์ฑ ๋ฐ ์คํํ๊ธฐ
1.3.1 Dockerfile ์์ฑ
๊ธฐ๋ณธ์ผ๋ก Dockerfile ์ด๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉํฉ๋๋ค. Dockerfile์ ๋ํ ์ธ๋ถ์ ์ธ ์์ฑ ๋ด์ฉ์ ํ๋จ์ '2. Dockerfile ์์ฑํ๊ธฐ'์์ ์๊ฐํ๊ฒ ์ต๋๋ค.
$ touch Dockerfile
1.3.2 Docker ์ด๋ฏธ์ง ์์ฑ: docker build
Dockerfile์ด ์์นํ ๋๋ ํ ๋ฆฌ์์ ์๋์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด, 1.0์ด๋ผ๋ ๋ฒ์ ์ ๊ฐ์ง docker_name์ด๋ผ๋ ์๋ก์ด ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค. Dockerfile์ด ์๋ ๋ค๋ฅธ ์ด๋ฆ์ ํ์ผ์ ๋น๋์์๋ ์ถ๊ฐ ์ต์ (-f)์ ์ค์ ์ง์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
$ docker build --tag docker_name:1.0 .
docker build ๋ช ๋ น์ด๋ ๋์ปค ๋ฐ๋ชฌ์ ๋น๋ ์ปจํ ์คํธ๋ฅผ ์ ์กํฉ๋๋ค. ์ด๋ ๋น๋ ์ปจํ ์คํธ๋ ๋น๋๋ฅผ ์คํํ ๋ ์ฌ์ฉํ ํ์ผ ์งํฉ์ด๋ฉฐ, ๋น๋ ๋ช ๋ น์ ์คํํ๋ ๋๋ ํ ๋ฆฌ์ ๊ทธ ํ์ ๋๋ ํ ๋ฆฌ์ ํฌํจ๋ ์ ์ฒด ํ์ผ์ด๋ค.
๋น๋ ์ปจํ ์คํธ์๋ COPY๋ ADD์์ ์ฌ์ฉํ์ง ์๋ ํ์ผ๋ ํฌํจ๋๋ฏ๋ก ๋น๋ ์ปจํ ์คํธ์๋ ํ์ํ ํ์ผ๋ง ํฌํจํด์ผ ํฉ๋๋ค. ๋ถ๋์ดํ๊ฒ ๋น๋ ๊ณผ์ ์์ ์ฌ์ฉํ์ง ์๋ ํ์ผ์ด ์กด์ฌํ ๊ฒฝ์ฐ .dockerignore ํ์ผ์ ๋ง๋ค์ด ์ปจํ ์คํธ์์ ์ ์ธํ ๋์์ ์ง์ ํ๋ฉด ๋ฉ๋๋ค.
1.3.3 Docker ์ด๋ฏธ์ง ์คํํ๊ธฐ: docker container ๋์ฐ๊ธฐ
์ค์ํ ์ : ๋ช ๋ น์ ์ ๋ ฅํ ๋, ๋ชจ๋ ์ต์ ์ ์ ์ธํ ํ์ ์ด๋ฏธ์ง๋ฅผ ์ ์ด์ฃผ์ด์ผ ํฉ๋๋ค.
$ docker run -dit --name docker_name docker_name:1.0
- ์ ๋ช ๋ น์ docker_name:1.0 ์ด๋ฏธ์ง๋ฅผ docker_name์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์ปจํ ์ด๋๋ฅผ ๋์๋ฌ๋ผ๋ ์๋ฏธ์ ๋๋ค.
์ถ๊ฐ ์ต์ ์ ๋ฆฌ
Option | Description |
-i --interactive |
์ปจํ ์ด๋์ ํ์ค ์ ๋ ฅ(stdin)์ ํ์ฑํ. (์ฃผ๋ก -it ํจ๊ป ์ฌ์ฉ) |
-t --tty |
tty(๊ฐ์ ํฐ๋ฏธ๋)์ ํ ๋น. ๋ฆฌ๋ ์ค์ ํค๋ณด๋๋ฅผ ํตํด ํ์ค ์ ๋ ฅ(stdin)์ ์ ๋ฌํ ์ ์๊ฒํ๋ค. (์ฃผ๋ก -it ํจ๊ป ์ฌ์ฉ) |
--name | ์ปจํ ์ด๋ ์ด๋ฆ์ ์ง์ . |
-d --detach |
์ปจํ ์ด๋๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ. |
--rm | docker run ๋ช ๋ น์ด๊ฐ ๋๋๋ฉด, ์ปจํ ์ด๋ ์๋ ์ญ์ . |
-p --publish |
ํธ์คํธ์ ์ปจํ
์ด๋์ ํฌํธ๋ฅผ ์ฐ๊ฒฐ (ํฌํธํฌ์๋ฉ). -p <ํธ์คํธ ํฌํธ>:<์ปจํ ์ด๋ ํฌํธ> ex) -p 80:8888 - ํธ์คํธ์ 8888๋ก ์ ์ํ๋ฉด, ์ปจํ ์ด๋ ๋ด๋ถ์ 80ํฌํธ๋ก ์๋ ์ ์. |
-v --volume |
ํธ์คํธ์ ์ปจํ
์ด๋์ ๋๋ ํ ๋ฆฌ ์ฐ๊ฒฐ(๋ง์ดํธ) -v <ํธ์คํธ ์ ๋๊ฒฝ๋ก>:<์ปจํ ์ด๋ ์ ๋๊ฒฝ๋ก> ex) -v /Users:/usr. - ์ปจํ ์ด๋ /usr์ ์ ์ฅํ๋ ํ์ผ์ ํธ์คํธ์ /Users ๋๋ ํ ๋ฆฌ์ ์ ์ฅ. |
--restart | ์ปจํ
์ด๋ ์ข
๋ฃ์, ์ฌ์์ ์ ์ฑ
์ค์ --restart="always" : ํญ์ ์ฌ์์ --restart="on-failure" : ์ข ๋ฃ ์คํ ์ดํฐ์ค๊ฐ 0์ด ์๋ ๋ ์ฌ์์ * --rm ์ต์ ๊ณผ --restart ์ต์ ์ ๋์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
--privileged | ์ปจํ ์ด๋ ์์์ ํธ์คํธ์ ๋ฆฌ๋ ์ค ์ปค๋ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ฌ์ฉ |
- ์ถ๊ฐ ์ต์ ์ด ๋ง๊ฑฐ๋ ํ๋ฒ์ ์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ๋์ฐ๊ณ ์ถ๋ค๋ฉด, docker compose์ ๋ํด์ ๊ณต๋ถํด๋ณด๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
- docker compose์ ๋ํ ์์ธํ ๋ด์ฉ์ [Docker] docker compose ์ ๋ฆฌ (feat. docker-compose.yml)๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
- ์ถ๊ฐ๋ก, privileged ์ค์ ์ ์ํด์ค์... ๋ฌธ์ ์๊ธด ์ ์ด ์์ด ๊ด๋ จ ๋ด์ฉ์ [Docker] Privileged Container์ ๋ํ์ฌ์ ๋ฐ๋ก ์ ๋ฆฌํ์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.^^
1.3.4 Docker ๋ด๋ถ ํ์ผ ๊ณต์ ํ๊ธฐ: docker cp๋ก ๋ก์ปฌ, ์ปจํ ์ด๋ ๊ฐ ํ์ผ ๊ณต์
1) ์ปจํ ์ด๋ ์์ ์๋ ํ์ผ์ ๋ก์ปฌ๋ก ๋ณต์ฌ
$ docker cp tmp_container:/root/data/test.md ~/data/
2) ๋ก์ปฌ์ ํ์ผ์ ์ปจํ ์ด๋ ์์ผ๋ก ๋ณต์ฌ
$ docker cp ~/data/test.md tmp_container:/root/data/
2. Dockerfile ์์ฑํ๊ธฐ
2.1 Dockerfile ์์ฑํ๊ธฐ: ์ฃผ์ ์ง์์ ์๊ฐ
Dockerfile ๋ด ์ฃผ์ ์ง์์๋ก๋ ์๋์ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค.
FROM | ํด๋น ๋์ปค ์ด๋ฏธ์ง์ ๋ฐํ์ด ๋ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ์ง์ |
WORKDIR | ์ด๋ฏธ์ง ๋ด๋ถ์์ COPY, RUN, CMD, ENTRYPOINT์ ๋ช ๋ น์ด ์คํ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ค์ |
COPY | ํธ์คํธ ๋จธ์ ์ ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋์ปค ์ปจํ ์ด๋ ์์ผ๋ก ๋ณต์ฌ |
ADD | ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ COPY์ ๋์ผํ๊ณ , ์์ถ์ ํธ๋ ๋ฑ ์ถ๊ฐ๊ธฐ๋ฅ์ด ๋ ์์ต๋๋ค. |
VOLUME | ๋๋ ํฐ๋ฆฌ์ ๋ด์ฉ์ ์ปจํ ์ด๋์ ์ ์ฅํ์ง ์๊ณ ํธ์คํธ์ ์ ์ฅํ๋๋ก ์ค์ |
RUN | ์ด๋ฏธ์ง๊ฐ ๋น๋๋ ๋ 1๋ฒ๋ง ์คํ๋๋ ๋ช ๋ น์ด๋ฅผ ์ ์ |
CMD | ์ด๋ฏธ์ง๊ฐ ์ปจํ ์ด๋ํ ๋ ๋(์คํ๋ ๋)๋ง๋ค ์คํ๋๋ ๋ช ๋ น์ด๋ฅผ ์ ์ |
EXPOSE | ์ด๋ฏธ์ง์ ํด๋น ํฌํธ๋ฅผ ์ธ๋ถ๋ก ๊ฐ๋ฐฉ |
ENTRYPOINT | ENTRYPOINT๋ฅผ ์ ๋ ฅํ๋ฉด CMD์ ์ ๋ฌ๋ ์ธ์๋ค์ ์ ๋ถ ENTRYPOINT์ ์ธ์๋ก ์ ๋ฌ |
LABEL | ์ด๋ฏธ์ง๋ฅผ ๋ง๋ ์ฌ๋์ ์ด๋ฆ ๋ฑ์ ๋ช ์ |
ENV
|
๋์ปค ์์์ ์ฌ์ฉํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ง์ |
ARG
|
์ด๋ฏธ์ง ๋น๋ํ ๋ ์ฌ์ฉํ ๋ณ์๋ฅผ ์ ์ |
ํ๋จ์ 'Dockerfile ์์ฑํ๊ธฐ: ์ง์์ ์ฉ๋ก ๋ฐ ์์ธํ ์ค๋ช '์์ ์์๋ฅผ ํตํด ๋์ฑ ์์ธํ๊ฒ ์๊ฐํ๊ฒ ์ต๋๋ค.
2.2 Dockerfile ์์ฑํ๊ธฐ: ์ง์์ ์ฉ๋ก ๋ฐ ์์ธํ ์ค๋ช
FROM
ํด๋น ๋์ปค ์ด๋ฏธ์ง์ ๋ฐํ์ด ๋ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ์ง์ ํ๋ ์ธ์คํธ๋ญ์ ์ ๋๋ค.
FROM centos:centos8
centos๋ ์ด๋ฏธ์ง๋ช
์ด๋ฉฐ, centos8๋ ํ๊ทธ๋ช
์
๋๋ค.
ํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๊ฑฐ๋ ๋ ์ง์คํธ๋ฆฌ(regestry)๋ฅผ ๋ฐ๋ก ์ง์ ํ์ง ์์ผ๋ฉด, docker hub์์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
WORKDIR
Docker ์ด๋ฏธ์ง ๋ด๋ถ์์ COPY, RUN, CMD, ENTRYPOINT์ ๋ช ๋ น์ด ์คํ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค.
WORKDIR /workdir
COPY
ํธ์คํธ ๋จธ์ ์ ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋์ปค ์ปจํ
์ด๋ ์์ผ๋ก ๋ณต์ฌํ๋ ์ธ์คํธ๋ญ์
์
๋๋ค.
์ด๋ฏธ์ง๊ฐ ๋น๋๋ ๋ 1๋ฒ๋ง ์คํ๋๋ ๋ช
๋ น์ด์
๋๋ค.
COPY . /workdir
ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ์๋ ํ์ผ๋ค์ ์ด๋ฏธ์ง ๋ด๋ถ /workdir ๋๋ ํฐ๋ฆฌ์ ์ถ๊ฐํฉ๋๋ค(์ ๋ ๊ฒฝ๋ก๋ฅผ ์ต์ ์ผ๋ก ์ฃผ์ด ํด๋น ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌํ ์ ์์ต๋๋ค.).
ADD
ADD pinpoint-agent-1.8.4.tar.gz /workdir
๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ COPY์ ๋์ผํ๊ณ , ์๋์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ก ๋ ์์ต๋๋ค.
- source๊ฐ remote URL ์ด๋ฉด ๋ค์ด๋ฐ์ ๋ค destination ์ ๋ณต์ฌํฉ๋๋ค.
- source๊ฐ ์ ์๋ ค์ง ์์ถํ์ผ ํ์์ด๋ฉด(tar, zip ๋ฑ) ์์ถ์ ํ์ด์ค๋๋ค.
- source๊ฐ remote URL + ์์ถํ์ผ ํ์์ด๋ฉด ์์ถ์ ํ์ง ์์ต๋๋ค.
์๋ฌด๋๋ ์์ ๊ฐ์ด ํน์ํ ์ํฉ์ด ์๋๋ผ๋ฉด COPY๋ฅผ ์ฐ๋๊ฒ ๊ฐ๋ ์ฑ์ ์ข์ต๋๋ค.
VOLUME
VOLUME์ ๋๋ ํฐ๋ฆฌ์ ๋ด์ฉ์ ์ปจํ ์ด๋์ ์ ์ฅํ์ง ์๊ณ ํธ์คํธ์ ์ ์ฅํ๋๋ก ์ค์ ํฉ๋๋ค.
VOLUME ๋ช ๋ น์ผ๋ก๋ ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ ํธ์คํธ์ ํน์ ๋๋ ํฐ๋ฆฌ์ ์ฐ๊ฒฐํ๋ ค๋ฉด? (bind mount)
- docker run ๋ช
๋ น์์ -v ์ต์
์ ์ฌ์ฉํ๊ฑฐ๋,
- ex) -v /home/sjchoi/package:/workdir
- docker-compose.yml ํ์ผ์ ์ค์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
- ex) volumes: /home/sjchoi/package:/workdir
RUN
๋์ปค ์ด๋ฏธ์ง๋ฅผ ์คํํ ์ปจํ
์ด๋ ์์์ ์คํํ ๋ช
๋ น์ด๋ฅผ ์ ์ํฉ๋๋ค.
์ด๋ฏธ์ง๊ฐ ๋น๋๋ ๋ 1๋ฒ๋ง ์คํ๋๋ ๋ช
๋ น์ด์ด๋ฉฐ, ์ฃผ๋ก ํ๊ฒฝ์ธํ
ํ๊ฑฐ๋ ์ค์นํ ๋ ์ฌ์ฉํฉ๋๋ค.
RUN sudo apt-get update
CMD
๋์ปค ์ด๋ฏธ์ง๋ฅผ ์คํํ ์ปจํ
์ด๋ ์์์ ์คํํ ๋ช
๋ น์ด๋ฅผ ์ ์ํฉ๋๋ค.
์ด๋ฏธ์ง๊ฐ ์ปจํ
์ด๋ํ ๋ ๋(์คํ๋ ๋)๋ง๋ค ์คํ๋๋ ๋ช
๋ น์ด์
๋๋ค.
์ฃผ์: CMD๋ Dockerfile ๋ด ํ๋๋ง ์์ฑํ ์ ์์ต๋๋ค.
์์ฑ๋ฒ์ด ์กฐ๊ธ ํน์ดํ๋ฐ, ์ด 3๊ฐ์ง ์์ฑ๋ฒ์ ์ ๊ณตํฉ๋๋ค
- CMD command param1 param2 […]
- FROM ์ผ๋ก ์ค์ ํ ์ด๋ฏธ์ง์ ํฌํจ๋ ์ ํ์ผ์ ์ฌ์ฉํ์ฌ ๋ช ๋ น์ ์คํํฉ๋๋ค.
- ์ ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- CMD [“executable”, “param1”, “param2” [, …]]
- ๋์ปค์์ ๊ถ์ฅํ๋ ํํ์ด๋ฉฐ, ์ ์์ด ๋ฐ๋ก ์คํํ๋ฉด์ ๋งค๊ฐ๋ณ์๋ฅผ ๋์ ธ์ฃผ๋ ํํ์ ๋๋ค.
- ์ ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค
- CMD ["echo", "Hello, name"]
$ Hello, name
- CMD ["echo", "Hello, name"]
- ๋ง์ฝ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์์ ์คํ์ํค๋ฉด์ ์ธ์๋ก ์ ๋ฌํด์ค์ผ ํฉ๋๋ค.
- CMD ["/bin/bash", "-c", "echo Hello, $name"]
- CMD [“param1”, “param2” [, …]]
- ENTRYPOINT์ ์ง์ ๋ ๋ช ๋ น์ ์ฌ์ฉํ ์ธ์๋ฅผ ์ ๋ฌํฉ๋๋ค.
EXPOSE
expose๋ ํธ์คํธOS์ ํฌํธ๋ฅผ ๊ณต๊ฐํ์ง ์๊ณ , ์ปจํ ์ด๋๋ง ํฌํธ๋ฅผ ๊ณต๊ฐ ํฉ๋๋ค. ํธ์คํธOS์ ์ง์ ์ฐ๊ฒฐ๋์ง ์๊ณ ๋งํฌ ๋ฑ์ผ๋ก ์ฐ๊ฒฐ๋ ์ปจํ ์ด๋-์ปจํ ์ด๋๊ฐ์ ํต์ ๋ง์ด ํ์ํ ๊ฒฝ์ฐ ๋ฑ์ ์ฌ์ฉ ๋ฉ๋๋ค. ๋ฌผ๋ก , EXPOSE๋ก ์ง์ ๋์ด ์๋ค๊ณ ํด์ ํด๋น ํฌํธ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ฑฐ๋ ํ ๊ฒ์ ์๋๋ฉฐ, ์ปจํ ์ด๋๋ฅผ ์คํํ ๋ ํด๋น ํฌํธ๋ฅผ ๋งคํ(ํฌํธํฌ์๋ฉ)์์ผ์ผ ํ๋ค.
EXPOSE 3000 4000
ENTRYPOINT
CMD์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ปจํ
์ด๋ ์์์ ์คํ๋ ํ๋ก์ธ์ค(๋ช
๋ น)๋ฅผ ์ง์ ํ๋ ์ธ์คํธ๋ญ์
์
๋๋ค.
ENTRYPOINT๋ฅผ ์
๋ ฅํ๋ฉด CMD์ ์ ๋ฌ๋ ์ธ์๋ค์ ์ ๋ถ ENTRYPOINT์ ์ธ์๋ก ์ ๋ฌ๋ฉ๋๋ค.
์ด๋ฅผ ์๋์ ๊ฐ์ด ์ฌ์ฉํด์ ์ปจํ ์ด๋์ ์ฉ๋๋ฅผ ์ด๋์ ๋ ์ ํ ํ ์ ์์ต๋๋ค.
FROM golang:1.10
ENTRYPOINT ["go"]
CMD [""]
ํด๋น ์ปจํ
์ด๋์ ์
๋ ฅํ๋ ๋ช
๋ น์ด์ ๊ฒฝ์ฐ ์๋์ผ๋ก go ๊ฐ ์
๋ ฅ๋ ์ํ๊ฐ ๋ฉ๋๋ค.
๋ฐ๋ผ์ go ์ดํ์ ๋ช
๋ น์ด๋ง ์ธ์๋ก ๋๊ธฐ๋ฉด ๋ฉ๋๋ค.
$ docker container run gotest:latest version
$ go version go1.10.3 linux/amd64 # ์ถ๋ ฅ
LABEL
์ด๋ฏธ์ง๋ฅผ ๋ง๋ ์ฌ๋์ ์ด๋ฆ ๋ฑ์ ์ ์ ์ ์์ต๋๋ค.
LABEL email="dhslrl321@gmial.com"
LABEL name="jang"
LABEL version="1.0"
LABEL description="My Spring Application?"
- ๋น์ทํ ๊ธฐ๋ฅ์ ํ๋ MAINTAINER ๋ช ๋ น์ด์ ๊ฒฝ์ฐ, ์ด์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ฒ ๋์์ต๋๋ค(deprecated).
ENV
๋์ปค ์์์ ์ฌ์ฉํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
ENV WORKPATH=/home/workdir
ARG
์ด๋ฏธ์ง ๋น๋ํ ๋ ์ฌ์ฉํ ๋ณ์๋ฅผ ์ ์ํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ปจํ
์ด๋ ์์ฑ์์ ํด๋์คํจ์ค๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
ARG classpath=.
ENV CLASSPATH=${classpath}
CMD ["java", "Main"]
์ธ๋ถ์์ ํ๊ฒฝ๋ณ์๋ฅผ ์ ๋ฌ ๋ฐ์์๋ ์๋ค
--build-arg๋ฅผ ํตํด ์ธ์๋ฅผ ์ ๋ฌํ๋ค
$ docker image build --build-arg classpath=/workapce/javatest -t javatest:latest .โ
3. Dockerfile ๊ณต์ ํ๊ธฐ
3.1 Dockerfile ๊ณต์ ํ๊ธฐ: docker hub
์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ฉด ๋์ปค ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ด์ฉํด์ ๊ณต์ ํ ์ ์์ต๋๋ค. ๋ค์ํ ๋์ปค ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์กด์ฌํ๋๋ฐ ์ด ์ค ๋ํ์ ์ธ ๊ฒ์ด docker hub์ ๋๋ค. https://hub.docker.com ์ฌ์ดํธ์ ๊ฐ์ ํ๋ฉด ๋์ปค ํ๋ธ์ ์ด๋ฏธ์ง๋ฅผ ํธ์ํด์ ๊ณต์ ํ ์ ์์ต๋๋ค.
3.1.1 Dockerfile ์ถ๊ฐ tag ์์ฑํ๊ธฐ
์์ฑํ ์ด๋ฏธ์ง์ <docker hub ๊ณ์ >/<๋ฆฌํฌ์งํ ๋ฆฌ์ด๋ฆ>:<ํ๊ทธ> ํํ๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐ ํ๊ทธ๋ฅผ ๋ถ์ ๋๋ค.
$ docker tag docker_name:1.0 DrawingProcess/test:1.0
์์ ๋ช ๋ น์ด๋ docker_name:1.0 ์ด๋ฏธ์ง๋ฅผ DrawingProcess ๊ณ์ test ๋ฆฌํฌ์งํ ๋ฆฌ์ 1.0 ๋ฒ์ ์ผ๋ก ์ฌ๋ฆฌ๊ฒ ๋ค๋ ์๋ฏธ์ ๋๋ค.
3.1.2 docker hub ๋ก๊ทธ์ธํ๊ธฐ
docker login ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๋์ปค ํ๋ธ์ ๋ก๊ทธ์ธํฉ๋๋ค.
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. ...
Username: DrawingProcess
Password:
...
3.1.3 docker hub ์ ์ด๋ฏธ์ง push ํ๊ธฐ
๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ค๋ฉด docker push๋ก ์ด๋ฏธ์ง๋ฅผ ํธ์ํฉ๋๋ค.
$ docker push DrawingProcess/test:1.0
3.1.4 docker hub ์ ์ฌ๋ฆฐ ์ด๋ฏธ์ง ์ฌ์ฉํ๊ธฐ
ํธ์๊ฐ ๋๋๋ฉด ๋์ปค ํ๋ธ์์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
docker run -d --rm -p 5000:5000 DrawingProcess/docker_name:1.0
3.2 Dockerfile ๊ณต์ ํ๊ธฐ: Docker ์ด๋ฏธ์ง ์์ถํ๊ธฐ
ํ์ฌ ๋์๋ ์ด๋ฏธ์ง๋ฅผ ์์ถํฉ๋๋ค.
docker save -o package.tar.gz package:latest
3.3 Dockerfile ๊ณต์ ํ๊ธฐ: Docker ์ปจํ ์ด๋ ์์ถํ๊ธฐ
ํ์ฌ ๋์๋ ์ปจํ ์ด๋ ์์ฒด๋ฅผ ์์ถํฉ๋๋ค.
docker export <container_name> > map.tar.gz
์ฐธ๊ณ
- [Docker Official] Dockerfile reference: https://docs.docker.com/engine/reference/builder/
- [Docker] Dockerfile์ด๋? : https://joont92.github.io/docker/Dockerfile/
- [Docker] Docker File์ ์ด์ฉํ์ฌ Docker Image๋ง๋ค๊ธฐ: https://khj93.tistory.com/entry/Docker-Docker-File-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0-%EB%AA%85%EB%A0%B9%EC%96%B4
- ๋์ปค ์์ํ๊ธฐ 7 : Dockerfile์ ์ด์ฉํ ์ด๋ฏธ์ง ์์ฑ: https://javacan.tistory.com/entry/docker-start-7-create-image-using-dockerfile
- [Docker] ๋์ปคํ์ผ์์ MAINTAINER๋ ๋ ์ด์ ์ฐ๋ฉด ์๋๋ค๊ณ ? ๊ทธ๋ผ ๋์ LABEL์ ์ฐ์!: https://wonit.tistory.com/345
- ์ผ๋ง๋ค ์ํค๋ ธ๋ฆฌ, ใ๋์ปค/์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ํ์ฉํ ์ปจํ ์ด๋ ๊ฐ๋ฐ ์ค์ ์ ๋ฌธใ, ์ฌํจ์ญ ์ฎ๊น, ์ํค๋ถ์ค(2019)
'Study: DeveloperTools(DevTool) > DevTool: Container' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] ๋์ปค ๋คํธ์ํฌ ์ ๋ฆฌ (feat. docker network) (0) | 2022.10.27 |
---|---|
[Docker] Privileged Container์ ๋ํ์ฌ (1) | 2022.10.03 |
[Docker] docker-compose VS docker compose ์ฐจ์ด์ ๋น๊ต (0) | 2022.09.07 |
[Docker] Docker Compose ์ปค๋งจ๋ ์ฌ์ฉ๋ฒ (0) | 2022.09.06 |
[Docker] docker compose ์ ๋ฆฌ (feat. docker-compose.yml) (0) | 2022.09.05 |