๐ณ Docker ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ
๐พ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํดย Dockerfile ์ด๋ผ๋ ์ด๋ฏธ์ง ๋น๋์ฉ ํ์ผ์ ์ฌ์ฉํฉ๋๋ค.
๐ฏ Dockerfile ๊ตฌ์กฐ
Ruby ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ubuntu์ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ํตํด ๊ตฌ์กฐ๋ฅผ ์ดํด๋ด ๋๋ค.
Dockerfile ์์ฑ
์๋ ๊ณผ์ ์ ์ ์คํฌ๋ฆฝํธ, Dockerfile๋ก ๋ง๋ค์ด ๋น๊ตํฉ๋๋ค.
์์ | ์์
---------------------
1 | ubuntu ์ค์น
2 | ruby ์ค์น
3 | ์์ค ๋ณต์ฌ
4 | Gem ํจํค์ง ์ค์น
5 | Sinatra ์๋ฒ ์คํ
์ ์คํฌ๋ฆฝํธ
# 1. ubuntu ์ค์น (ํจํค์ง ์
๋ฐ์ดํธ)
apt-get update
# 2. ruby ์ค์น
apt-get install ruby
gem install bundler
# 3. ์์ค ๋ณต์ฌ
mkdir -p /usr/src/app
scp Gemfile app.rb root@ubuntu:/usr/src/app # From host
# 4. Gem ํจํค์ง ์ค์น
bundle install
# 5. Sinatra ์๋ฒ ์คํ
bundle exec ruby app.rb
Dockerfile
## ํต์ฌ ๋ช
๋ น์ด๋ ํ์ผ์ ๋ณต์ฌํ๋ COPY์ ์คํํ๋ RUN ์
๋๋ค.
# 1. ubuntu ์ค์น (ํจํค์ง ์
๋ฐ์ดํธ + ๋ง๋ ์ฌ๋ ํ์)
FROM ubuntu:16.04
MAINTAINER subicura@subicura.com
RUN apt-get -y update
# 2. ruby ์ค์น
RUN apt-get -y install ruby
RUN gem install bundler
# 3. ์์ค ๋ณต์ฌ
COPY . /usr/src/app
# 4. Gem ํจํค์ง ์ค์น (์คํ ๋๋ ํ ๋ฆฌ ์ค์ )
WORKDIR /usr/src/app
RUN bundle install
# 5. Sinatra ์๋ฒ ์คํ (Listen ํฌํธ ์ ์)
EXPOSE 4567
CMD bundle exec ruby app.rb -o 0.0.0.0
์ ์คํฌ๋ฆฝํธ์ ๋ด์ฉ์ ๊ฑฐ์ ๊ทธ๋๋ก Dockerfile๋ก ์ฎ๊ฒผ์ต๋๋ค. ์ฐจ์ด์ ์ ๋์ปค ๋น๋ ์ค์ ํค๋ณด๋๋ฅผ ์
๋ ฅํ ์ ์๊ธฐ ๋๋ฌธ์ย (y/n) ์ ๋ฌผ์ด๋ณด๋ ๊ฑธ ๋ฐฉ์งํ๊ธฐ ์ํดย -yย ์ต์
์ ์ถ๊ฐํ ๊ฒ ์ ๋์
๋๋ค.
์ด๋ฏธ์ง ์์ฑ
์์ฑํ Dockerfile์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
# Dockerfile์ ๋ง๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ์ฌ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํฉ๋๋ค.
# docker build -t [์๋ก ์์ฑํ ์ด๋ฏธ์ง ์ด๋ฆ] [Dockerfile ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก]
$ docker build -t app .
ํ์ธ
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 54d239c00f11 4 minutes ago 209 MB
ubuntu 16.04 f49eec89601e 2 weeks ago 129 MB
๐ฏ Dockerfile ๊ธฐ๋ณธ ๋ช ๋ น์ด
Dockerfile์ ๊ธฐ๋ณธ์ ์ธ ๋ช ๋ น์ด๋ฅผ ์ดํด๋ด ๋๋ค.
FROM
ํ๋์ Docker ์ด๋ฏธ์ง๋ base ์ด๋ฏธ์ง๋ถํฐ ์์ํด์ ๊ธฐ์กด ์ด๋ฏธ์ง์์ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ์ค์ฒฉํด์ ์ฌ๋ฌ ๋จ๊ณ์ ์ด๋ฏธ์ง ์ธต(layer)์ ์์๊ฐ๋ฉฐ ๋ง๋ค์ด์ง๋๋ค.
FROM
ย ๋ช
๋ น๋ฌธ์ ์ด base ์ด๋ฏธ์ง๋ฅผ ์ง์ ํด์ฃผ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋๋ฐ, ๋ณดํต Dockerfile ๋ด์์ ์ต์๋จ์ ์์นํฉ๋๋ค. base ์ด๋ฏธ์ง๋ ์ผ๋ฐ์ ์ผ๋ก Docker Hub์ ๊ฐ์ Docker repository์ ์ฌ๋ ค๋์ ์ ์๋ ค์ง ๊ณต๊ฐ ์ด๋ฏธ์ง์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
# FROM <์ด๋ฏธ์ง>
# FROM <์ด๋ฏธ์ง>:<ํ๊ทธ>
# Ubuntu ์ต์ ๋ฒ์ ์ base ์ด๋ฏธ์ง๋ก ์ฌ์ฉ
FROM ubuntu:latest
MAINTAINER (deprecated)
Dockerfile์ ๊ด๋ฆฌํ๋ ์ฌ๋์ ์ด๋ฆ ๋๋ ์ด๋ฉ์ผ ์ ๋ณด๋ฅผ ์ ์ต๋๋ค. ๋น๋์ ์ํฅ์ ์ฃผ์ง๋ ์์ต๋๋ค.
# MAINTAINER <name>
MAINTAINER name@gmail.com
COPY
ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ด๋ฏธ์ง๋ก ๋ณต์ฌํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์ค๋ฅผ ๋ณต์ฌํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค.ย target ๋๋ ํ ๋ฆฌ๊ฐ ์๋ค๋ฉด ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
# COPY [--chown=<user>:<group>] <src>... <dest>
# COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
COPY . /usr/src/app
ADD
COPY
๋ช
๋ น์ด์ ๋งค์ฐ ์ ์ฌํ๋ ๋ช๊ฐ์ง ์ถ๊ฐ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.ย src ์ ํ์ผ ๋์ URL์ ์
๋ ฅํ ์ ์๊ณ ย src
์ ์์ถ ํ์ผ์ ์
๋ ฅํ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ์์ถ์ ํด์ ํ๋ฉด์ ๋ณต์ฌ๋ฉ๋๋ค.
# ADD [--chown=<user>:<group>] [--checksum=<checksum>] <src>... <dest>
# ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
ADD . /usr/src/app
RUN
๋ช ๋ น์ด๋ฅผ ๊ทธ๋๋ก ์คํํฉ๋๋ค. ๋ด๋ถ์ ์ผ๋กย /bin/sh -cย ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ๋ฐฉ์์ ๋๋ค.
# RUN <command>
RUN npm install --silent
# RUN ["executable", "param1", "param2"]
RUN ["/bin/bash", "-c", "echo hello"]
# ๋ฉํฐ๋ผ์ธ
RUN /bin/bash -c 'source $HOME/.bashrc && \
echo $HOME'
ENTRYPOINT
ENTRYPOINT
ย ๋ช
๋ น๋ฌธ์ ์ด๋ฏธ์ง๋ฅผ ์ปจํ
์ด๋๋ก ๋์ธ ๋ ํญ์ ์คํ๋์ผ ํ๋ ์ปค๋งจ๋๋ฅผ ์ง์ ํ ๋ ์ฌ์ฉํฉ๋๋ค. ENTRYPOINT
ย ๋ช
๋ น๋ฌธ์ Docker ์ด๋ฏธ์ง๋ฅผ ๋ง์น ํ๋์ ์คํ ํ์ผ์ฒ๋ผ ์ฌ์ฉํ ๋ ์ ์ฉํฉ๋๋ค. ์๋ํ๋ฉด ์ปจํ
์ด๋๊ฐ ๋ฐ ๋ย ENTRYPOINT
ย ๋ช
๋ น๋ฌธ์ผ๋ก ์ง์ ๋ ์ปค๋งจ๋๊ฐ ์คํ๋๊ณ , ์ด ์ปค๋งจ๋๋ก ์คํ๋ ํ๋ก์ธ์ค๊ฐ ์ฃฝ์ ๋, ์ปจํ
์ด๋๋ก ๋ฐ๋ผ์ ์ข
๋ฃ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
# ENTRYPOINT ["<์ปค๋งจ๋>", "<ํ๋ผ๋ฏธํฐ1>", "<ํ๋ผ๋ฏธํฐ2>"]
# ENTRYPOINT <์ ์ฒด ์ปค๋งจ๋>
ENTRYPOINT ["npm", "start"]
CMD
Dockerfile์๋ ํ๋์ CMD
๋ช
๋ น์ด๋ง ์์ ์ ์์ต๋๋ค. ๋ ์ด์์ CMD
๋ฅผ ๋์ดํ๋ฉด ๋ง์ง๋ง CMD
๋ง ์ ์ฉ๋ฉ๋๋ค.
CMD
์ ์ฃผ์ ๋ชฉ์ ์ ์คํ ์ปจํ
์ด๋์ ๋ํ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค. CMD
ย ๋ช
๋ น๋ฌธ์ ๋ง์๊ฒฝ์ฐ ENTRYPOINT
๋ช
๋ น๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉํ๊ฒ ๋๋๋ฐ,ย ENTRYPOINT
ย ๋ช
๋ น๋ฌธ์ผ๋ก๋ ์ปค๋งจ๋๋ฅผ ์ง์ ํ๊ณ ,ย CMD
ย ๋ช
๋ น๋ฌธ์ผ๋ก ๋ํดํธ ํ๋ฆฌ๋ฏธํฐ๋ฅผ ์ง์ ํด์ฃผ๋ฉด ๋งค์ฐ ์ ์ฐํ๊ฒ ์ด๋ฏธ์ง๋ฅผ ์คํํ ์ ์๊ฒ ๋ฉ๋๋ค.
CMD ["executable","param1","param2"]
CMD command param1 param2
CMD bundle exec ruby app.rb
WORKDIR
RUN
, CMD
, ADD
, COPY
๋ฑ์ด ์ด๋ฃจ์ด์ง ๊ธฐ๋ณธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค. ๊ฐ ๋ช
๋ น์ด์ ํ์ฌ ๋๋ ํ ๋ฆฌ๋ ํ ์ค ํ ์ค๋ง๋ค ์ด๊ธฐํ๋๊ธฐ ๋๋ฌธ์ย RUN cd /path ๋ฅผ ํ๋๋ผ๋ ๋ค์ ๋ช
๋ น์ด์์ ๋ค์ ์์น๊ฐ ์ด๊ธฐํ ๋ฉ๋๋ค. ๊ฐ์ ๋๋ ํ ๋ฆฌ์์ ๊ณ์ ์์
ํ๊ธฐ ์ํด์ย WORKDIR
์ ์ฌ์ฉํฉ๋๋ค.
WORKDIR /path/to/workdir
EXPOSE
๋์ปค ์ปจํ ์ด๋๊ฐ ์คํ๋์์ ๋ ์์ฒญ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋(Listen) ํฌํธ๋ฅผ ์ง์ ํฉ๋๋ค. ์ฌ๋ฌ๊ฐ์ ํฌํธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
# EXPOSE <port> [<port>...]
# EXPOSE <ํฌํธ>/<ํ๋กํ ์ฝ>
EXPOSE 4567
EXPOSE 9999/udp
์ฐธ๊ณ
EXPOSE
ย ๋ช
๋ น๋ฌธ์ผ๋ก ์ง์ ๋ ํฌํธ๋ ํด๋น ์ปจํ
์ด๋์ ๋ด๋ถ์์๋ง ์ ํจํ๋ฉฐ, ํธ์คํธ(host) ์ปดํจํฐ์์๋ ์ด ํฌํธ๋ฅผ ๋ฐ๋ก ์ ๊ทผ์ ํ ์ ์๋ ๊ฒ์ ์๋๋ผ๋ ๊ฒ๋๋ค. ํธ์คํธ ์ปดํจํฐ๋ก๋ถํฐ ํด๋น ํฌํธ๋ก์ ์ ๊ทผ์ ํ์ฉํ๋ ค๋ฉด,ย docker run
ย ์ปค๋งจ๋๋ฅผย -p
ย ์ต์
์ ํตํด ํธ์คํธ ์ปดํจํฐ์ ํน์ ํฌํธ๋ฅผ ํฌ์๋ฉ(forwarding)์์ผ์ค์ผ ํฉ๋๋ค.
VOLUME
์ปจํ ์ด๋ ์ธ๋ถ์ ํ์ผ์์คํ ์ ๋ง์ดํธ ํ ๋ ์ฌ์ฉํฉ๋๋ค.
VOLUME ["/data"]
ENV
์ปจํ
์ด๋์์ ์ฌ์ฉํ ํ๊ฒฝ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค. ์ปจํ
์ด๋๋ฅผ ์คํํ ๋ย -e
์ต์
์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด ๊ฐ์ ์ค๋ฒ๋ผ์ด๋ฉ ํ๊ฒ ๋ฉ๋๋ค.
# ENV <key> <value>
# ENV <key>=<value> ...
ENV DB_URL mysql
ARG
ARG
ย ๋ช
๋ น๋ฌธ์ย docker build
ย ์ปค๋งจ๋๋ก ์ด๋ฏธ์ง๋ฅผ ๋น๋ ์,ย --build-arg
ย ์ต์
์ ํตํด ๋๊ธธ ์ ์๋ ์ธ์๋ฅผ ์ ์ํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
# ์๋ฅผ ๋ค์ด, Dockerfile์ ๋ค์๊ณผ ๊ฐ์ด ARG ๋ช
๋ น๋ฌธ์ผ๋ก port๋ฅผ ์ธ์๋ก ์ ์ธํด์ฃผ๋ฉด
ARG port
# ๋ค์๊ณผ ๊ฐ์ด docker build ์ปค๋งจ๋์ --build-arg ์ต์
์ port ๊ฐ์ ๋๊ธธ ์๊ฐ ์์ต๋๋ค.
$ docker build --build-arg port=8080 .
# ์ธ์์ ๋ํดํธ๊ฐ์ ์ง์ ํด์ฃผ๋ฉด, --build-arg ์ต์
์ผ๋ก ํด๋น ์ธ์๊ฐ ๋์ด์ค์ง ์์์ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
ARG port=8080
# ์ค์ ๋ ์ธ์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ${์ธ์๋ช
} ํํ๋ก ์ฝ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
CMD start.sh -h 127.0.0.1 -p ${port}
์ฐธ๊ณ
ENV
์ ๋ฌ๋ฆฌย ARG
๋ก ์ค์ ํ ๊ฐ์ ์ด๋ฏธ์ง๊ฐ ๋น๋๋๋ ๋์์๋ง ์ ํจ
.dockerignore ํ์ผ
Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ ์ ์ธ ์ํค๊ณ ์ถ์ ํ์ผ์ด ์๋ค๋ฉด,ย .dockerignore
ย ํ์ผ์ ์ถ๊ฐํด์ฃผ๋ฉด ๋ฉ๋๋ค.
# .dockerignore\
# ์ ์ธ ํ ํ์ผ์ ์์ฑ
.git
*.md
์ ๋ฆฌ
๋ช ๋ น์ด | ์ฉ๋ |
---|---|
FROM | base ์ด๋ฏธ์ง ์ค์ |
WORKDIR | ์์ ๋๋ ํฐ๋ฆฌ ์ค์ |
RUN | ์ด๋ฏธ์ง ๋น๋ ์ ์ปค๋งจ๋ ์คํ |
ENTRYPOINT | ์ด๋ฏธ์ง ์คํ ์ ํญ์ ์คํ๋์ผ ํ๋ ์ปค๋งจ๋ ์ค์ |
CMD | ์ด๋ฏธ์ง ์คํ ์ ๋ํดํธ ์ปค๋งจ๋ ๋๋ ํ๋ผ๋ฏธํฐ ์ค์ |
EXPOSE | ์ปจํ ์ด๋๊ฐ ๋ฆฌ์ค๋ํ ํฌํธ ๋ฐ ํ๋กํ ์ฝ ์ค์ |
COPY/ADD | ์ด๋ฏธ์ง์ ํ์ผ ์์คํ ์ผ๋ก ํ์ผ ๋๋ ๋๋ ํฐ๋ฆฌ ๋ณต์ฌ |
ENV | ํ๊ฒฝ ๋ณ์ ์ค์ |
ARG | ๋น๋ ์ ๋์ด์ฌ ์ ์๋ ์ธ์ ์ค์ |
VOLUME | ์ปจํ ์ด๋ ์ธ๋ถ์ ํ์ผ์์คํ ์ ๋ง์ดํธ ํ ๋ ์ฌ์ฉํฉ๋๋ค. |
๋๊ธ๋จ๊ธฐ๊ธฐ