728x90
๋ฐ์ํ
3์ฅ ๋์ปค ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ
3.1 ๋์ปค ํ๋ธ์ ๊ณต์ ๋ ์ด๋ฏธ์ง ์ฌ์ฉํ๊ธฐ
- docker container run ๋ช ๋ น์ ์ฌ์ฉํ ๋ ํ์ํ ์ด๋ฏธ์ง ์ค ๋ก์ปฌ ์ปดํจํฐ์ ์๋ ์ด๋ฏธ์ง๊ฐ ์์ผ๋ฉด ์ด๋ฏธ์ง๋ฅผ ์๋์ผ๋ก ๋ด๋ ค๋ฐ๋๋ค.
- ์ด ๊ณผ์ ์ ์ํํธ์จ์ด ๋ฐฐํฌ ๊ธฐ๋ฅ์ด ๋์ปค ํ๋ซํผ์ ์์ ํ ๋ด์ฅ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- docker impage pull ๋ช ๋ น์ด๋ฅผ ํตํด ๋ช ์์ ์ผ๋ก ์ํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ์ ์ ์๋ค.
- ๋์ปค๋ ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ๊ธฐ ์ํด ๊ฐ์ฅ ๋จผ์ Docker Hub์ ์ ๊ทผํ๋ค.
- ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๋ ์ ์ฅ์๋ฅผ ๋ ์ง์คํธ๋ฆฌ(Registry) ๋ผ๊ณ ํ๊ณ , ๋์ปค ํ๋ธ๋ ๋ฌด๋ฃ๋ก ์ ๊ณต๋๋ ๊ณต๊ฐ ๋ ์ง์คํธ๋ฆฌ๋ค.
$ docker image pull diamol/ch03-web-ping
Using default tag: latest
latest: Pulling from diamol/ch03-web-ping
0362ad1dd800: Pull complete
b09a182c47e8: Pull complete
39d61d2ed871: Pull complete
b4e2115e274a: Pull complete
f5cca017994f: Pull complete
f504555623f6: Pull complete
Digest: sha256:2f2dce710a7f287afc2d7bbd0d68d024bab5ee37a1f658cef46c64b1a69affd2
Status: Downloaded newer image for diamol/ch03-web-ping:latest
docker.io/diamol/ch03-web-ping:latest
- ํด๋น ๋ช ๋ น์ด๋ฅผ ์คํ ์ ์ฌ๋ฌ๊ฐ์ ํ์ผ์ ๋ด๋ ค๋ฐ๋๊ฒ์ ๋ณผ ์ ์๋ค.
- ์ด๋ฏธ์ง๋ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ถํด๋ ๊ฒ์ผ๋ก, ๋์ปค ์ด๋ฏธ์ง๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ์์ ํ์ผ๋ก ๊ตฌ์ฑ๋ผ ์๋ค.
- ์ด๋ค ๊ฐ๊ฐ์ ํ์ผ์ ์ด๋ฏธ์ง ๋ ์ด์ด ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ๊ทธ๋ฆฌ๊ณ , ๋์ปค๊ฐ ํด๋น ํ์ผ์ ์กฐ๋ฆฝํด ์ปจํ ์ด๋์ ๋ด๋ถ ํ์ผ ์์คํ ์ ๋ง๋ ๋ค.
$ docker container run -d --name web-ping diamol/ch03-web-ping
$ docker container logs web-ping
** web-ping ** Pinging: blog.sixeyed.com; method: HEAD; 3000ms intervals
Making request number: 1; at 1730681354346
Making request number: 2; at 1730681357348
{ Error: getaddrinfo EAI_AGAIN blog.sixeyed.com blog.sixeyed.com:443
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
errno: 'EAI_AGAIN',
code: 'EAI_AGAIN',
syscall: 'getaddrinfo',
hostname: 'blog.sixeyed.com',
host: 'blog.sixeyed.com',
port: 443 }
- -d : --detch ์ ์ถ์ฝ์ด, ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ
- -name: ์ปจํ ์ด๋์ ์ด๋ฆ์ ์ง์
์ปจํ ์ด๋ ํ๊ฒฝ๋ณ์
- ํ๊ฒฝ ๋ณ์ (environment variable) ๋ ์ด์์ฒด์ ์์ ์ ๊ณตํ๋ Key-Value ์ ์ด๋ค.
- ์๋์ฐ๋ ๋ฆฌ๋ ์ค ๋ชจ๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- ์์ฃผ ์ ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ ์ฉํ๋ค.
- ๋์ปค ์ปจํ ์ด๋๋ ๋ณ๋์ ํ๊ฒฝ๋ณ์๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ๋์ปค ์ด๋ฏธ์ง๋ ์ค์ ๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ ํฌํจํด ํจํค์ง ๋์ง๋ง, ์ปจํ ์ด๋๋ฅผ ์คํํ ๋ ์ด ์ค์ ๊ฐ์ ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค.
$ docker rm -f web-ping
web-ping
$ docker container run --env TARGET=google.com diamol/ch03-web-ping
** web-ping ** Pinging: google.com; method: HEAD; 3000ms intervals
Making request number: 1; at 1730681931896
Making request number: 2; at 1730681934901
{ Error: getaddrinfo EAI_AGAIN google.com google.com:443
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
errno: 'EAI_AGAIN',
code: 'EAI_AGAIN',
syscall: 'getaddrinfo',
hostname: 'google.com',
host: 'google.com',
port: 443 }
- --env : ํ๊ฒฝ๋ณ์๋ฅผ ์ง์ .
- ํ๊ฒฝ๋ณ์๋ฅผ ์ปจํ ์ด๋ ์คํ์ ์ง์ ๊ฐ๋ฅํ๊ฒ ํจ์ผ๋ก์จ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ค๋ฅธ๋์์ ๋ง๋ค์ด ๋์ผ๋ก ์ ์ฐํ ์ค๊ณ๊ฐ ๊ฐ๋ฅํ๋ค.
3.2 Dockerfile ์์ฑํ๊ธฐ
- Dockerfile ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํจํค์งํ๊ธฐ ์ํ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ค.
- Dockerfile ์ ์ผ๋ จ์ ์ธ์คํธ๋ญ์ (๋ช ๋ น์ด) ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- Dockerfile ์ ๋ฌธ๋ฒ์ ๋งค์ฐ ์ ์ฐํ๋ฉฐ, ํ์ค ์ ๋ฌธ๋ฒ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ด๋ ํ ์ ํ๋ฆฌ์ผ์ด์ ๋ ํจํค์งํ ์ ์๋ค.
FROM diamol/node
ENV TARGET="blog.sixeyed.com"
ENV METHOD="HEAD"
ENV INTEVAL="3000"
WORKDIR /web-ping
COPY app.js
CMD ["node", "/web-ping/app.js"]
- FROM
- ๋ชจ๋ ์ด๋ฏธ์ง๋ ๋ค๋ฅธ ์ด๋ฏธ์ง๋ก๋ถํฐ ์ถ๋ฐํ๋ค.
- ์ด ์ด๋ฏธ์ง๋ diamol/node ์ด๋ฏธ์ง๋ฅผ ์์์ ์ผ๋ก ์ง์ ํ๋ค.
- ENV
- ํ๊ฒฝ ๋ณ์ ๊ฐ์ ์ง์ ํ๊ธฐ ์ํ ์ธ์คํธ๋ญ์ ์ด๋ค.
- Key-Value ํ์์ ๋ฐ๋ฅธ๋ค.
- WORKDIR
- ์ปจํ ์ด๋ ์ด๋ฏธ์ง ํ์ผ ์์คํ ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ , ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ ์์ ๋๋ ํฐ๋ฆฌ๋ก ์ง์ ํ๋ ์ธ์คํธ๋ญ์ ์ด๋ค.
- COPY
- ๋ก์ปฌ ํ์ผ ์์คํ ์ ํ์ผ ํน์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ก ๋ณต์ฌํ๋ ์ธ์คํธ๋ญ์ ์ด๋ค.
- [์๋ณธ๊ฒฝ๋ก] [๋ณต์ฌ๊ฒฝ๋ก] ํ์์ผ๋ก ์์ฑํ๋ค.
- CMD
- ๋์ปค๊ฐ ์ด๋ฏธ์ง๋ก๋ถํฐ ์ปจํ ์ด๋๋ฅผ ์คํํ์ ๋ ์คํํ ๋ช ๋ น์ ์ง์ ํ๋ ์ธ์คํธ๋ญ์ ์ด๋ค.
3.3 ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋น๋ํ๊ธฐ
$ docker image build --tag web-ping .
[+] Building 2.9s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 193B 0.0s
=> [internal] load metadata for docker.io/diamol/node:latest 2.8s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/diamol/node:latest@sha256:dfee522acebdfdd9964aa9c88ebebd03a20b6dd573908347be3ebf52ac4879c8 0.0s
=> => resolve docker.io/diamol/node:latest@sha256:dfee522acebdfdd9964aa9c88ebebd03a20b6dd573908347be3ebf52ac4879c8 0.0s
=> => sha256:dfee522acebdfdd9964aa9c88ebebd03a20b6dd573908347be3ebf52ac4879c8 1.41kB / 1.41kB 0.0s
=> => sha256:6467efe6481aace0c317f144079c1a321b91375a828dbdb59b363a2aef78b33b 1.16kB / 1.16kB 0.0s
=> => sha256:8e0eeb0a11b3a91cc1d91b5ef637edd153a64a3792e08a3f8d0702ec4f01a9e7 5.66kB / 5.66kB 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 843B 0.0s
=> [2/3] WORKDIR /web-ping 0.0s
=> [3/3] COPY app.js . 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:ef41f8103502f816a2b33a8d62b350463c64dd9e22a20e1cf44f97f2d3cabd54 0.0s
=> => naming to docker.io/library/web-ping
- docker image build --tag [์ด๋ฏธ์ง ์ด๋ฆ] [Dockerfile ๋ฐ ์ด๋ฏธ์ง์ ํฌํจ์ํฌ ํ์ผ์ด ์์ฐจํ ๊ฒฝ๋ก]
- . ์ ํ์ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
- app.js ํ์ผ์ ์ด๋ฏธ์ง์ ํฌํจ์ํค๊ธฐ ์ํด์ ์ฌ์ฉ
$ docker image ls 'w*'
REPOSITORY TAG IMAGE ID CREATED SIZE
web-ping latest ef41f8103502 3 minutes ago 75.5MB
wordpress latest a7086dd0016d 7 weeks ago 695MB
$ docker container run -e TARGET=docker.com -e INTERVAL=5000 web-ping
** web-ping ** Pinging: docker.com; method: HEAD; 5000ms intervals
Making request number: 1; at 1730686214614
Making request number: 2; at 1730686219617
{ Error: getaddrinfo EAI_AGAIN docker.com docker.com:443
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
errno: 'EAI_AGAIN',
code: 'EAI_AGAIN',
syscall: 'getaddrinfo',
hostname: 'docker.com',
host: 'docker.com',
port: 443 }
3.4 ๋์ปค ์ด๋ฏธ์ง์ ์ด๋ฏธ์ง ๋ ์ด์ด ์ดํดํ๊ธฐ
- ์ด๋ฏธ์ง ๋น๋์ ๋ํ ๊ฐ๋จํ ํ์คํ ๋ฆฌ๋ฅผ ํ์ ํ ์ ์๋ค.
$ docker image history web-ping
IMAGE CREATED CREATED BY SIZE COMMENT
ef41f8103502 6 minutes ago CMD ["node" "/web-ping/app.js"] 0B buildkit.dockerfile.v0
<missing> 6 minutes ago COPY app.js . # buildkit 808B buildkit.dockerfile.v0
<missing> 6 minutes ago WORKDIR /web-ping 0B buildkit.dockerfile.v0
<missing> 6 minutes ago ENV INTERVAL=3000 0B buildkit.dockerfile.v0
<missing> 6 minutes ago ENV METHOD=HEAD 0B buildkit.dockerfile.v0
<missing> 6 minutes ago ENV TARGET=blog.sixeyed.com 0B buildkit.dockerfile.v0
<missing> 5 years ago /bin/sh -c #(nop) CMD ["node"] 0B
<missing> 5 years ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B
<missing> 5 years ago /bin/sh -c #(nop) COPY file:238737301d473041… 116B
<missing> 5 years ago /bin/sh -c apk add --no-cache --virtual .bui… 5.11MB
<missing> 5 years ago /bin/sh -c #(nop) ENV YARN_VERSION=1.16.0 0B
<missing> 5 years ago /bin/sh -c addgroup -g 1000 node && addu… 65.1MB
<missing> 5 years ago /bin/sh -c #(nop) ENV NODE_VERSION=10.16.0 0B
<missing> 5 years ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 5 years ago /bin/sh -c #(nop) ADD file:66f49017dd7ba2956… 5.29MB
- ๋์ปค ์ด๋ฏธ์ง๋ ์ด๋ฏธ์ง ๋ ์ด์ด๊ฐ ๋ชจ์ธ ๋ ผ๋ฆฌ์ ๋์์ด๋ค.
- ๋ ์ด์ด๋ ๋์ปค ์์ง์ ์บ์์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ์ฅ๋ ํ์ผ์ด๋ค.
- Dockerfile ์ ํตํด ์ปค๋งจ๋๊ฐ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ฉด์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ฉด์ ๋ ์ด์ด๊ฐ ๋ง๋ค์ด์ง๋ฉด ํด๋น ๋ ์ด์ด๋ ๋ค๋ฅธ ์ด๋ฏธ์ง์์ ์ฌ์ฌ์ฉ๋ ์ ์๋ค.
- ๋์ปค๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋ฅผ ๊ณต์ ํ๋ค.
- ๋์ปค๋ ๊ณต์ ๋๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋ฅผ ์ฝ๊ธฐ์ ์ฉ์ผ๋ก ๋ง๋ค์ด ๊ณต์ ๋๋ ์ด๋ฏธ์ง ๋ ์ด์ด๊ฐ ์์ ๋๋ฉด์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ค.
- docker imgae ls ๋ช ๋ น์ด๋ฅผ ํตํด ๋์ค๋ image ์ ์ฌ์ด์ฆ๋ ๋ ผ๋ฆฌ์ ์ธ ์ฌ์ด์ฆ๋ค. ์ฆ, ๊ฐ๊ฐ์ ์ด๋ฏธ์ง ๋ ์ด์ด๊ฐ ์๋ก ๊ณต์ ๋์ด ํฉ์ฐ๋ ์ํ์ด๋ค.
- ์ค์ ๋์ปค ์์คํ ์ ์ด๋ฏธ์ง๊ฐ ์ฐจ์งํ๋ ์ฉ๋์ ํ์ธํ๊ณ ์ถ์ ๊ฒฝ์ฐ docker system df ๋ช ๋ น์ด๋ฅผ ํตํด ํ์ธํ๋ฉด ๋๋ค.
[Docker] Docker๊ฐ Image Layer๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ
3.5 ์ด๋ฏธ์ง ๋ ์ด์ด ์บ์๋ฅผ ์ด์ฉํ Dockerfile ์คํฌ๋ฆฝํธ ์ต์ ํ
$ docker image build -t web-ping:v2 .
[+] Building 1.6s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 193B 0.0s
=> [internal] load metadata for docker.io/diamol/node:latest 1.5s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/diamol/node:latest@sha256:dfee522acebdfdd9964aa9c88ebebd03a20b6dd573908347be3ebf52ac4879c8 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 28B 0.0s
=> CACHED [2/3] WORKDIR /web-ping 0.0s
=> CACHED [3/3] COPY app.js . 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:ef41f8103502f816a2b33a8d62b350463c64dd9e22a20e1cf44f97f2d3cabd54 0.0s
=> => naming to docker.io/library/web-ping:v2
- Dockerfile ์คํฌ๋ฆฝํธ์ ์ธ์คํธ๋ญ์ ์ ๊ฐ๊ฐ ํ๋์ ์ด๋ฏธ์ง ๋ ์ด์ด์ 1:1๋ก ์ฐ๊ฒฐ๋๋ค.
- ์ธ์คํธ๋ญ์ ์ ๊ฒฐ๊ณผ๊ฐ ์ด์ ๋น๋์ ๊ฐ๋ค๋ฉด, ์ด์ ์ ์บ์๋ ๋ ์ด์ด๋ฅผ ์ฌ์ฌ์ฉํ๋ค,
- ๋์ปค๋ ์บ์์ ์ผ์นํ๋ ๋ ์ด์ด๊ฐ ์๋์ง ํ์ธํ๊ธฐ ์ํด ํด์๊ฐ์ ์ด์ฉํ๋ค.
- ๊ธฐ์กด ์ด๋ฏธ์ง ๋ ์ด์ด์ ํด์๊ฐ์ด ์๋ค๋ฉด ์บ์ ๋ฏธ์ค๊ฐ ๋ฐ์ํ๊ณ ํด๋น ์ธ์คํธ๋ญ์ ์ด ์คํ๋๋ค.
- ํ๋ฒ ์ธ์คํธ๋ญ์ ์ด ์คํ๋๋ฉด ๊ทธ ๋ค์์ ์ค๋ ์ธ์คํธ๋ญ์ ์ ์์ ๋ ๊ฒ์ด ์๋๋ผ๋ ๋ชจ๋ ์คํ๋๋ค.
- ๋ฐ๋ผ์, ๋ณ๊ฒฝ๋์ง ์์ ์ธ์คํธ๋ญ์ ์ ์๋จ์, ์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ํ๋จ์ ๋ฐฐ์นํ๋๋ก ํด์ผ ํ๋ค.
- ๊ทธ๋์ผ ์บ์์ ์ ์ฅ๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋ฅผ ์ต๋ํ ํ์ฉํ๊ณ , ์ด๋ฏธ์ง ๊ณต์ ์๊ฐ, ๋์คํฌ ์ฉ๋, ๋คํธ์ํฌ ๋์ญํญ์ ๋ชจ๋ ์ ์ฝํ ์ ์๋ค.
๋ง์ฝ web-ping Dockerfile ์คํฌ๋ฆฝํธ๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ๋ณ๊ฒฝํ๋ค๋ฉด?
FROM diamol/node
CMD ["node", "/web-ping/app.js"]
ENV TARGET="blog.sixeyed.com" \\
METHOD="HEAD" \\
INTERVAL="3000"
WORKDIR /web-ping
COPY app.js
- CMD ์ธ์คํธ๋ญ์
์ ์คํฌ๋ฆฝํธ ๋ง์ง๋ง์ ์์นํ ํ์๊ฐ ์๋ค.
- FROM ์ธ์คํธ๋ญ์ ๋ค๋ผ๋ฉด ์ด๋์ ๋ฐฐ์นํด๋ ๋ฌด๋ฐฉํ๋ค.
- ENV ์ธ์คํธ๋ญ์ ์ ํ๋๋ก ์ฌ๋ฌ ๊ฐ์ ํ๊ฒฝ๋ณ์๋ฅผ ์ ์ํด์ ์ฌ์ฉํจ์ผ๋ก์จ ์ธ์คํธ๋ญ์ ์์ฒด๋ฅผ ์ค์ผ ์ ์๋ค.
- ์ด๋ ๊ฒ ์ ์ํ ๊ฒฝ์ฐ COPY app.js ์ธ์คํธ๋ญ์ ๋จ๊ณ์์ app.js ํ์ผ ๋ด์ฉ์ด ์์ ๋๋ ๋ถ๋ถ์ ์ ์ธํ๊ณ ๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋ฅผ ๊ณต์ ํด์ ์ฌ์ฉํจ์ผ๋ก์จ ์ต์ ํ ํ ์ ์๋ค.
3.6 ์ฐ์ต๋ฌธ์
$ docker image pull diamol/ch03-lab
$ docker container run -it diamol/ch03-lab
$ vi ch03.txt
Lab solution, by: /gwanii
$ docker commit ch03-lab ch03-lab-gwanii
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ch03-lab-gwanii latest 150137647923 5 seconds ago 6.89MB
$ docker container run -it diamol/ch03-lab-gwanii
$ cat ch03.txt
Lab solution, by: gwanii
728x90
๋ฐ์ํ
'๐ ์ฑ > ๋์ปค ๊ต๊ณผ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋์ปค ๊ต๊ณผ์ 2์ฅ ๋์ปค์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ (2) | 2024.11.04 |
---|---|
๋์ปค ๊ต๊ณผ์ 1์ฅ ๋์ปค ์ปจํ ์ด๋์ ์ด๋ฏธ์ง ์ดํดํ๊ธฐ (1) | 2024.11.03 |