Docker ๋ฐฐํฌ ์์, DockerFile ์์ฑ ๋ฑ ์ ๋ฐ์ ์ธ ๋ด์ฉ์ ๊ธฐ๋ก๐
- Dockfile ์์ฑ
- image ์์ฑ
- image๋ฅผ container registry์ ์ ๋ก๋
- ์๋ฒ์์ ๋ค์ด๋ก๋ ๋ฐ ์คํ
๊ทธ ์ธ ๋ช ๋ น์ด๋ "์ฐธ๊ณ " ไธญ 1๋ฒ์งธ ๋งํฌ๋ฅผ ์ฐธ๊ณ
- FROM : ์์ฑํ ์ด๋ฏธ์ง์ ๋ฒ ์ด์ค๊ฐ ๋๋ ์ด๋ฏธ์ง๋ฅผ ์ง์ ํ๋ ๋ช
๋ น์ด๋ก, ๋ฐ๋์ ์ง์ ํด์ผํ๋ ๊ฐ์ด๋ฉฐ ๋ฐ๋์ ํ ๋ฒ์ด์ ์
๋ ฅํด์ผ ํจ
- ex)
FROM golang:1.19-alpine
- ex)
- MAINTAINER : ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๊ฐ๋ฐ์ ๋ฑ์ ๋ํ๋ด๋ ๋ช ๋ น์ด
- COPY : ํธ์คํธ ์ปดํจํฐ์ ์๋ ๋๋ ํฐ๋ฆฌ๋ ํ์ผ์ Docker ์ด๋ฏธ์ง ๋ด๋ถ๋ก ๋ณต์ฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ช
๋ น์ด
- ex)
COPY ~/model ./model
- ex)
- RUN : ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด, ์ปจํ
์ด๋ ๋ด๋ถ์์ ํน์ ํ์ผ์ ์คํํด์ผํ ๋ ์ฌ์ฉํ๋ ๋ช
๋ น์ด์. Dockfile๋ก๋ถํฐ ๋์ปค์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ์๊ฐ ์คํ๋จ.
- ex)
RUN apt-get update
- ex)
- CMD : ์ปจํ ์ด๋๊ฐ ์์๋ ๋๋ง๋ค ์คํ๋๋ ๋ช ๋ น์ด๋ก ํ๋ฒ๋ง ์ฌ์ฉํ ์ ์์
- WORKDIR : shell์ cd ๋ช ๋ น๋ฌธ๊ณผ ๊ฐ์ด ์ปจํ ์ด๋์์์ ์์ ๋๋ ํ ๋ฆฌ๋ก ์ ํ์ ์ํด ์ฌ์ฉ๋๋ ๋ช ๋ น์ด
- EXPOSE : Dockerfile ๋น๋๋ก ์์ฑ๋ ์ด๋ฏธ์ง์์ ๋
ธ์ถํ ํฌํธ๋ฅผ ์ค์ ํ ๋ ์ฌ์ฉํ๋ ๋ช
๋ น์ด
- ex)
EXPORT 8080
- ex)
- ENV : ํ๊ฒฝ ๋ณ์ ํ ๋นํ ๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด
์์ธ ๋ด์ฉ์ "์ฐธ๊ณ " ไธญ 6๋ฒ์งธ ๋งํฌ๋ฅผ ์ฐธ๊ณ
- Dockerfile๋ก ์ด๋ฏธ์ง ๋น๋ ์, ์ด๋ค ํ์ผ์ ์ ์ธ์ํฌ ๊ฒ์ธ์ง ๋ช
์ํ๋ ํ์ผ์
- ํ๋์ ๋๊ตฌ๋ก์จ, ํ์ํ Docker ๋น๋ ๋ด์ฉ์ ์ ์ํ๋ ๋ฐ์ ์ฌ์ฉ๋จ
- .dockerignore ํ์ผ์ ํฌํจ๋ ํ์ผ๋ค๊ณผ ํด๋๋ค์ ๋น๋ ๋ด์ฉ์ ํฌํจ๋์ง ์๊ฒ ๋จ
- .gitignore ํ์ผ๊ณผ ๋น์ทํ๊ฒ, git์ ์์ ํ์ฌ ์ฌ๋ฆด ๋ gitignore์ ์ฌ๋ฆฌ์ง ๋ง์์ผํ ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ ํ๋ ๊ฒ๊ณผ ๊ฐ์
- .dockerignore ํ์ผ์ ์ ํ์ฉํ๋ฉด, ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์์ผ๋ฉฐ ๋น๋ ์๋๋ ํฅ์์ํฌ ์ ์์
- ์๋ "์ฐธ๊ณ " ไธญ 3๋ฒ์งธ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์ฌ, ๊ธฐ์ด ์ค์ต์ ํ์ตํ์๐
- docker build๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ "Hello golang..."์ ์ถ๋ ฅํ๋ gohello ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ์์.
-
์๋ "์ฐธ๊ณ " ไธญ 4๋ฒ์งธ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์ฌ, ์ค์ตํ์์
-
image ์์ฑ ๊ด๋ จ ๋ช ๋ น์ด
docker build --tag <image_name> .
: ์ํ๋ ์ด๋ฏธ์ง ์ด๋ฆ์ ์ง์ ํ์ฌ docker ์ด๋ฏธ์ง ์์ฑํ๋ ๋ช ๋ น์ดdocker build
: default๋ก latest๋ก docker ์ด๋ฏธ์ง ์์ฑ๋จdocker image ls
: ํ์ฌ๊ฒฝ๋ก์์ docker ์ด๋ฏธ์ง ๋ชฉ๋กdocker image tag <"source"iamge_name> <new tag-image>
: "source" ์ด๋ฏธ์ง๋ก, ์๋ก์ด tag๋ฅผ ๋ฌ์ ์ด๋ฏธ์ง ์์ฑํ๋ ๋ช ๋ น์ดdocker image rm <remove image_name>
: ํน์ ์ด๋ฏธ์ง ์ญ์ ํ๋ ๋ช ๋ น์ด
-
image > container๋ก ์คํํ๋ ๋ช ๋ น์ด
docker run <image_name>
: container ๋ด๋ถ์์ ํน์ ์ด๋ฏธ์ง ์คํํ๋ ๋ช ๋ น์ดdocker run --publish <host_port>:<container_port> <image_name>
: container์ ๋ํ ๋ด๋ถ ํฌํธ๋ฅผ ์ธ๋ถํฌํธ๋ก ๋ ธ์ถํ๊ธฐ ์ํด์๋ --publish ํ๋๊ทธ ์ฌ์ฉํด์ผํจ.- ์ฆ, host์ container ํฌํธ ์ฐ๊ฒฐ(ํฌํธํฌ์๋ฉ)
docker run -d -p <host_port>:<container_port> <image_name>
: container๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ์ํค๊ธฐ ์ํด์ -d, --detach ํ๋๊ทธ ์ฌ์ฉํด์ผ ํจ.docker run -d -p <host_port>:<container_port> --name <new_name> <image_name>
: new_name์ผ๋ก container ์ด๋ฆ ์ง์ ํ๋ ๋ช ๋ น์ด
-
ํ๋ก์ธ์ค ํ์ธ/์ค์งํ๋ ๋ช ๋ น์ด
docker ps
: ์คํ๋๊ณ ์๋ container ํ๋ก์ธ์ค ๋ชฉ๋ก ํ์ธํ๊ธฐ ์ํจ, CONTAINER ID/IMAGE/COMMAND/CREATED/STATUS/PORTS/NAMES๊ฐ ์์ฐจ์ ์ผ๋ก ์ถ๋ ฅ๋จ.docker stop <NAMES>
: ์ ๋ ฅํ NAMES์ ํด๋นํ๋ Container ์ค์งํ๋ ๋ช ๋ น์ด (container id๋ฅผ ์ ๋ ฅํด๋ ๋จ)docker ps -all
: ์คํ์ค์ด๊ฑฐ๋ ์ค์ง๋ ๋ชจ๋ container๋ฅผ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด, ๋๋ -a๋ฅผ ์ ๋ ฅํด๋ ๋จ
- Docker Compose : ์ฌ๋ฌ ๊ฐ์ Container๋ก ๊ตฌ์ฑ๋ ์๋น์ค๋ฅผ ๊ตฌ์ถํ๊ณ ์คํ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์
- docker-compose.yml : ๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ๋์ปค ์คํ ์ต์ ์ ๋ฏธ๋ฆฌ ์ ์ด๋ ๋ฌธ์๋ก, ํ๋ก์ ํธ ๋ฃจํธ์ ํ์ผ์ ๋ง๋ค๊ณ ์คํ์ค์ ์ ์ ์ด๋ ๋ฌธ์์. ํฐ๋ฏธ๋์์ ๋์ปค ๋ช ๋ น์ด๋ฅผ ํตํด ์ปจํ ์ด๋๋ฅผ ์คํํ๊ฑฐ๋ ์ฃฝ์ผ ์ ์์
- ๊ฐ๊ฐ์ container์ Dockerfile ์์ฑ(๊ธฐ์กด์ ๊ณต๊ฐ๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ํด๋น์์)
- docker-compose.yml ์์ฑ ํ, ๊ฐ๊ฐ ๋ ๋ฆฝ๋ container์ ์คํ ์ ์ ์ค์
docer-compose up
cmd๋ฅผ ์คํํ์ฌ docker-compose.yml๋ก ์ ์ํ container publishํจ