์๋ ํ์ธ์,
์คํ ํ์ ๋ช ๋ น์ ์คํํ ์ ์๋๋ก YAML์ "onrun"๊ณผ ๊ฐ์ ๊ฒ์ ํฌํจํ๋ ๊ฒ์ด ๋งค์ฐ ์ ์ฉํฉ๋๋ค. https://github.com/docker/docker/issues/8860๊ณผ ์ ์ฌ
mongodb:
image: mongo:3.0.2
hostname: myhostname
domainname: domain.lan
volumes:
- /data/mongodb:/data
ports:
- "27017:27017"
onrun:
- mongodump --host db2dump.domain.lan --port 27017 --out /data/mongodb/dumps/latest
- mongorestore -d database /data/mongodb/dumps/latest/database
mongodb ์์ ํ db2dump.domain.lan์ ๋คํํ๊ณ ๋ณต์ํฉ๋๋ค.
์ปจํ ์ด๋๋ฅผ ์ค์งํ๋ค๊ฐ ์์ํ๋ฉด ๋ฉฑ ๋ฑ์ฑ์ ์ ์งํ๊ธฐ ์ํด onrun ๋ถ๋ถ์ด ์คํ๋์ง ์์ต๋๋ค.
2020 ๋ 6 ์ 15 ์ผ ์์
5 ๋
ํ Compose๋ ์ฌ์์ "ํ์คํ"ํ์ง ์๊ณ
https://github.com/compose-spec/compose-spec/issues/84 ๋ฅผ ํ์ธ
Dockerfile์ ๋จ๊ณ ์ฌ์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
FROM mongo:3.0.2
ADD data/mongodb/dumps/latest /data/mongodb/dumps/latest
RUN mongorestore -d database /data/mongodb/dumps/latest/database
์ด๋ ๊ฒํ๋ฉด ๋ค์ ๋น๋ ํ ๋๋ ์บ์๋ฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค @dnephin.
๋ฌผ๋ก Dockerfile์ ๋ง๋ค์ด ์ด๋ฏธ์ง ๋์ ๋น๋์์ ์ฌ์ฉํ๊ฑฐ๋ docker exec๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
MongoDB๋ ์์ผ ๋ฟ์ด๋ฉฐ mysql ๋ฐ ๊ณ์ ์์ฑ ๋๋ rabbitmq ๋ฐ ๋๊ธฐ์ด ์์ฑ ๋ฑ์ ํตํด์ด ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
onrun
๋ ๊ตฌ์ฑ ์ค์ผ์คํธ๋ ์ด์
์ ์ ์ฐ์ฑ์ ํ์ฉํ๊ณ compose๋ ์คํ ๋ชฉ๋ก์ ์ฝ๊ณ ๊ฐ ํญ๋ชฉ์ ๋ํด docker exec
๋ฅผ ๋ง๋ญ๋๋ค.
์์ ์ docker-compose.yml
docker exec
์ Dockerfile ๋๋ ์ปจํ
์ด๋์ ์์ ์คํฌ๋ฆฝํธ์์ ์ํ ํ ์์์ ๋ ๋ช
๋ น์ ๋ฃ์ ํ์๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค. ๋ ๋ค _not_ ๋ ์ปจํ
์ด๋๋ฅผ ๋ ์ ์ฉํ๊ฒ ๋ง๋ญ๋๋ค Compose์ ํจ๊ป ์คํ๋ฉ๋๋ค.
๋๋ ์ ์ ํ docker
๋ฐ docker-compose
๋ช
๋ น์ ์คํํ๋ ์
ธ ์คํฌ๋ฆฝํธ ๋๋ Makefile์ ์ฌ์ฉํ์ฌ ์ฑ์ ์์ํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋ ์ค ํ๋๋ฅผ ์ํํ๋ ๊ฒ๋ณด๋ค ์ค์ํ ๊ฐ์น๋ฅผ ์ถ๊ฐํ์ง ์๋ ํ Compose์ ์ถ๊ฐ ํ ๊ฐ์น๊ฐ ์์ผ๋ฉฐ ๊ทํ๊ฐ ์ธ์ฉ ํ ์ฌ์ฉ ์ฌ๋ก์๋ ์ ํฉํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ฐ๋ผ์ ๋ด ๋์ปค๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด Script ๋๋ Makefile์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋์ compose๊ฐ ๋ง๋ค์ด์ง ์ด์
? ์คํฌ๋ฆฝํธ๋ก ์ปจํ
์ด๋๋ฅผ ๊ด๋ฆฌํ๊ณ ํ์ฅ ํ ์ ์์ต๋๋ค || dockerfile?
์ข์ต๋๋ค.์ด ์์ ๋ฅผ ์ฌ์ฉํ์ฌ CI ํ๋ก์ธ์ค์์ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ ํ๊ฒฝ์ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉํ์ต๋๋ค.
rabbitmq:
image: rabbitmq:3.5.1-management
environment:
RABBITMQ_NODENAME: rabbit
hostname: rabbitmq
domainname: domain.lan
volumes:
- /data/rabbitmq/db:/var/lib/rabbitmq
ports:
- "5672:5672"
- "15672:15672"
- "25672:25672"
- "4369:4369"
mongodb:
image: mongo:3.0.2
hostname: mongo
domainname: domain.lan
volumes:
- /data/mongodb:/data
ports:
- "27017:27017"
appmaster:
image: appmaster
hostname: master
domainname: domain.lan
environment:
...
ports:
- "80:80"
- "8080:8080"
links:
- mongodb
- rabbitmq
celery:
image: celery
hostname: celery
domainname: domain.lan
environment:
...
links:
- rabbitmq
์ปจํ ์ด๋๊ฐ ์์๋ ํ mongodb๋ฅผ ํ๋ก๋น์ ๋ํ๊ณ rabbitmq์์ ๋๊ธฐ์ด ๋ฐ ๊ณ์ ์ ๊ด๋ฆฌํด์ผํฉ๋๋ค.
์ค๋ ๋ด๊ฐํ๋ ์ผ์ ๋ค์๊ณผ ๊ฐ์ ์คํฌ๋ฆฝํธ์ ๋๋ค.
#!/bin/bash
PROJECT=appmaster
docker-compose -f appmaster.yml -p appmaster up -d
docker exec appmaster_rabbitmq_1 rabbitmqctl add_user user password
docker exec appmaster_rabbitmq_1 rabbitmqctl add_vhost rabbitmq.domain.lan
docker exec appmaster_rabbitmq_1 rabbitmqctl set_permissions -p rabbitmq.domain.lan password ".*" ".*" ".*"
docker exec appmaster_mongodb_1 mongodump --host mongo-prd.domain.lan --port 27017 --out /data/mongodb/dumps/latest
docker exec appmaster_mongodb_1 mongorestore -d database /data/mongodb/dumps/latest/database
onrun
๋ช
๋ น์ผ๋ก ์ง์ docker-compose -f appmaster.yml -p appmaster up -d
๋ง๋ค ์ ์์ต๋๋ค.
yml ํ์ผ์ด ๋ ์ฝ๊ธฐ ์ฌ์์ง๋๋ค.
rabbitmq:
...
onrun:
- rabbitmqctl add_user user password
- rabbitmqctl add_vhost rabbitmq.domain.lan
- rabbitmqctl set_permissions -p rabbitmq.domain.lan password ".*" ".*" ".*"
mongodb:
...
onrun:
- mongodump --host mongo-prd.domain.lan --port 27017 --out /data/mongodb/dumps/latest
- mongorestore -d database /data/mongodb/dumps/latest/database
์ด๊ฒ์ ๋ค์ ์ ์ฉํ๊ณ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ํด๊ฒฐํฉ๋๋ค.
: +1 :
docker-compose
CD ํ์ดํ ๋ผ์ธ์ ์ผ๋ถ๋ก ๊ฒ์ดํธ ํ
์คํธ์ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
: +1 :
์ด๊ฒ์ # 877, # 1341, # 468 (๋ฐ ๊ธฐํ ๋ช ๊ฐ์ง)์ ๋ณต์ ๋ณธ์ ๋๋ค.
์ด๋ฅผ ์ง์ํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ # 1510์ด๋ฉฐ ์ํ๋ ์ด๋ฒคํธ์ ๋๋ฌํ์ ๋ ์ธ๋ถ ๋๊ตฌ๊ฐ ์์ ์ ์ํ ํ ์ ์๋๋กํ๋ ๊ฒ์ ๋๋ค.
์ค๋ณต์ผ๋ก ๋ซ๊ธฐ
์ด๊ฒ์ ๋งค์ฐ ์ ์ฉ ํ ๊ฒ์
๋๋ค. "์ค, bash ์คํฌ๋ฆฝํธ๋ก์ด ์์
์ ์ํ ํ ์ ์์ต๋๋ค"๋ผ๋ ์ฃผ์ฅ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ๋ฌผ๋ก bash ์คํฌ๋ฆฝํธ๋ก ํ ์ ์์ต๋๋ค. Docker-compose๊ฐํ๋ ๋ชจ๋ ์์
์ bash ์คํฌ๋ฆฝํธ๋ก ์ํ ํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ ์ ํ
์คํธ ํ๊ฒฝ์ ์ ์ดํ๋ โโ๋จ์ผ YAML ํ์ผ์ด ์์ผ๋ฉฐ ๊ฐ๋จํ docker-compose up
๋ช
๋ น์ผ๋ก ์คํํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
์ ์คํฌ๋ฆฝํธ ๋ Makefile๋ก ํ ์์๋ ๋ชจ๋ ์์ ์ ์ํํ๋ ๊ฒ์ Compose์ ์๋ฌด๊ฐ ์๋๋๋ค. ์ ์ฉ์ฑ๊ณผ ํฝ์ฐฝ ๋ฐฉ์ง ์ฌ์ด์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด ์ด๋๊ฐ์ ์ ์ ๊ทธ๋ ค์ผํฉ๋๋ค.
๋ํ Compose ํ์ผ์ ์ค์ํ ์์ฑ ์ค ํ๋๋ Mac, Linux ๋ฐ Windows ์ปดํจํฐ์์๋ ์ปดํจํฐ๊ฐ์ ์ด์์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋๋ค. ์ฌ๋๋ค์ด Compose ํ์ผ์ ์์์ ์ ธ ๋ช ๋ น์ ๋ฃ์ ์ ์๋๋กํ๋ค๋ฉด ์ด์์ฑ์ด ํจ์ฌ ๋จ์ด์ง ๊ฒ์ ๋๋ค.
@aanand ๊ณต์ ํ๊ฒ docker exec
๋ฅผ ์คํํ ์ ์๋ค๊ณ ํด์ ์๋์ผ๋ก x-plat ๋น ํธํ์ฑ์ ์๋ฏธํ์ง๋ ์์ต๋๋ค.
์ฌ๊ณผ-์ด ๋ฌธ์ ๋ฅผ ํธ์คํธ ์ปดํจํฐ์์ ๋ช ๋ น์ ์คํํ๋ ๊ฒ์ผ๋ก ์๋ชป ์ฝ์์ต๋๋ค. ๊ทธ๋๋ ์ฒซ ๋ฒ์งธ ์์ ์ ์ ํจํฉ๋๋ค.
@aanand์ ์์ ์ ์ดํดํฉ๋๋ค. ์ด๋ฏธ docker-compose
๋ command
, expose
๊ณผ ๊ฐ์ด ์ผ๋ฐ docker
์์ง์ด ์ด๋ฏธํ๋ ๊ฒ๊ณผ ๋์ผํ ์์
์ ์ด๋ฏธ ๋ง์ด ์ํํ๋ฏ๋ก ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒ ๊ฐ์ง๋ ์์ต๋๋ค expose
, ports
, build
๋ฑ. exec
๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด docker-compose
์ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์ค์ ์์ํ ์ง์ ํ ์ ์คํฑ ์์ ์ด๋ฉ๋๋ค. ๊ฐ๋ฐ ํ๊ฒฝ.
@aanand ๋ง์ ๊ฐ๋ฐ์ ๋ฐ CI ํ์ดํ ๋ผ์ธ์ ์ฃผ์ ๋ฌธ์ ๋ ํ๋ก๋์ ํ๊ฒฝ์ ๋งค์ฐ ๊ฐ๊น์ด ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ๋ ๊ฒ์ ๋๋ค. DB์ ๋คํ์ฒ๋ผ. 1 ๋ ์ ์์ด ํฐ์ผ์ ๋ง๋ค์๋๋ฐ ๋์ปค์์ ์๋ฌด๊ฒ๋ ์์ฑํ์ง ์์์ต๋๋ค.
๋ฐ๋ผ์ ์ผ๋ถ exec https://github.com/docker/compose/issues/1809#issuecomment -128073224๋ฅผ ์คํํ๊ธฐ ์ํด Makefile ๋๋ Bashcript๋ฅผ ์ ์ํฉ๋๋ค.
๋ด๊ฐ ์๋ ์ ์ํ ๊ฒ์ ๋ฉฑ ๋ฑ์ฑ์ ์ ์งํ๋ onrun
(๋๋ oncreate)์
๋๋ค. ์ฒ์ ์์ํ ๋ ์คํํ์ญ์์ค. ์ปจํ
์ด๋๊ฐ ์ค์ง๋๊ฑฐ๋ ์ผ์ ์ค์ง ๋ ๊ฒฝ์ฐ ์ ์์์ onrun (๋๋ oncreate)์์ ์คํ๋์ง ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก git ์ ์ฅ์์๋ compose ํ์ผ, dockerfile ๋ฐ ๋ฉฑ ๋ฑ์ฑ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด์๋ makefile์ด ์์ต๋๋ค (makefile์ด ์ํ ํ์ผ์ ๋ง๋ค ์ ์์). ์ฒ์ฌ!
command
, expose
๋ฑ๊ณผ exec
์ฌ์ด์๋ ํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๊ทธ๋ฃน์ ์ปจํ
์ด๋ ์ต์
์ด๊ณ exec
๋ ๋ช
๋ น / api ์๋ ํฌ์ธํธ์
๋๋ค. ์ปจํ
์ด๋ ์์ฑ ๊ธฐ๋ฅ์ ๋ํ ์ต์
์ด ์๋๋ผ ๋ณ๋์ ๊ธฐ๋ฅ์
๋๋ค.
Compose (https://github.com/docker/compose/issues/1809#issuecomment-128059030)๋ฅผ ์ฌ์ฉํ์ฌ์ด ์์
์ ์ํํ๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์ด๋ฏธ ์์ต๋๋ค. onrun
์ด (๊ฐ) ์ด๋ฏธ ์กด์ฌํฉ๋๋ค. command
์
๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๋คํํ๊ฑฐ๋๋ก๋ํ๋ ํน์ ๋ฌธ์ ์ ๊ด๋ จํ์ฌ ์ผ๋ฐ์ ์ผ๋ก Makefile์์ ์ํ๋๋ "์ํฌ ํ๋ก"๋๋ "๋น๋ ์๋ํ"์ ํ์ ์์ ์ ๋๋ค. ์ ๋ ์ปจํ ์ด๋์์ ๋ชจ๋ ์์ ์ ์คํํ๋ dobi ๋ผ๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ์ํ ๋๊ตฌ๋ฅผ ํ๋กํ ํ์ดํํ์ต๋๋ค. ๋ํ Compose์ ๋งค์ฐ ์ ํตํฉ๋ฉ๋๋ค. Makefile์ด ๋ง์์ ๋ค์ง ์์ผ๋ฉด ์ฌ์ฉํด ๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๊ธฐํ /๋ก๋ ์ฌ์ฉ ์ฌ๋ก์ ์๋ฅผ ์์ ์ค์ ๋๋ค.
@dnephin onrun
์ ๋ฉฑ ๋ฑ์ฑ์ ๋์น๊ธฐ ๋๋ฌธ์ ๋จ์ํ command
๊ฐ ์๋๋๋ค.
์์ํด ๋ด
์๋ค. ์ปจํ
์ด๋ ์์ฑ์ create
์ด๋ฉฐ ๋ค์๋ exec๊ฐ๋์ง ์์ต๋๋ค (๋คํ ๋ฐ ๋ณต์).
exec:
create:
- echo baby
destroy:
- echo keny
start:
- echo start
stop:
- echo bye
๋ ๋ง์ ์๊ฐ ํ์ํ ๊ฒฝ์ฐ :
dobi ๋๋ถ์ ์์ฑ์ ํฅ์์ํฌ ๋๊ตฌ๋ฅผ ๋ง๋ค์ด์ผํ๋ ๊ฒฝ์ฐ ์์ฑ์ด ๋์๊ณ ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ทธ๋ฌ๋ compose๋ฅผ ํฅ์์ํค๊ธฐ ์ํด ๋๊ตฌ๋ฅผ ๋ง๋ค์ด์ผํ๋ ๊ฒฝ์ฐ compose๋ ์ข์ง ์์ผ๋ฉฐ ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด๋ "์ด์ ์ฒด์ ๋ฅผ ํฅ์์ํค๊ธฐ ์ํด ์์ฉ ํ๋ก๊ทธ๋จ์ด ํ์ํ ๊ฒฝ์ฐ OS๊ฐ ๋์ฉ๋๋ค"๋ผ๊ณ ๋งํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ด๋ค ๋๊ตฌ๋ ๋ชจ๋ ์์ ์ ์ํํด์๋ ์๋ฉ๋๋ค. ์ ๋์ค ์ฒ ํ์ ํ ๊ฐ์ง ์ผ์ํ๊ณ ์ํ๋ ๊ฒ ์ ๋๋ค. ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ํ๋ ์ผ์ ๋๋ค. Compose๋ "์ ํ๋ฆฌ์ผ์ด์ ์คํ์์ํ ์ปจํ ์ด๋ ์กฐ์ "์ ์ํํฉ๋๋ค. ๋น๋ ์๋ํ ๋๊ตฌ๊ฐ ์๋๋๋ค.
์ด๋ "์ด์ ์ฒด์ ๋ฅผ ํฅ์์ํค๊ธฐ ์ํด ์์ฉ ํ๋ก๊ทธ๋จ์ด ํ์ํ ๊ฒฝ์ฐ OS๊ฐ ๋์ฉ๋๋ค"๋ผ๊ณ ๋งํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ด๋ค ๋๊ตฌ๋ ๋ชจ๋ ์์ ์ ์ํํด์๋ ์๋ฉ๋๋ค. ์ ๋์ค ์ฒ ํ์ ํ ๊ฐ์ง๋ฅผํ๊ณ ์ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ํ๋ ์ผ์ ๋๋ค.
์์ฐ ์ต๊ณ ์ ์ ์์ ๋๋ฌํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ถํํ๋, ๋จ์ํ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ ์์๋ ์ผ์ด ์งํ๋๋ ๋ฐฉ์์ด ์๋๋๋ค. ์ด์ Docker๋ ํด๋ผ์ฐ๋ ์๋ฒ๋ฅผ ์์ํ๊ธฐ์ํ ๋๊ตฌ, ํด๋ฌ์คํฐ๋ง์์ํ ์์คํ ๋ฐ ๋ค์ํ ๊ธฐ๋ฅ (์ด๋ฏธ์ง ๋น๋, ์ด๋ฏธ์ง ์คํ, ์ ๋ก๋, ๋ค์ด๋ก๋, ๊ฒฐ๊ตญ์๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํน๊น์ง ํฌํจ)์ ๋น๋ํ๊ณ ์์ผ๋ฉฐ, ๋ชจ๋ ์ฃผ๋ก ์๋ฒ์์ ๋ฃจํธ๋ก ์คํ๋๋ ํ๋์ ๋ชจ ๋๋ฆฌ ์ ๋ฐ์ด๋๋ฆฌ๋ก ์ปดํ์ผ๋ฉ๋๋ค. . ํ์ค ์ปจํ ์ด๋ ์ ์ธ๋ฌธ์ด ์ ๊ฑฐ๋์์ต๋๋ค. Docker ์ปจํ ์ด๋์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ์ค๋จํ๊ณ Docker ํ๋ซํผ์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ์์ํด์ผํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ตฌ์ํ๋ ๋จ์ํ ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋น๋ฉ ๋ธ๋ก์ด๋์ง๋ ์์ต๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ ๋์ค ์ฒ ํ์ ์ ์งํ๊ธฐ ์ํด ๋์ปค ๋ชจ ๋๋ฆฌ ์ ๋ฐ์ด๋๋ฆฌ์ Go inside์์ ์ด "docker compose"๋ฅผ ๊ฒฐ์ฝ ๋ณผ ์ ์๋ค๋ ๊ฒ์ ๋ณด์ฅ ํ ์ ์์ต๋๋ค. https://www.orchardup.com/blog/orchard-is-joining-docker
์๋ ๋ชฉํ๋ฅผ ๊ณ์ํ๊ธฐ ์ํด Docker์ ํฉ๋ฅํฉ๋๋ค. ๋ฌด์๋ณด๋ค๋ ์ฐ๋ฆฌ๋ Fig๋ฅผ ์ฌ์ฉํ๊ณ Fig์ ๊ฐ์ฅ ์ข์ ๋ถ๋ถ์ Docker ์์ฒด์ ํตํฉํจ์ผ๋ก์จ Docker๋ฅผ ์ง๊ธ๊น์ง ๋ณธ ์ต๊ณ ์ ๊ฐ๋ฐ ๊ฒฝํ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๊ณ์ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค.
๊ฐ๋จํ ๋งํด์ compose๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ๋ช
๊ธฐ๋ฅผ๋ก๋ํ๋ ๊ฒ๊ณผ ๊ฐ์ ์์
์ ์ํ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค ..? ๊น์ง ๋๋๋ค ..
๊ณต์์ ์ธ ๋ฐฉ๋ฒ์ ์์ฐ ์ปจํ
์ด๋์ ๊ณ ์ ๋ฌผ ๋ก๋ฉ์ ์ถ๊ฐํ๋ ๊ฒ์
๋๊น? ๋๋ ๋ด compose ํ์ผ ์ฃผ์์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ค๋ฉด? ๋์ค์ ๊ฒฝ์ฐ ์ด์ ์ฒ๋ผ 'docker run'์ ์คํํ ์๋ ์์ต๋๋ค.
@discordianfish , ๋ง์ฝ ๋๊ตฐ๊ฐ๊ฐ CI / CD ์์ง๋์ด๊ฐ ์ต์ํ ์์ฃผ ๊ธฐ๋ณธ์ ์ธ ์์ค์์ ๋ผ์ดํ ์ฌ์ดํด ์ด๋ฒคํธ์ ์ค์ผ์คํธ๋ ์ด์ ์ ์ฒ๋ฆฌ ํ ์ โโ์์ด์ผํ๋ค๋ ์ฌ์ค์ ๊นจ๋ฌ์๋ค๋ฉด ๋๊ฐ docker / docker-compose๊ฐ ๋ก์ปฌ ๊ฐ๋ฐ ํ์ดํ ๋ผ์ธ ๋ฐ ํ ์คํธ ์ธํ๋ผ์์ ๋ฒ์ด๋ ๋ ๋ง์ ํ๋ก๋์ ํ๊ฒฝ์์ ์ฅ์๋ฅผ ์ฐพ์ต๋๋ค. ์คํ์์ ์์ ํ๋ ์ฌ๋์ด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.ํ์ง๋ง ์จ์ ์ฐธ์ง ์์ ๊ฒ์ ๋๋ค.
๊ฒฐ๊ตญ ๋น๋ ์๊ฐ์ ์ํํด์ผํ๋ ์์ ์ ๋ฐํ์์ ํ์ํ ์์ ๊ณผ ๋ค๋ฅผ ์ ์์ผ๋ฉฐ ๋ฐํ์์ ํ์ํ ์์ ์ ๋ฐฐํฌ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๋ด ์ธ๋ถ ์คํฌ๋ฆฝํธ๊ฐ ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ฑฐ๋ ์์ํ ์ง ์ฌ๋ถ๋ฅผ ์ธ์ํ๋๋ก ๋ง๋๋ ๊ฒ์ ์ผ์ข ์ ์ฑ๊ฐ์ ์์ ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ๋ค์ ์๋ช ์ฃผ๊ธฐ ํํฌ + ๋ช ๋ น + ํ๊ฒฝ ๋ณ์๊ฐ ๋์์ด ๋ ์์๋ ๊ฒ๋ค์ ๋๋ค.
์๋น์ค ๊ด๋ฆฌ ํ๋ ์ ์ํฌ ๋ฐ ๊ธฐํ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ์์ ๋ณผ ์ ์์ต๋๋ค. ์ docker-compose์์ ๋ณผ ์ ์์ต๋๊น?
https://github.com/dnephin/dobi์ ๊ด์ฌ์ด์์ ์ ์์ต๋๋ค.์ด ๋๊ตฌ๋ ์ด๋ฌํ ์ํฌ ํ๋ก๋ฅผ ์ํด ์ค๊ณ๋ ๋๊ตฌ์ ๋๋ค.
@dnephin ์ ๋๊ตฌ๋ก์ด ๋ฌธ์ ๋ฅผ ์คํธํ์ง ์์ต๋๋ค. ์ด์ ์ ๊ทํ์ ์๊ฒฌ์ ๋ณด์๊ณ ๋๋ต์ ๋์ผํฉ๋๋ค. Makefile / bash๋ ์๋ง๋ n ๋ฒ์งธ "๋ด ๋๊ตฌ ํฅ์ ๋์ปค"๋ณด๋ค ๋ซ์ต๋๋ค.
๊ฑด์ค์ ์ธ ์๊ฒฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. 8 ๊ฐ์ ์ ์์ด ์ค๋ ๋์์ ์ด๋ฏธ ๋๋น๋ฅผ ์ธ๊ธํ๋ค๋ ์ฌ์ค์ ๋ชฐ๋์ต๋๋ค.
Makefile / bash์ ๋ง์กฑํ์ ๋ค๋ฉด ์ข์ต๋๋ค! ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ด ๋คํ์ ๋๋ค.
์ฌ๊ธฐ์์ด ์ฃผ์ ์ ๊ด๋ จ๋ ๋๊ธ์ด ์ถ๊ฐ๋์์ต๋๋ค. https://github.com/docker/compose/issues/1341#issuecomment -295300246
@dnephin , ๋ด ์๊ฒฌ์ ์ ์ฉ ํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๊ฐ ์งํ์ ๋ํ ์ฝ๊ฐ์ ๋ถํ๋ก ์ธํด ์ข ๊ฒฐ๋์ด์ ๋๋ฌด ์ฌํ๋ค : ์ค๋ง :
Docker ๊ตฌ์ฑ์ ๊ฐ์ฅ ํฐ ๊ฐ์น๋ ํ์คํ์ ๋๋ค.
๊ทธ๊ฒ ์์ ์ ๋๋ค. Docker Compose๋ฅผ ์ฌ์ฉํ์ง ์๊ณ .sh ํ์ผ์ด๋ ์์ ์ ์ํํ๊ธฐ ์ํด "๊ทธ๋ฅ"์ธ ์ ์๋ค๋ฉด ์ Docker Compose๊ฐ ์กด์ฌํฉ๋๊น? : ํผ๋ :
@ shin-์ด ๋งํ๋ฏ์ด ์ด๊ฒ์ด ํฐ ์ผ์ด๋ผ๋ ๊ฒ์ ์ดํดํ ์ ์์ต๋๋ค.
์ํ๊น๊ฒ๋ ํ๋ก์ ํธ์ ํด๋น ๋จ๊ณ์์ ์ง์ํ๋ ๊ฒ์ ๋๋ฌด ๋ง์ ๋ถ๋ด์ ๋๋ค.
:์ฌ์ฅ:
ํ์ง๋ง "์คํฌ๋ฆฝํธ ๋ง๋ค๊ธฐ"๋ผ๊ณ ๋งํ ์๋ ์์ต๋๋ค. "์ด๋ด, ๋๋ฌด ํ๋ค์ด. ์ฐ๋ฆฌ๋ ๋ง๋ค์ง ์์๊ฑฐ์ผ"๋ผ๋ ๋ป์ ๋๋ค.
ํ๊ธฐ๊ฐ ์ด๋ ต๋ค๋ฉด "๋น์ ์ ์์ด๋์ด๊ฐ ํฅ๋ฏธ๋กญ๊ณ ์ฝ๊ฐ์ ํ์๋ฅผ ์ฑ์์ฃผ์ง๋ง, ์ ๋ง ์ด๋ ต๊ณ ์ฐ๋ฆฌ๋ ์ง๊ธ ๊ทธ๊ฒ์ ํ ์์์ด ์์ต๋๋ค ... ์๋ง ๋น์ ์ ๊ทธ๊ฒ์ ๊ฐ๋ฐํ๊ณ ๋ฌผ์ด๋ณผ ์ ์์ต๋๊น? ํ ๋ฆฌํ์คํธ "๋๋ ๊ทธ์ ๋น์ทํ ๊ฒ : bulb :
# 1341์์๋ docker-compose.yml
์์์ ๊ฐ์ด ์ผ๋ถ ์ด๋ฒคํธ (์ : ์ปจํ
์ด๋ ์์ฑ) ์ ํ์ ์คํ๋๋ nmp install
์ ๊ฐ์ docker-compose.yml
๋ช
๋ น์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ "๋ง"๋ณผ ์ ์์ต๋๋ค docker exec <container id> npm install
์๋ฅผ ๋ค์ด
๋๋ ์ฌ์ฉ์ ์ ์ NodeJS ์ด๋ฏธ์ง๋ฅผํ๊ณ ๋ ์คํํ๋ ค๋ฉด npm install
์ผ๋ก, ๊ทธ๊ฒ์์ ๋ง๋ ์ฉ๊ธฐ์ docker-compose up --build
.
๋ด ๋ฌธ์ ๋ ์์ฉ ํ๋ก๊ทธ๋จ ์ฝ๋๊ฐ ์ปจํ
์ด๋์ ์ถ๊ฐ๋์ง ์์์ผ๋ฉฐ docker-compose.yml
์ ์ ๋ ๋ณผ๋ฅจ๊ณผ ํจ๊ป ํ์ฌ๋์ด ์์ต๋๋ค.
custom-node:
build: ../my_app-node/
tty: true
#command: bash -c "npm install && node"
volumes:
- /var/www/my_app:/usr/share/nginx/html/my_app
๋ฐ๋ผ์ ์ข
์์ฑ์ ํ์ธํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ Dockerfile์์ npm install
๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋์์ ์ค๋ช
ํ์ต๋๋ค. http://stackoverflow.com/questions/43498098/what-is-the-order-of-events-in-docker-compose
npm install
๋ฅผ ์คํํ๋ ค๋ฉด ํด๊ฒฐ ๋ฐฉ๋ฒ ์ธ command
๋ฌธ์ ์ฌ์ฉํด์ผํฉ๋๋ค.
command: bash -c "npm install && node"
์ ๋ง ๊นจ๋ํ์ง ์์ต๋๋ค : ์ค๋ง : ๊ทธ๋ฆฌ๊ณ Alpine ๋ฒ์ ์์ ์คํํ ์ ์์ต๋๋ค (Bash๊ฐ ์ค์น๋์ด ์์ง ์์ต๋๋ค).
Docker Compose๊ฐ ์ปจํ ์ด๋, eG์์ exec ๋ช ๋ น์ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณต ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
custom-node:
build: ../my_app-node/
tty: true
command: node
volumes:
- /var/www/my_app:/usr/share/nginx/html/my_app
exec:
- npm install
ํ์ง๋ง ๊ทธ๋ ์ง ์์ต๋๋ค. ์ ๋ง ๋น ์ง ๊ฒ ๊ฐ์ต๋๋ค!
compose๊ฐ ํ
์คํธ ์ฉ์ผ๋ก ์ค๊ณ๋์๋ค๊ณ ์๊ฐํ์ง๋ง ์๋ง๋ ํ๋ ธ์ ๊ฒ์ด๋ฉฐ ๋ก์ปฌ ๊ฐ๋ฐ ๋ฑ์ ์ํด ๋ ๋ง์ ๊ฒ์ ์๋ํ์ต๋๋ค. ๊ณ ์ ์ปจํ
์ด๋์ ํ๋ก์ ํธ ์ด๋ฆ, ๊ฒฝ๋ก ๋ฐ ์์ ๊ถ์ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ ์ฌ์ด์ ๋ถ๋ถ๋ช
ํ ๊ด๊ณ์ ๊ฐ์ ๋ค๋ฅธ ๊ฑฐ์น ๊ฐ์ฅ์๋ฆฌ์ ๋ถ๋ช ํ์ต๋๋ค. ๊ฐ์ ๋๋ ํ ๋ฆฌ ๋ฑ์ ์ฌ๋ฌ compose ํ์ผ์ด ์์ผ๋ฉด ์ด๋ป๊ฒ๋ฉ๋๊น? ๊ทธ๋์ ๋ชจ๋ CI์ ์ ํฉํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋์ kubelet์ ๋
๋ฆฝ ์คํ ํ์ผ๋ก ์คํํ์ฌ CI์์ ํ๋ก๋์
k8 ๋งค๋ํ์คํธ๋ฅผ ์ฌ์ฌ์ฉ ํ ๊ณํ์
๋๋ค. ์ด๊ฒ์ ๋ํ ๋ง์ ์ ์ฐฉ์ ๊ฐ ํ์ํ์ง๋ง ์ ์ด๋ ์ด๋ฐ ์์ผ๋ก dev, test ๋ฐ prod์ ๋ํด ๋์ผํ ์ ์ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@ lucile-sticky๋ ์ํ์ธ์์ sh -c
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋น์ ์ด ์ํ๋ ๊ฒ์ docker-compose์ ์ญํ ์ด ์๋ "๋น๋ ์๋ํ"์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋น ๋ดค์ด ?
๋ ๊ฐ์ง ์ง๋ฌธ :
์ด ๊ธฐ๋ฅ์ ๋งค์ฐ ํ์ํฉ๋๋ค!
@ lucile-sticky
์ด๊ฒ์ด Docker Compose์ ์ญํ ์ด ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
Compose์ ์ญํ ์ด ๋ช ํํ๊ฒ ์ ์๋์ด ์๊ณ ์ด๋ฌํ ๊ธฐ๋ฅ์ ํฌํจํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
Compose๋ ๋ค์ค ์ปจํ ์ด๋ Docker ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ๊ณ ์คํํ๊ธฐ์ํ ๋๊ตฌ์ ๋๋ค. Compose์์๋ Compose ํ์ผ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋น์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋จ์ผ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ์์ ๋ชจ๋ ์๋น์ค๋ฅผ ๋ง๋ค๊ณ ์์ํฉ๋๋ค.
ํต์ฌ์ด ํ๋์ ๋๊ตฌ ๋ง ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ฒ์ ์ง๋ฐฐํ๋ ๊ฒ์ด๋ผ๋ฉด Docker Compose๊ฐ ์ํ ํ ์์๋ ์์ ์ ์๋ฃํ๊ธฐ ์ํด ๋ค๋ฅธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ฐ๋ฆฌ๋ ๊ทธ๋ค ๋ชจ๋๋ฅผ ์ง๋ฐฐํ๋ ํ๋์ ๋๊ตฌ๊ฐ๋๊ณ ์ถ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ ๋์ค ์ฒ ํ์ ๋ฐ๋ฅด๊ณ "๊ฐ ํ๋ก๊ทธ๋จ์ด ํ ๊ฐ์ง ์ผ์ ์ํ๋๋ก ๋ง๋ ๋ค. ์๋ก์ด ์์
์ํ๋ ค๋ฉด ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ๊ธฐ์กด ํ๋ก๊ทธ๋จ์ ๋ณต์กํ๊ฒ ๋ง๋ค์ง ๋ง๊ณ ์๋ก ๋น๋ํ์ญ์์ค."๋ผ๊ณ ๋ฏฟ์ต๋๋ค.
๊ทธ ์ฒ ํ์ ๋์ํ์ง ์๋ ๊ฒ์ ๊ด์ฐฎ์ง ๋ง Docker์์ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
์ ๋ 2015 ๋ 8 ์์์ด ๋ฌธ์ ๋ฅผ ์์ฑํฉ๋๋ค. ๋งค๋ ๋๊ตฐ๊ฐ๊ฐ ๋๊ธ์ ์ถ๊ฐํ๊ณ ๋์ผํ ๋ต๋ณ์ผ๋ก ๋์ผํ ์ง๋ฌธ์ ๋ฐ๋ณตํ๊ณ ์์ต๋๋ค (๊ทธ๋ฆฌ๊ณ ํ์คํ @dnephin ์ด ๊ทธ์ ๋๊ตฌ์ ๋ํ ๊ด๊ณ ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค).
@์ ๊ฐ์ด-
์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ์์ "๋น๋"์ "ํ๋ก๋น์ ๋"์ ๋ถ๋ฆฌ ํ ์ โโ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ์ค ํ๋๋ฅผ ์ ์ ์์ต๋๋ค.
์๋น์ค๋ฅผ ๊ตฌ์ฑ ํ ๋์ด๋ฅผ ํ๋ก๋น์ ๋ํด์ผํฉ๋๋ค. ๋ฐ๋๋ฅ์ด๋ฅผ ๋ฐฐํฌํ๋ฉด ์ ์์ผ๋ก ํ๋ก๋น์ ๋ํด์ผํ๊ณ , DB๋ฅผ ๋ง๋ค๋ฉด ์ปจํ ์ด๋๊ฐ ์ด๋ป๊ฒ ์์๋์ด์ผํ๋์ง์ ๊ด๊ณ์์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ์ ํด์ผํฉ๋๋ค (์ด๋ฏธ์ง ์ ์ง ๊ด๋ฆฌ์๊ฐ ๊ด๋ฆฌํ๋๋ก ํจ). Compose ์ฌ๋ก์์ "ํ๋ก ๋น ์ ๋"์ ์ฃผ๋ ๋ชฉ์ ์ "์ปจํ ์ด๋๋ฅผ ์์ํ๋ ํญ๋ชฉ"๊ณผ "์ปจํ ์ด๋๋ฅผ ์ ๊ณตํ๋ ํญ๋ชฉ"๊ฐ์ ์คํด๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ์ ๋๋ค.
"Compose๋ฅผ ์ฌ์ฉํ๋ฉด Compose ํ์ผ์ ์ฌ์ฉ ํ์ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋น์ค๋ฅผ ๊ทธ๋ฐ ๋ค์ ๋จ์ผ ๋ช ๋ น์ ์ฌ์ฉ ํ์ฌ ๊ตฌ์ฑ์์ ๋ชจ๋ ์๋น์ค๋ฅผ
์ ๋์ค ์ฒ ํ? ์๊ฒ ํด์ฃผ์ธ์. ์ด ๋ฌธ์ https://github.com/docker/compose/issues/1809#issuecomment -237195021์์ ํ ๊ฒ๊ณผ ๋์ผํ ๋ต๋ณ์ ์๋ ค๋๋ฆฝ๋๋ค.
"moby"๊ฐ ์ ๋์ค ์ฒ ํ์์ ์ด๋ป๊ฒ ๋ฐ์ ํ ๊ฒ์ธ์ง ๋ณด์.
@shin docker-compose๋ ์์๋ ฅ์ ํ์ฅ์ผ๋ก ์ ๋์ค ์ฒ ํ์ ๊ณ ์ํ์ง ์์ต๋๋ค. docker-compose๊ฐ Unix ์ฒ ํ์ ๊ณ ์ํ๋ค๋ฉด build, up, rm, start, stop ๋ฑ ๊ฐ๊ฐ์ ๋ํ ๊ฐ๋ณ ๋ช ๋ น์ด์์ ๊ฒ์ด๋ฉฐ ๊ฐ๊ฐ ์ผ๊ด๋๊ฒ ์๋ํ๋ ์ฌ์ฉ ๊ฐ๋ฅํ stdin, stdout ๋ฐ stderr์ ๊ฐ์ง ๊ฒ์ ๋๋ค. System V, HP-UX, AIX, Solaris ๋ฐ Linux๋ฅผ ํฌํจํ์ฌ 20 ๋ ์ด์์ ๊ฒฝํ์ ๊ฐ์ง ์ ๋์ค ์์คํ ๊ด๋ฆฌ์๊ฐ ๋งํฉ๋๋ค.
์์ฑ ๊ฐ์๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค.
Compose๋ ๋ค์ค ์ปจํ ์ด๋ Docker ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ๊ณ ์คํํ๊ธฐ์ํ ๋๊ตฌ์ ๋๋ค. Compose์์๋ Compose ํ์ผ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋น์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋จ์ผ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ์์ ๋ชจ๋ ์๋น์ค๋ฅผ ๋ง๋ค๊ณ ์์ํฉ๋๋ค.
๊ถ๊ทน์ ์ผ๋ก docker-compose๋ docker ์ด๋ฏธ์ง์์ ์์ฑ ๋ ์ปจํ ์ด๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค ๊ทธ๋ฃน์ ๊ด๋ฆฌํ๊ธฐ์ํ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ์ ๋๋ค. ์ฃผ์ ๊ธฐ๋ฅ์ docker-compose.yml ํ์ผ์ ์ ์ ๋ ์๋น์ค๋ฅผ '์์ฑ', '์์', '์ค์ง', 'ํ์ฅ'๋ฐ '์ ๊ฑฐ'ํ๋ ๊ฒ์ ๋๋ค.
๋๋ถ๋ถ์ ์๋น์ค๋ ์ด๋ฌํ ๊ฐ ๋ผ์ดํ ์ฌ์ดํด ์ ํ ๋์ ์ถ๊ฐ ๋ช ๋ น์ ์คํํด์ผํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋ฌ์คํฐ๋ฅผ ํ์ฅํ๋ ค๋ฉด ์ข ์ข ํด๋ฌ์คํฐ์์ ๋ฉค๋ฒ๋ฅผ ๊ฒฐํฉํ๊ฑฐ๋ ์ ๊ฑฐํด์ผํฉ๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฅํ๋ ค๋ฉด ์ข ์ข ๊ตฌ์ฑ์์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ์์๋ก๋ ๋ฐธ๋ฐ์์ ์๋ ค์ผํฉ๋๋ค. ์ผ๋ถ ํธ์ง์ฆ์ ์ธ ์์คํ ๊ด๋ฆฌ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ก๊ทธ๋ฅผ ๊ฐ์ ๋ก ๋น์ฐ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ข ๋ฃ ํ ๋ ์ฒดํฌ ํฌ์ธํธ๋ฅผ ์์ฑํฉ๋๋ค.
๋๋ถ๋ถ์ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ์๋ ์ํ ์ ํ์ ๋ํ ์กฐ์น๊ฐ ํ์ํฉ๋๋ค. AWS์ ๋๊ตฌ, Google์ ๋๊ตฌ, ๊ฐ๋ , ์๋ฆฌ์ฌ ๋ฑ์์ ์ฐพ์ ์ ์์ต๋๋ค.์ด ์ค์ผ์คํธ๋ ์ด์ ๊ณต๊ฐ์์๋ ๋๋ถ๋ถ์ ํญ๋ชฉ์๋ ์ผ์ข ์ ์๋ช ์ฃผ๊ธฐ ํํฌ๊ฐ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ด ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ์ด๊ณ ์ํ ๋ณํ๋ฅผ ์ธ์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ๋์ปค-์ปด ํฌ์ฆ์ ์์ญ์ ํ๊ณ ํ๊ฒ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฒคํธ ๋ ์ธ๋ถ ์คํฌ๋ฆฝํธ๊ฐ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ค์ ๋ฉฑ ๋ฑ์ฑ์ด ์๋๋ฉฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ๋ฅด๊ธฐ ์ํด ์์ฑํ๋ '๋ ๋ฒ์งธ'์๋น์ค๋ฅผ ์์ํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ด๋ ต์ต๋๋ค. ํํฌ๊ฐ ์ปจํ ์ด๋ ๋ด๋ถ ๋๋ ์ปจํ ์ด๋ ์ธ๋ถ์์ ์คํ๋๋์ง ์ฌ๋ถ๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๋๋ค.
ํ๋ฃจ๊ฐ ๋๋๋ฉด docker-compose ์ฌ์ฉ์๊ฐ ํํํ๋ ์ค์ ์๊ตฌ๊ฐ ์์ผ๋ฉฐ @aanand , @dnephin , @ shin-์ ๊ทธ๊ฒ์ ๋ฌด์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ด ๋ก๋๋งต์ ํฌํจ ๋ ๊ฒ์ ๋ณด๋ ๊ฒ์ ์ข์ ๊ฒ์ ๋๋ค.
์ด๋ฌํ ์ ํ์ ๊ธฐ๋ฅ์ ํ์ฌ ํ ์คํธ ๋ฐ ํ๋ก๋์ ํ๋ก๋์ ๋ฐฐํฌ์์ Docker ์ฑํ์ ์ฐจ๋จํ๊ณ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ํด๊ณ ๋๊ธฐ๋ณด๋ค๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ํด๊ฒฐ๋๋ ๊ฒ์ ์ ๋ง๋ก๋ณด๊ณ ์ถ๋ค.
์ด๊ฒ์ ๋งค์ฐ ์ ์ฉ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค!
๋์๊ฒ ๋ฌธ์ ๋ ์๋น์ค b๋ฅผ ์คํํ๋ db ์ปจํ
์ด๋ B์ ์์กดํ๋ ์๋น์ค 'a'๋ฅผ ์คํํ๋ ์ฑ ์ปจํ
์ด๋ A๊ฐ์์ ๋์
๋๋ค. ๊ทธ๋ฐ ๋ค์ B๊ฐ ์ค์ ๋์ง ์์ผ๋ฉด A ์ปจํ
์ด๋๊ฐ ์คํจํฉ๋๋ค.
๊ณ ์ ํ Dockerfile์ ๋ค์ ์์ฑํ๋ ๋์ Docker ํ๋ธ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ A๊ฐ ์คํจํ๊ณ ์ปจํ
์ด๋๊ฐ ์์ฑ๋์ง ์์์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ์ ์ผํ ์ต์
์
@ lucile-sticky์ ๋๊ฐ์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
@lekhnath ๋ด ๊ฒฝ์ฐ์, ๋๋ ํธ์งํ์ฌ ๊ทธ๊ฒ์ ํด๊ฒฐ command
๋ด์์ ์ต์
docker-compose.yml
:
command: bash -c "npm install && node"
๊ทผ๋ฐ ๋๋ฌด ๋ชป ์๊ฒผ์ด TT
@ lucile-sticky ์ด๊ฒ์ ์ปจํ
์ด๋์ Dockerfile
์ ์ค์ ๋ ๋ชจ๋ ๋ช
๋ น์ ๋ฌด์ํ๋ค๋ ์ ์ ์ ์ํด์ผํฉ๋๋ค. ๋ด๊ฐ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ์ ์คํฌ๋ฆฝํธ ์ค์นํ์ฌ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค volumes
๋ง๋๋ command
์คํฌ๋ฆฝํธ, ๊ทธ๋ฆฌ๊ณ ์๋ณธ์ ํฌํจํ์ฌ ๋์ ๋์ปค ์์ฑ ํ์ผ ์คํ์ CMD
๋ก๋ถํฐ Dockerfile
.
์ด ๋ฌธ์ ๊ฐ ์ข ๊ฒฐ ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? _bash ์คํฌ๋ฆฝํธ ์์ฑ _ ๋๋ _ ๋ด๊ฐ ์์ฑํ์ด ๋๊ตฌ ์ฌ์ฉ _์์ด ๋ฌธ์ ๋ฅผ ์ข ๊ฒฐ ํ ์ ํจํ ์ด์ ๊ฐ ์๋๋๋ค.
์ด๊ฒ์ compose๊ฐ ์ฌ์ฉ๋๋ ๋ง์ ์ฌ์ฉ ์ฌ๋ก์์ ํ์ํ ๋งค์ฐ ์ ์ฉํ๊ณ ์ค์ํ ๊ธฐ๋ฅ์ ๋๋ค.
@dnephin init ์คํฌ๋ฆฝํธ ์คํ์ด ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ๋ฒ์ ๋ฐ์ ์๋ค๊ณ ์๊ฐํ์ญ๋๊น? ๊ฒฐ๊ตญ compose๋ "Docker๋ก ๋ค์ค ์ปจํ ์ด๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ์ํ๊ณ ์คํ"ํ๋ ๊ฒ์ ๋๋ค.
๋น์ ์ด ์ฌ๊ธฐ์ ๊ทธ๋ ๊ฒํ์ง ์์๋ค๋ฉด ๋๊ตฐ๊ฐ ๋๋น๋ฅผ ๋ณด์์ต๋๋ค. :)
์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์๋ค๊ณ ์๊ฐํฉ๋๋ค. docker-compose
ํ์ผ ๋ด์์ @ ahmet2mir๊ฐ ์ ๊ณต ํ ์์ ์ ๊ฐ์ด ๋ช
๋ น์ด ์คํ๋์ด์ผํ๋์๊ธฐ๋ฅผ ๊ธฐ๋ก ํ ์์๋ ๊ธฐ๋ฅ์๋ณด๊ณ ์ถ์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ด ๊ตฌํ๋์ง ์์ ๊ฒ์๋ณด๊ณ ๋งค์ฐ ์ฌํ๋๋ค.
์ด ๊ธฐ๋ฅ์ ๊ตฌํํ์ญ์์ค. ์ปจํ
์ด๋ ์ด๊ธฐํ ํ ํ์ผ์ ๋ณต์ฌํด์ผํ๋ ํด๋๊ฐ ์์ฑ๋๋ฏ๋ก Docker ๊ตฌ์ฑ ํ ํ์ผ์ ์๋์ผ๋ก ์ค์นํด์ผํฉ๋๋ค.
๊ฐ์ฌ
์ด ๊ธฐ๋ฅ์ด ์์ง ๊ตฌํ๋์ง ์์๋ค๋ ๊ฒ์ด ๋๋์ต๋๋ค!
@dnephin์ ๋งค์ฐ ํํธ์๋ ํ์์ ๋๋ค. ๋น์ ์ ์ฃผ๋ก ์๊ธฐ ํ๋ณด๋ก ๋ณด์ด๋ ๊ธฐ๋ฅ์ ๋ํด ๊ทธ๋ ๊ฒ ๋ง์ด ์ฐพ๋ ๊ธฐ๋ฅ์ ๊ตฌํ์ ๊ธ์งํ์ผ๋ฉฐ ๋ํ๋ฅผ ๊ณ์ํ ์์ฌ์กฐ์ฐจ ์์ต๋๋ค.
์ฃ์กํฉ๋๋ค. ์ข ๋ ์จํํ ์ธ์ด๋ฅผ ์๊ฐํ ์ ์์์ต๋๋ค.์ด ๊ธฐ๋ฅ์ด ๋ถ์กฑํ์ฌ ๋ค๋ฅธ ๋ง์ ๊ฐ๋ฐ์ ๋ฐ ํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ํฌ ํ๋ก์ ์ผ๋ถ๊ฐ ์ถ๊ฐ๋์์ผ๋ฉฐ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋ฐฉํด๊ฐ๋์์ต๋๋ค ..
์, ๊ทธ๋ผ unix-way
๋กํฉ์๋ค.
_Just_ (๋ฉํฐ ํ๋ ์ค ํ) docker-compose up
stdin์ ๊ฐ ์ปจํ
์ด๋์ CMD
?
๊ทธ๋ฐ yaml ํ์ผ์ด
services:
node:
command: sh -
์ด ์ผ์ ํ ๊ฒ์
๋๋ค : cat provision.sh | docker-compose up
์ปจํ
์ด๋๋ exec uting์์ํ ๊ฒ์
๋๋ค. ๋ช
๋ น์ ์ ๋ฌํ๋ ๊ฒ๋ณด๋ค stdin์ ๋ ์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋๋ค.
๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
services:
node:
localscript: provision.sh
ํ๋ก๋น์ ๋ ์ฌ์ฉ ์ฌ๋ก์ 99 %๋ฅผ ํด๊ฒฐํ๋ ์ฝ๊ฐ์ ์ ์ค์ฌ์ด์ง๋ง.
์ ํจํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๊ณ ์ด์ ๋ํ ๋ง์ ์ฐฌ์ฑ ํฌํ๊ฐ ์์ง๋ง ... ์ฌ์ ํ ๋ถ๋ช ํ ๊ฑฐ๋ถ๋์์ต๋๋ค. ์ฌ๊ธฐ์์๋ ๋ค๋ฅธ ๋ง์ ์ฌ๋๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋ ์ด๊ฒ์ด ๋งค์ฐ ์ ์ฉํ๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
๊ธฐ์กด +์ ํฐ ์คํ์ ๋ด +1 ์ถ๊ฐ
... ์ฌ๊ธฐ์ ๋ ๋ค๋ฅธ +1!
์ด ๊ธฐ๋ฅ์ ๋ํ ๊ทธ๋ฌํ ์์ฒญ์ด ์์ผ๋ฉด ๊ตฌํํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ๋์์ด๋๋ ๋๊ตฌ๊ฐ ์ฌ๊ธฐ์ ์์ผ๋ฉฐ ์ถ์ ๋ ์ด๋ ต๊ฒ ๋ง๋ค์ง ์๋๋ก์ด๋ฅผ ์ฑํํด์ผํฉ๋๋ค.
๋๋ ๋๊ตฐ๊ฐ๊ฐ ๊ณ ์ํ๋ ์ฒ ํ์ ์ดํดํ์ง๋ง ์ด๋ค ์ข
๋ฅ์ "ํํฌ ๋ช
๋ น"์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ๋์ง ์์์ผํฉ๋๋ค.
+1 +1
์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌํ ์์ ์ ์ํํฉ๋๋ค.
docker-start.sh
#!/usr/bin/env bash
set -e
set -x
docker-compose up -d
sleep 5
# #Fix1: Fix "iptable service restart" error
echo 'Fix "iptable service restart" error'
echo 'https://github.com/moby/moby/issues/16137#issuecomment-160505686'
for container_id in $(docker ps --filter='ancestor=reduardo7/my-image' -q)
do
docker exec $container_id sh -c 'iptables-save > /etc/sysconfig/iptables'
done
# End #Fix1
echo Done
@ reduardo7 ๊ทธ๋ฐ ๋ค์ docker-compose๋ฅผ ์์ ํ ์ญ์ ํ๋ฉด ์ข ์์ฑ์ด ํ๋ ์ค์ด ๋ญ๋๋ค.
@omeid , ๋น์ ์ด ๋ง์์! ์ ์ฌํ ์์ ์ ์ํํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฃ์กํฉ๋๋ค!
@ reduardo7 ์ฌ๊ณผ ํ ํ์๊ฐ ์์ต๋๋ค. ๊ฒ์ ํ ๋ด์ฉ์ด ์ผ๋ถ ์ฌ๋๋ค์๊ฒ ์ ์ฉ ํ ๊ฒ์
๋๋ค.
๋๋ ๋จ์ง ์๋์ ๋ฌธ์ ๊ฐ ์ฌ์ ํ ์ ํจํ๋ฉฐ ์ข
๊ฒฐ๋์ด์๋ ์๋๋ค๋ ์ ์ ์ง์ ํ์ต๋๋ค. :)
@dnephin ์ ์คํ ๋๋ฅผ ์ดํดํฉ๋๋ค. ์ฌ๊ธฐ์ ์ธ๊ธ ๋ ๊ธฐ๋ฅ์ ์ถฉ๋ถํ ๋ค๋ฅธ ๊ธฐ๋ฅ์ผ๋ก ๋์ฒด ๋ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ํจํด์ด ์์ฃผ ์ฌ์ฉ๋๋ค๋ฉด ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ์ด๋ (๋๋ ์ผ๋ถ ํ ์คํธ)๋ฅผ ์ ์ํ๋ ๊ฒ์ ์ด๋จ๊น์?
์ด ํจํด์ด ์์ฃผ ์ฌ์ฉ๋ ์ ์๋ค๋ ๋ฐ ๋์ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@MaybeS ์ ์ผํ ๋ถ์ผ์น๋ @dnephin ์ด docker-compose๋ฅผ ๋ ๋์ ์ ํ์ผ๋ก ๋ง๋๋ ๋ฐ ๋์์ด๋๋ ๋์ ๊ทธ์ ๋ฉ์ฒญํ ๋๊ตฌ๊ฐ ํ๋ณด๋๋ ๊ฒ์ ๋ณด๋ ๊ฒ์ ๋๋ค.
@omeid ๊ทธ๋ ์ต๋๋ค.
onrun
ํ์์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ํ๋ ์ค๋์ ์
version: "3.3"
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab'
environment:
GITLAB_OMNIBUS_CONFIG: |
# NOTE: this URL needs to be right both for users, and for the runner to be able to resolve :() - as its the repo URL that is used for the ci-job, and the pull url for users.
external_url 'http://gitlab:9090'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '9090:9090'
- '2224:22'
gitlab-runner:
image: gitlab/gitlab-runner:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
๋ฌผ๋ก ์ฃผ์๋ ๋ฑ๋ก๋์ง ์์์ต๋๋ค. ๊ทธ๋ ๊ฒํ๋ ค๋ฉด
๋ฐ๋ผ์ docker-compose์์ ๋ค์ค ์ปจํ ์ด๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฐฐํฌ๋ฅผ ์ ์ํ๋ ๋์ ๋ณด์กฐ ์๋จ์ ์ฌ์ฉํด์ผํฉ๋๋ค.์ด ๊ฒฝ์ฐ ... ๋ฌธ์?
export GL_TOKEN=$(docker-compose exec -u gitlab-psql gitlab sh -c 'psql -h /var/opt/gitlab/postgresql/ -d gitlabhq_production -t -A -c "SELECT runners_registration_token FROM application_settings ORDER BY id DESC LIMIT 1"')
docker-compose exec gitlab-runner gitlab-runner register -n \
--url http://gitlab:9090/ \
--registration-token ${GL_TOKEN} \
--executor docker \
--description "Docker Runner" \
--docker-image "docker:latest" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock \
--docker-network-mode "network-based-on-dirname-ew_default"
์, ๋ญ๊ฐ ํดํน ํ ์ ์์์ง๋ ๋ชฐ๋ผ ๋์ปค ์์ผ์ด์๋ ๋ค๋ฅธ ์ปจํ
์ด๋๊ฐ ์๊ณ docker exec's
๋ด๊ธฐํด์ผ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค ....
์๋ฅผ ๋ค์ด ๋ค์์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
gitlab-initializer:
image: docker/compose:1.18.0
restart: "no"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./gitlab-compose.yml:/docker-compose.yml
entrypoint: bash
command: -c "sleep 200 && export GL_TOKEN=$(docker-compose -p sima-austral-deployment exec -T -u gitlab-psql gitlab sh -c 'psql -h /var/opt/gitlab/postgresql/ -d gitlabhq_production -t -A -c \"SELECT runners_registration_token FROM application_settings ORDER BY id DESC LIMIT 1\"') && docker-compose exec gitlab-runner gitlab-runner register -n --url http://gitlab:9090/ --registration-token ${GL_TOKEN} --executor docker --description \"Docker Runner\" --docker-image \"docker:latest\" --docker-volumes /var/run/docker.sock:/var/run/docker.sock --docker-network-mode \"simaaustraldeployment_default\""
๋ด ์์ฑ ํ์ผ์-gitlab์ด ์ฆ์ ์ค๋น๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ผ์ข
์ ๋ฃจํ / ๊ธฐ๋ค๋ฆผ์ด ํ์ํ์ง๋ง sleep 200
๋ก๋ ์ถฉ๋ถํ์ง ์์ ์ ์์ต๋๋ค.
๊ทธ๋์-๋น์ ์ __can__ docker-compose.yml
์์ ์ง์ ์ด์ ๊ฐ์ ํจํด์ ํดํนํฉ๋๋ค-ํ์ง๋ง ๊ฐ์ธ์ ์ผ๋ก ์ ๋ ์ด๊ฒ๋ณด๋ค ๋ ๊นจ๋ํ ์ง์์ ์ํฉ๋๋ค :)
@SvenDowideit onrun
์ด (๊ฐ) ์ด๋ฏธ ์กด์ฌํฉ๋๋ค. entrypoint
๋๋ cmd
์
๋๋ค.
์ด ์ด๋ฏธ์ง์ ์ง์
์ ์คํฌ๋ฆฝํธ๋ ์ฌ์ฉ์์๊ฒ ํํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. $GITLAB_POST_RECONFIGURE_SCRIPT
๋ ๋ชจ๋ ์ค์ ์ด ์๋ฃ๋ ํ ์คํํ ์คํฌ๋ฆฝํธ์ ๊ฒฝ๋ก๋ก ์ค์ ํ ์ ์์ต๋๋ค (์ด๋ฏธ์ง์์ /assets/wrapper
์ฐธ์กฐ). env ๋ณ์๋ฅผ psql + register๋ฅผ ์ํํ๋ ์คํฌ๋ฆฝํธ ๊ฒฝ๋ก๋ก ์ค์ ํ๋ฉด ๋ชจ๋ ์ค์ ์ด ์๋ฃ๋ฉ๋๋ค.
์ด๋ฏธ์ง๊ฐ์ด ํํฌ๋ฅผ ์ ๊ณตํ์ง ์๋๋ผ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ฅํ๋ฉด ์๋นํ ์ฝ๊ฒ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
gitlab์ด ๋ฐ๋ก ์ค๋น๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ผ์ข ์ ๋ฃจํ / ๊ธฐ๋ค๋ฆผ์ด ํ์ํ์ง๋ง sleep 200์ ์ถฉ๋ถํ์ง ์์ ์ ์์ต๋๋ค.
"exec-after-start"์ต์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ํ์ํฉ๋๋ค. ์ง์ ์ ์คํฌ๋ฆฝํธ๋ ์ค์ ๋ก ํํฌ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ํด๋น ์๋ฃจ์ ์์๋ ํ์ํ์ง ์์ ๊ฒ์ ๋๋ค.
์๋์, ์ ๊ฐ ๋ณด์ฌ์ฃผ๊ณ ์๋ ๋ฌธ์ ์ ์ผ๋ถ๋ฅผ ๋์น ๊ฒ ๊ฐ์ต๋๋ค.
์ ๊ฒฝ์ฐ์๋ ํ๋๊ฐ ์๋ ๋ ์ปจํ ์ด๋ ๋ชจ๋์ ๋ํ ์ก์ธ์ค๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋์ ์ง์ ์ / ๋ช ๋ น์ ์ด๊ฒ์ ์ ๊ณตํ์ง _ ์์ต๋๋ค _.
GL_TOKEN
๋ gitlab ์ปจํ
์ด๋์์ ๊ฐ์ ธ์จ ๋ค์ gitlab-runner ์ปจํ
์ด๋์์ ๋ฑ๋กํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๊ทธ๋์ ์ ๊ฐํ๊ณ ์๋ ํดํน์ docker/compose
์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ธ ๋ฒ์งธ ์ปจํ
์ด๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ํ ์ปจํ
์ด๋์ config / entrypoint / settings๋ฅผ ์์ ํ ์์๋ ๊ฒ์ด ์๋๋ฉฐ, ์์ ํ (์ฌ์ํ) ์์ ์
๋๋ค. ๋ ๋ง์ ๊ฒ์ ํ์๋กํ๋ ๋ค์ค ์ปจํ
์ด๋ ์กฐ์ .
๋๋ ๊ทธ๊ฒ๋ค์ ์ข ๋ ๋ง๋ฒ์ฒ๋ผ ๋ง๋ค๊ธฐ ์ํด ์์ ํ๊ณ ์์ต๋๋ค. ์ฆ, ๊ธฐ๋ณธ์ ์ผ๋ก gitlab์ด ์์ฒด์ ์ผ๋ก ์ด๊ธฐํํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ด ์ด๊ธฐํ ์ปจํ ์ด๋์ ์ฝ๊ฐ์ ์๋ฉด ๋ฃจํ๊ฐ ์์์ ์๋ฏธํฉ๋๋ค.
TBH, ์ ๋ compose ํ์ผ ์์ฒด์ docker / compose ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ init-container์์ ์คํ๋๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ข ๋ฅ์ ๋ณต์ก์ฑ์ ์จ๊ธฐ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ๋๋ผ๊ธฐ ์์ํ์ต๋๋ค. ๋๋ฅผ ๋ฐ์ผ๋ก, ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋จ์ง ์๋ ํ ๊ฒ์ ๋๋ค "์ด๋ฐ ์ํฉ.
_IF_ ๋๋ ๋์์ด ๋ ์ด์ํ ๊ตฌ๋ฌธ ์ ์คํ์ ๊ณ ๋ คํด์ผํ๋ค. ์๋ง๋ ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ํ ๊ฒ์ด๋ค.
gitlab-initializer:
image: docker/compose:1.18.0
restart: "no"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./gitlab-compose.yml:/docker-compose.yml
entrypoint: ['/bin/sh']
command: ['/init-gitlab.sh']
file:
path: /init-gitlab.sh
content: |
for i in $(seq 1 10); do
export GL_TOKEN=$(docker-compose -f gitlab-compose.yml -p sima-austral-deployment exec -T -u gitlab-psql gitlab sh -c 'psql -h /var/opt/gitlab/postgresql/ -d gitlabhq_production -t -A -c "SELECT runners_registration_token FROM application_settings ORDER BY id DESC LIMIT 1"')
echo "$i: token($?) == $GL_TOKEN"
ERR=$?
if [[ "${#GL_TOKEN}" == "20" ]]; then
break
fi
sleep 10
done
echo "GOT IT: token($ERR) == $GL_TOKEN"
for i in $(seq 1 10); do
if docker-compose -f gitlab-compose.yml -p sima-austral-deployment exec -T gitlab-runner \
gitlab-runner register -n \
--url http://gitlab:9090/ \
--registration-token ${GL_TOKEN} \
--executor docker \
--description "Docker Runner" \
--docker-image "docker:latest" \
--docker-volumes '/var/run/docker.sock:/var/run/docker.sock' \
--docker-network-mode "simaaustraldeployment_default" ; then
echo "YAY"
break
fi
sleep 10
done
์ฆ, cloud-init : http://cloudinit.readthedocs.io/en/latest/topics/examples.html#writing -out-arbitrary-files
๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๊ดํด์๋-์ฐ๋ฆฌ๋ docker-compose-yml ๋ด๋ถ์์ ๋ณต์กํ ๋ค์ค ์ปจํ ์ด๋๋ฅผ ์กฐ์ ํ๋ ์๋ฃจ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ฌ์ ์ ์ ๋ ํ ํฐ์ ์ค์ ํ ์์๋ ๊ฒฝ์ฐ gitlab-runner
์ ์ง์
์ ์คํฌ๋ฆฝํธ์์ ์ค์ ํ ์ ์์ต๋๋ค. ์๊ฐ์ ์ ๋๋ฅผ ์ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
@dnephin ๋น์ ์ด ๋๋ณธ์ ์ธ๊ธํ๋ ์๊ฐ, ๋น์ ์ ์ง๋๊ณ ๋์ ์ฝ๊ฐ์ ์กฑ์ ์ ๋ฒ์ด๋ฌ์ต๋๋ค.
onrun
๋ entrypoint
๋๋ cmd
์ ๋์ผํ์ง ์์ต๋๋ค.
entrypoint
/ cmd
๋ ์ปจํ
์ด๋ init
/ PID 1๋ก ์คํ๋ ์คํ ํ์ผ์ ๊ตฌ์ฑํ๊ธฐ์ํ ๊ฒ์
๋๋ค.
์ด ๋ฌธ์ ์ ๋ง์ ๊ด๋ จ ๋ฌธ์ ์์ ์ธ๊ธ ๋ ์์ด๋์ด๋ init scripts
์ ๋ํ ๊ฒ์ธ๋ฐ, ์ด๋ ๋ถํ
์ ๋งฅ๋ฝ์์ init
์ ๋ค๋ฅด๋ฉฐ ์์ฉ ํ๋ก๊ทธ๋จ ์ด๊ธฐํ ์คํฌ๋ฆฝํธ์ ๊ดํ ๊ฒ์
๋๋ค.
@dnephin ํน์ ์ปจํ ์ด๋ ์ธํธ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ๋ณด๋ค๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ธํธ์ ์ด์ ์ ๋ง์ถ ๊ฒฝ์ฐ ๋ ์ ์ฉ ํ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋ด๊ฐ ๋ณธ ๊ฒ์์, ๊ทธ๊ฒ์ ์์ฑ ๋ ๋น๋ฐ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก ์ด๊ฒ์์ด ์์ ํ๋ ์ด ์์คํ ์ ์ ์ผํ ๋ค์ค ์ปจํ ์ด๋ ์กฐ์ ์๊ตฌ ์ฌํญ์ด ์๋๋๋ค. ๊ณต๊ฐ์ ์ผ๋ก ํ๋กํ ํ์ .
v1 ์ดํ compose ํ์ผ์์ entrypoint
๋ฐ command
๋ฅผ ์ฌ์ ์ ํ ์ ์์๋ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น? -v1 / # entrypoint) ์ปจํ
์ด๋๊ฐ ์๋ ์ค์ผ ๋ ๋ช
๋ น์ ์คํํ๊ธฐ์ํ onrun
์ ๊ฐ์ ์ง์๋ฌธ์ด ์์ง ์์ต๋๊น?
TBH, ์ ๋ onrun
์ด ๊ทธ๋ด๋ฏํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. Docker, ๋๋ ์ค์ผ ์คํธ๋ ์ดํฐ๊ฐ "์ปจํ
์ด๋๊ฐ ๋ชจ๋ ์๋ํ์ต๋๋ค"๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ์์ง ๋ชปํฉ๋๋ค. ์ ๊ฒฝ์ฐ์ HEALTHCHECK๋ ์คํจํฉ๋๋ค. ํ๋์ ์ปจํ
์ด๋์์ ์ ๋ณด๋ฅผ ์ป๊ณ ๋ค๋ฅธ ์ปจํ
์ด๋์์ ๋ค๋ฅธ ๊ฒ๋ค์ ์์ํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ถ๊ฐ "๋ฌผ๊ฑด"์
๋๋ค.
๊ทธ๋ฆฌ๊ณ _if_ ๋ง์์, ์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉํฐ ์ปจํ ์ด๋ ์์คํ ์ ์ผ๋ถ๊ฐ ์์ ์ ์ํ ํ ์์์๋งํผ ์ถฉ๋ถํ ์ค๋น๋์๋์ง ๊ฐ์งํ๋ ์ฝ๋๋ฅผ ํฌํจํ๋ ์ฐ์ฐ์ ์ปจํ ์ด๋๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์์ ์ ์๋ฃํ๊ณ ์ข ๋ฃํ๊ฑฐ๋ ์ฌ์ง์ด ๋ชจ๋ํฐ๋งํ๊ณ ์์ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ฝ๋๊ฐ์๋ ๋์ปค ์์ฑ ์ปจํ ์ด๋์ ์ํด (๋์ปค ์์ฑ์์) ๊ฐ์ฅ ์ ํด๊ฒฐ๋๋ ์์ ์ฒ๋ผ ๋๊ปด์ง๋๋ค.
์ด ์ฐ์ฐ์๋ฅผ ๋์ปค ๋ฌด๋ฆฌ ์คํ์ ์ฒ๋ฆฌ ํ ์์๋ ๊ฒ์ผ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ง๊ณ ๋ ๊ฒ์ ๋๋ค (๋ค๋ฅธ ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ผ๋ก ์ธํด).
์ปจํ ์ด๋์ "์ด๊ฒ์ ์ด์์์ ๋๋ค. ๋ง๋ฒ ๋ฅ๋ ฅ์ ๋ถ์ฌํ์ญ์์ค"๋ผ๊ณ ํ์ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒ์ด ์๋๋ผ๋ฉด docker-compose์ ์ถ๊ฐ ํ ์์๋ ๊ตฌ๋ฌธ ์คํ์ด ๋ง์ด ์๋์ง ํ์ ํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์๊ฐ ์ฌ์ฉ์์ ๋ง์ ๋ฃ๊ณ ์ถ์ง ์๋ค๋ ๊ฒ์ด ๋ถ๋ช ํด์ก์ต๋๋ค .. ๋ค๋ฅธ ๋๊ตฌ๋ฅผ ์ดํด ๋ณด๊ฒ ์ต๋๋ค. docker-compose๊ฐ ํฐ ๊ณ ํต์ ๋๋ค. docker-composer์์ ๋น๋ ๋๊ตฌ์ ๋๋ค ... ์ ๋ SIMPLE ๋ช ๋ น์ ์คํํ์ฌ ํ์ฑ ์ฌ์ฉ์์๊ฒ ์ปจํ ์ด๋ ๋ด๋ถ์ ๊ถํ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๊ฒ์ํ๋ ๋ฐ ๋ง์ ์๊ฐ์ ๋ณด๋์ต๋๋ค.
docker-composer๋ ๋จ์ํ NOT DONE ์ํ๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ๋ด ์์ฑ ํ์ผ์ onrun
์ด ๋ ๊ฒ์ ์ํฉ๋๋ค.
__BUT__, ์ปจํ
์ด๋๋ ์์ฑ๋ onrun
์๋ฏธ๋ฅผ ์ ์์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด๊ฒ์ด ์ฐ์ฐ์ ํจํด์ด ์กด์ฌํ๋ ์ด์ ์ด๋ฉฐ https://github.com/docker/compose/issues/1809#issuecomment -362126930์์ ์์ ๋ฅผ ๋ง๋ ์ด์ ์
๋๋ค.
์ค๋์ด ์์
์ __is__ ๊ฐ๋ฅํฉ๋๋ค. ๋ณธ์ง์ ์ผ๋ก ๋ค๋ฅธ ์๋น์ค๊ฐ ์ค์ ๋ก ์ํธ ์์ฉํ ์ค๋น๊ฐ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ onrun
์๋น์ค๋ฅผ ์ถ๊ฐ ํ ๋ค์ (gitlab์ ๊ฒฝ์ฐ์๋ ์๋นํ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค) ์กฐ์ ํ๊ธฐ ์ํดํด์ผ โโํ ์ผ์ ๋ฌด์์ด๋ .
๊ทธ๊ฒ์ผ๋ก ์๋ํ์ง ์๋ ๋ฌด์ธ๊ฐ๊ฐ ์๋ค๋ฉด, ์ ํฌ์๊ฒ ์๋ ค์ฃผ์ธ์. ์ฐ๋ฆฌ๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ ์์๋ผ ์ ์๋์ง ๋ณด๊ฒ ์ต๋๋ค!
๋๋ ์์ฑ ํ์ผ์์ ์คํ๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ปจํ ์ด๋๋ ๊ตฌ์ฑ๋ onrun์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ ์์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋ด๊ฐ๋ณด๊ธฐ์ ์๋น์ค ๋น onrun
๋ ์ฒซ ๋ฒ์งธ ์ปจํ
์ด๋ ํ๋ก์ธ์ค๊ฐ ์์๋๋์๊ธฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ปจํ
์ด๋๋ ์ปจํ
์ด๋๋ฅผ ์คํํ๋ ๋ฐ ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ด๋ฏ๋ก ์ด์จ๋ ํ๋์ ํ๋ก์ธ์ค ๋ง ์คํํฉ๋๋ค.
ํฌ๋ก์ค ํ๋ซํผ ์ง์ ๋ฌธ์ ๋ RUN์ด Dockerfile์์ Linux ๋ช
๋ น์ ์๋ฏธ ํ ํ์๊ฐ์๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก docker exec
ํตํด ๋ช
๋ น์ด ์์ ํ OS์ ๊ตฌ์ ๋ฐ์ง ์์ ์ ์์ผ๋ฏ๋ก ์ด์ ์ ํด๊ฒฐ๋์์ต๋๋ค.
https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-docker/manage-windows-dockerfile
onrun
๊ธฐ๋ฅ ๋๊ธฐ ์ค
์ด onrun
๊ธฐ๋ฅ๋ ํ์ํฉ๋๋ค.์ด ๋๊ตฌ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ด ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ์ด์ 2 ๊ฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ์งํด์ผํฉ๋๋ค.
์ฌ๋ฌ๋ถ,์ด docker-compose
๋ํผ๋ฅผ ๋ง๋ค๊ณ ์ด onrun
๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ์ด๋จ๊น์? ๋ํฌ๋ค์ ๊ทธ๊ฒ์ ์ฌ์ฉ ํ์๊ฒ ์ต๋๊น?
@wongjiahau ๋ https://github.com/docker/compose/issues/1809#issuecomment -348497289
@ reduardo7 ์, docker-composei
๋ผ๋ ์คํฌ๋ฆฝํธ์ onrun
์์ฑ์ ํฌํจํ๋ docker-composei.yml
๋ก ๋ํ ํ ์๊ฐ์ด์์ต๋๋ค.
Btw, docker-composei
๋ docker-compose improved
ํฉ๋๋ค.
์ค์ ์๋ฃจ์ ์ ์๋ง๋ ๋ด๋ถ์ ์ผ๋ก '์ฑ ์ด๋ฏธ์ง'(์๋ง๋ ๋์ปค๋ฅผ ์ฌ์ฉ)๋ฅผ ์คํํ๊ณ ๊ด๋ฆฌํ๋ (bash ์คํฌ๋ฆฝํธ๋ฅผ ํตํด) '์ค์ผ ์คํธ๋ ์ดํฐ'์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด "์ํ๋ ์์ ์ ์ํํ๊ธฐ์ํ ๊ฒ์ด ์๋"๋๊ตฌ์ ๋ํด ๋ ๋ง์ ๊ธฐ๋ฅ์ ํญ์ ์๊ตฌํ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ Docker ๋ด์์ Docker๋ฅผ ๊ณ ๋ คํด์ผํฉ๋๋ค.
์ด ์ ์ ๋ ๊ธฐ๋ฅ์ ๋ํ ์ง์์ ์ถ๊ฐํ๊ธฐ ์ํด. onrun์ ์๋ฏธ๊ฐ ์์ง๋ง ์ ์ฌ์ ์ธ ์ ํธ๋ฆฌํฐ์ ๋ฏธ๋์ ์ฆ๊ฑฐ๋ฅผ ์กฐ๊ธ ํ๋ํ๋ ค๋ฉด ๋๊ตฐ๊ฐ๊ฐ ๋ ๊ด๋ฒ์ํ 'onevent'์ํคํ ์ฒ๋ฅผ ์ดํด ๋ด์ผํ๋ฉฐ ๊ทธ์ค ํ๋๋ onrun์ ๋๋ค.
์ปจํ ์ด๋๊ฐ ์ปจํ ์ด๋ ๋น ํ๋์ ์๋น์ค๋ฅผ ์์ฒด ํฌํจํด์ผํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉํฅ์ ๊ณ ๋ คํ ๋ ์ปจํ ์ด๋๋ ์๋ ์ํฉ ์ธ์ ์ธก๋ฉด์์ ์์ฒด์ ์ผ๋ก ์ถฉ๋ถํด์ผํฉ๋๋ค. ์์ฑ ํ์ผ์์ ๋์ค๋ ๊ฒ์ ๋ณผํธ ์ฐ๊ฒฐ ์คํฌ๋ฆฝํธ๊ฐ ์๋๋ผ์ด๋ฅผ ์ ์ํ๋ ๋งค์ฒด๊ฐ๋์ด์ผํฉ๋๋ค. ๋น์ ์ด ์๊ธฐ ์ด๊ด์ ์ธ ์ด๊ด์๊ฐ ์๋๋ผ๋ฉด ๊ทธ๊ฒ์ ๋ํด ๋ ผ์ํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค.
์ ๊ฒฝ์ฐ์๋ redis ์ปจํ ์ด๋๊ฐ redis ์๋ฒ๊ฐ ์์๋ ํ lua ์คํฌ๋ฆฝํธ๋ฅผ๋ก๋ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๋น ์ปจํ ์ด๋ ํ๊ฒฝ์์๋ ์์ ํ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋๋ก systemd๋ฉ๋๋ค. ์์คํ ์ํคํ ์ฒ์ ๋จ์ํ๊ณ ์ผ๊ด์ฑ์ด ์์ต๋๋ค. ์ปจํ ์ด๋๊ฐ ์คํํ ์ปจํ ์คํธ๋ฅผ ์ค์ ํ๋ ์ญํ ์ ๊ณ ๋ คํ ๋ compose์ ๋ํด์๋ ์ ์ฌํ ์์น์ด ์กด์ฌํด์ผํฉ๋๋ค.
๋ฉ์ธํ ์ด๋์ ๋ํ ์ผ๋ฐ์ ์ธ ์กฐ์ธ์ผ๋ก ๊ฐ์ธ์ ์ ํธ๊ฐ ์๋ ์ ์ฆ ๋ ์ด์ ์์น์ ์ด์ ์ ๋ง์ถ์ญ์์ค.
๊ทธ๋์ ํด๊ฒฐ์ฑ ์ (์ด ๋ชจ๋ ์ค๋ ๋๋ฅผ ์ฝ์ ํ) bash ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์ํํ๋ ๊ฒ์ ๋๋ค.
thx dev๋ ๋น์ ์ ๋ฌผ๊ฑด์ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ ๋ง์ ๋ฃ๊ณ :)
๊ฐ๋จํ ์ ์ (์ : ์จ๋ฐ ์ด๋ฒคํธ)๊ณผ ์ธ์ฐ๋ ๋ ผ์ ๋ฐ ๋ฐ๋ก ์ด ํฌํจ ๋ ๋ฉ์์ง์ ์์ ๋ณด๋ฉด Github Issues๊ฐ _owners_ (ํ๋ก์ ํธ ๊ฐ๋ฐ์)๊ฐ ์ฌ์ฉ์ ํตํด ์์ ์ ์์์ ํ๋ช ํจ์ ๋ณด์ฌ์ฃผ๋ ๊ณณ์ผ๋ก ๋ฐ๋ ์๋ค๋ ์ฒซ ๋ฒ์งธ ์์งํ ์ธ์์ ์ฌ์ฉ์์ ์ง๋ฅ์ ์ธ ๊ธฐ์ฌ์ ๋ฐ๋ํ๋ ๊ทธ๋ค์ ์ง์๊ณผ ๊ธฐ์ ์ ์ธ ์๋ฅด๊ณค.
์ ๋ฐ, ์คํ ์์ค๋ฅผ ์ง์ ์ผ๋ก _open_ํฉ์๋ค.
์ด ๊ธฐ๋ฅ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ๋ฌด์์ด ๋ฌธ์ ์ ๋๊น?
@ v0lume ์ด ๊ธฐ์ฌ ์ ์ฒด์์ ์ค์ ๋ก ๋ต๋ณ์ ์ฝ๋ ๊ฒ์ ๊ท์ฐฎ๊ฒํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ์ ํ ํด๊ฒฐ์ฑ
์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค ... ๊ทธ๋๋ ํดํค ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ณต์ ํ๊ณ ์ถ์ต๋๋ค.
docker-compose.yml์์ ๋ฒ์ "2.1"์ ์ง์ ํ๋ฉด ์ํ ํ์ธ ํ
์คํธ๋ฅผ ๋จ์ฉํ์ฌ ์์๋ ๋ ์ด๋ฏธ์ง ๋ด์์ ์ถ๊ฐ ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. ๋ค์์ ๊ทธ ์์
๋๋ค.
version: '2.1'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:5.4.3
healthcheck:
test: |
curl -X PUT elasticsearch:9200/scheduled_actions -H "ContentType: application/json" -d '{"settings":{"index":{"number_of_shards":'1',"number_of_replicas":'0'}}}' &&
curl --silent --fail localhost:9200/_cat/health ||
exit 1
interval: 11s
timeout: 10s
retries: 3
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms1g -Xmx1g
- xpack.security.enabled=false
main:
image: alpine
depends_on:
elasticsearch:
condition: service_healthy
์์ฑํ healthcheck-test ์คํฌ๋ฆฝํธ๊ฐ ์ฝ๋> = 1๋ก ์ข
๋ฃ๋๋ฉด ์ฌ๋ฌ ๋ฒ ์คํ๋ ์ ์์ต๋๋ค.
์๋น์ค์ ์ํ ํ์ธ์ ๋ค๋ฅธ ์๋น์ค๊ฐ ์ฌ๊ธฐ์ ์์กดํ๊ณ ์์ ์ ํ์๋ ๊ฒ์ฒ๋ผ service_healthy
์กฐ๊ฑด์ ์ง์ ํ๋ ๊ฒฝ์ฐ์๋ง ์คํ๋ฉ๋๋ค.
๋๋ @ T-vK ์ ๊ทผ ๋ฐฉ์์ ์ข์ํ๊ณ ์ด์ ์ ์ฑ๊ณต์ ์ผ๋ก ์ฌ์ฉํ์ต๋๋ค. ํ์ง๋ง ๋ค๋ฅธ ํดํน์ ๊ณต์ ํ๊ณ ์ถ์ต๋๋ค.
# Run Docker container here
until echo | nc --send-only 127.0.0.1 <PORT_EXPOSED_BY_DOCKER>; do
echo "Waiting for <YOUR_DOCKER> to start..."
sleep 1
done
# Do your docker exec stuff here
+1
๊ธฐ๋ฅ์ด ํ์ํ๊ณ ์ด๋ฏธ kubernetes์ ๊ฐ์ ๋ค๋ฅธ ๋์ปค ์ค์ผ ์คํธ๋ ์ดํฐ์ ์ํด ๊ตฌํ ๋์๊ธฐ ๋๋ฌธ์ ๋๋ ์ด๊ฒ์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ์ด๋ฏธ ์ปจํ
์ด๋์ ๋ํ ๋ผ์ดํ ์ฌ์ดํด ํํฌ๊ฐ ์์ผ๋ฉฐ ์ฌ๊ธฐ ์ ๋ฌธ์ํ๋์ด
ํ์ง๋ง Dockerfiles๋ก ํด๊ฒฐํ ์์๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ ๊ณตํ๊ฒ ์ต๋๋ค.
๋ฐํ์์ ๋ณผ๋ฅจ์ ๋ง์ดํธํ๊ณ ์ด์ ์ ๋๋ ํ ๋ฆฌ์ ์ ํํ ์ด๋ฆ์ ๋ชฐ๋ผ๋ ์ปจํ ์ด๋์์ ๋ณผ๋ฅจ์ผ๋ก์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ง๋ค์ด์ผํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ฐฐํฌํ๋ ํ๊ฒฝ์ ๋ฐ๋ผ dir ์ด๋ฆ์ด ๋์ ์ด๋ผ๋ ๊ฒฝ์ฐ๊ฐ ์์๊ณ ๋ณ์๋ก ์ ๋ฌํ์ต๋๋ค.
๋ฌผ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ๋ฉฐ ๋ ์ด์์ด ์์ต๋๋ค. ๋ฐ๋ฉด์ ํํฌ๋ ํดํนํ๊ณ Dockerfile์ ๊ต์ฒดํ์ง ์๊ณ ๋ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์์๋ ์ ์ฐ์ฑ๊ณผ ๋ ๋์ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค. ๋๋ ๋ช ๋ ๋์ Docker์ Docker compose๋ฅผ ๊ฐ์ง๊ณ ๋์์ต๋๋ค. ์ด์ ์ง์งํ๊ฒ ์์คํ ํ์ฅ์ ์์ํ๋ ๋๊ตฌ๋ก ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ์ต๋๋ค. 1 ~ 2 ๋ ์ ํ ๋ฒ ํ์ธ ํ๊ฒ ์ง๋ง ํ๋ก์ ํธ ๊ด๋ฆฌ์์ ํ๋์ ๋ฐ๋ผ ์คํฌ๋ฆฝํธ ๋ ๋ค๋ฅธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด๋ฉ๋๋ค. ๋ง์ ์๊ฐ์ ํฌ์ํ์ง ์์์ ๊ธฐ์ฉ๋๋ค.
ํ๋ก ํ : ์ํฌ ํ๋ก๋ฅผ ์ด๋ฌํ ์ ํ์ ๋๊ตฌ๋ก ์ด๋ํ๊ธฐ ์์ํ ์ฌ๋์ด ์ด๋ฏธ ์ฌ๊ธฐ์ ์ค๋ช ๋ ๋ด์ฉ์ด ํ์ํ ๊ฒฝ์ฐ์ด๋ฅผ ๊ตฌ์ถํ๋ '์ด์ '์ ๋ํด ๋ค์ ์๊ฐํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์, ๋น์ ์ ์ฑ๊ณตํ์ต๋๋ค.ํ์ง๋ง ์ฌ๋๋ค์ด ์ ์ด์ ๊ทธ ๊ฒ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋น์ ์ ์๋ง๋ ๊ทธ๋ค์๊ฒ ํ์ํ ๊ฒ์ ์ค ์์๋ ๋งค์ฐ ๊ฐ๋ฐฉ์ ์ด์์ ๊ฒ์ ๋๋ค.
๋ชจ๋ ์ ์ผ ์ข๋ค.
์ด ๊ธฐ๋ฅ์ด ๊ตฌํ๋๋ฉด ๋ด๊ฐ ์ํ๋ ๊ฒ์ ๋ฌด์์ด๋ ์ค ์ ์์ต๋๋ค (๋ด ์ฌ์ ์น๊ตฌ ์ ์ธ). ๋๋ ๋ชจ๋ ์ฐ์ฃผ์์ ๊ฐ์ฅ ํ๋ณตํ ์ฌ๋์ด ๋ ๊ฒ์ ๋๋ค :)
์ด ์ ์ ๋ ๊ธฐ๋ฅ์ ๋ํ ์ง์์ ์ถ๊ฐํ๊ธฐ ์ํด. onrun์ ์๋ฏธ๊ฐ ์์ง๋ง ์ ์ฌ์ ์ธ ์ ํธ๋ฆฌํฐ์ ๋ฏธ๋์ ์ฆ๊ฑฐ๋ฅผ ์กฐ๊ธ ํ๋ํ๋ ค๋ฉด ๋๊ตฐ๊ฐ๊ฐ ๋ ๊ด๋ฒ์ํ 'onevent'์ํคํ ์ฒ๋ฅผ ์ดํด ๋ด์ผํ๋ฉฐ ๊ทธ์ค ํ๋๋ onrun์ ๋๋ค.
๊ทธ๊ฒ์ ์ข์ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ดํ์ญ์์ค.
services:
web:
image: node:8-alpine
depends_on:
- db
db:
image: postgres:alpine
onrun: "echo hi"
๊ต์ฐจ ์ด๋ฒคํธ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๋๋ฌด ๋ง์ต๋๊น?
web:
events:
db_onrun: "connectAndMigrate.sh"
์ ์๊ฐ์ ์ด๊ฒ์ docker-compose์ ์ถ๊ฐํ๋ ๊ฒ์ compose ํ์ผ ๋ฐ compose ์คํ์ ์ฌ์ฉํ๋ ๊ทํ๋ฟ๋ง ์๋๋ผ ํ์ ๋ค๋ฅธ ๊ฐ๋ฐ์์๊ฒ๋ ๊ฐ๋จํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ ๋ขฐํ ์์๋ ์ธ์ฆ์๋ฅผ ๊ฐ๋๋ก ๋ชจ๋ ํ๊ฒฝ์ mkcert
๋ฅผ ์ค์นํ๊ณ ๊ตฌ์ฑํด์ผํฉ๋๋ค. ์คํ
์ด์ง / ํ๋ก๋์
์์ ํ์ํ์ง ์์ผ๋ฏ๋ก ์ปจํ
์ด๋ ๋๋ Dockerfile์ ์ผ๋ถ๊ฐ ์๋๋๋ค. ๋๊ตฌ๋ฅผ ์ค์นํ๋ ์ ์ ํ ์ ๊ทผ ๋ฐฉ๋ฒ์ ๋ฌด์์ด๋ฉฐ compose ํ์ผ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ๋์ ๋ค์์ ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๊ณ ์๋์ง ์ ํ ์์ง ๋ชปํฉ๋๋ค.
๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก ์ถ๊ฐ :
์๋ ํ๋ ์ค ์ธ์คํด์ค๊ฐ ํ์ํ์ต๋๋ค. ๋ด docker-compose.yaml์ ์์ฑํ์ต๋๋ค. docker-compose up
โ ์ฃ์กํฉ๋๋ค! ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ์ ํ์ผ ๊ถํ์ ์ค์ ํด์ผํฉ๋๋ค ... ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค. ์ปจํ
์ด๋๊ฐ ์คํ ๋ ํ ๊ถํ์ ์ค์ ํด์ผํฉ๋๋ค. ํธ์คํธ์์ ์ผ๋ถ ํ์ผ์ ๋ฐ์ธ๋ฉํ๊ณ ์๊ณ ์ ์ผํ ๋ฐฉ๋ฒ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. fs ๊ถํ์ ์์ ํ๋ ค๋ฉด ์ปจํ
์ด๋ ๋ด๋ถ์์ chown -Rf www-data.www-data /var/www/wp-content
์ ์ํํฉ๋๋ค. ๋ด ์์ ์ Dockerfile์ ์์ฑํ๊ณ ๋น๋ํ์ญ์์ค. ์ ์๊ฒ๋ ์ด๋ฆฌ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋คํํ๋ ์์ ์ ๊ณต๋ healthcheck
ํดํน์ ํตํด์ด๋ฅผ ๊ตฌํํ ์์์์ต๋๋ค. ๋์ปค ๋ณผ๋ฅจ์ ๋ํ ์ค์ ๊ถํ ๋ฌธ์ ์ ๋ํด ์น์์ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋ณผ ์ ์์ง๋ง ์ ์ ๋ ์๋ฃจ์
์ด ์๋ํ์ง ์์์ต๋๋ค.
์ด ๊ฒ์ดํธ ํคํผ @dnephin , @aanand , @ shin-์ด์ด๋ฅผ ์ํด ์์ฒญ๋ ์ด์ ๋ฐ๊ณ ์๋ค๋ ๊ฒ์ ์๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค. ์ ์ฒด ์ปค๋ฎค๋ํฐ๊ฐ ๊ฐ๋ฅํ ํ ํฐ ์๋ฆฌ๋ก ๋น๋ช
์ ์ง๋ฅด๊ณ ํต์ฌ ๊ฐ๋ฐ์๊ฐ ์๋ฆฌ๋ฅผ ์ก๊ณ ์๋ฆฌ๋ฅผ ์ก๊ณ ๋ฃ์ง ์์ ๋ ์ ๋ง ํฐ ์๋ฆฌ๋ฅผ๋
๋๋ค. ๋๋ฌด ์ผ๋ฐ์ ์
๋๋ค. ์ข์์์ ์๋ฟ๋ง ์๋๋ผ ์ด๊ฒ์ด ํ์ํ๋ค๊ณ ๋ตํ 34 ๋ช
์ ์ฌ์ฉ์๋ ์ธ์ด ๋ณด๊ฒ ์ต๋๋ค.
01) sshishov
02) ํ์ค ์ฝ๋ฐ
03) sandor11
04) ์น ๊ธฐ๋ฐ
05) v0lume
06) ์น ํด๋ฆฌ์ค
07) ์ค์ปฌ ์ค๋ค
08) usergoodvery
09) ์ก์ ํ์ฐ
10) MFQ
11) ์์ธ ํ๋ก
12) ๋ฐฐ๊ฑฐ ๋งจ
13) daqSam
14) ์ค ๋ฉ์ด๋
15) ๋จํ
๋ฐ๋ฅด๋ฐ
16) ์๋ฆฌ ์
17) SharpEdgeMarshall
18) ๋ถ์ค ์บ๋ฆฌ์ด
19) ์ ๋ น
20) ๋ก๋๋ฆฌ๊ณ ๋ก๋๋ฆฌ๊ฒ์ค ์ฝ์คํ
21) ๋ฐ์ดํฐ ์ ํ
22) ๋ฑ์ค ํ
๋ธ
23) ๋ ํฌ ๋์ค
24) ๋ฃจ์ค ๋์
25) rav84
26) ๋ํ ๋ฆฌ
27) ์๋ฉง ํฌ ๋ฏธ๋ฅด
28) montera82
29) Discordianfish
30) jasonrhaas
31) ํ๋ผ๋ฆฌ ์ค
32) ํ์ดํผ ๊ธฑ
33) ์์ฐ
34) ์คํด ๋ธ
๊ทธ๋ฆฌ๊ณ ๊ฑฐ์ ํ ๋ฒํธ๋? ๋ฌด๋ ค 3 :
01) ๋๋ค ํ
02) ์๋๋
03) ์ -
์ ... 34 ~ 3 ...
@ rm-rf-etc ์ข์ ๋ถ์ ... @dnephin ๋๋ @aanand ๊ฐ ๋ ์ด์ docker-compose ์์ ์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด์ด ์ข์ผ๋ฉด Docker๋ ์คํ์ ์ํด compose๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ณํ์ด๋ฉฐ ์ฌ๊ธฐ์ ๋ถ๋ง์ ์ ๊ธฐ ํ ํ์ด ๋จ์ ์์ง ์์ผ๋ฉฐ ์ ํ์ ๋ํ ํฅํ ์งํ ์ํฉ์ ๋ค์๋ณด๊ธฐ ์์ํ ๊ฒ์ ๋๋ค.
๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก ์ถ๊ฐ :
์๋ ํ๋ ์ค ์ธ์คํด์ค๊ฐ ํ์ํ์ต๋๋ค. ๋ด docker-compose.yaml์ ์์ฑํ์ต๋๋ค.
docker-compose up
โ ์ฃ์กํฉ๋๋ค! ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ์ ํ์ผ ๊ถํ์ ์ค์ ํด์ผํฉ๋๋ค ... ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค. ์ปจํ ์ด๋๊ฐ ์คํ ๋ ํ ๊ถํ์ ์ค์ ํด์ผํฉ๋๋ค. ํธ์คํธ์์ ์ผ๋ถ ํ์ผ์ ๋ฐ์ธ๋ฉํ๊ณ ์๊ณ ์ ์ผํ ๋ฐฉ๋ฒ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. fs ๊ถํ์ ์์ ํ๋ ค๋ฉด ์ปจํ ์ด๋ ๋ด๋ถ์์chown -Rf www-data.www-data /var/www/wp-content
์ ์ํํฉ๋๋ค.
์ด ๊ฒฝ์ฐ Compose ํ์ผ์์ user
์์ฑ ์
๋ด ์์ ์ Dockerfile์ ์์ฑํ๊ณ ๋น๋ํ์ญ์์ค. ์ ์๊ฒ๋ ์ด๋ฆฌ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐํ ์๊ฒฌ์ ๋ด๋์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ค์ ์ผ๋ก ํ์์ ๋ง๊ฒ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ฅผ ์์ ํ๊ธฐ ์ํด Dockerfile์ ์์ฑํ๋ ๊ฒ์ ๋ํด "์ด๋ฆฌ์์"๊ฒ์ ์์ต๋๋ค. ์ด๊ฒ์ด ๋ชจ๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง์ ์๋ ์๋์ ๋๋ค.
๋คํํ๋ ์์ ์ ๊ณต๋
healthcheck
ํดํน์ ํตํด์ด๋ฅผ ๊ตฌํํ ์์์์ต๋๋ค. ๋์ปค ๋ณผ๋ฅจ์ ๋ํ ์ค์ ๊ถํ ๋ฌธ์ ์ ๋ํด ์น์์ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋ณผ ์ ์์ง๋ง ์ ์ ๋ ์๋ฃจ์ ์ด ์๋ํ์ง ์์์ต๋๋ค.์ด ๊ฒ์ดํธ ํคํผ @dnephin , @aanand , @ shin-์ด์ด๋ฅผ ์ํด ์์ฒญ๋ ์ด์ ๋ฐ๊ณ ์๋ค๋ ๊ฒ์ ์๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค.
๊ทธ๋, ์ข์ ํ๋ ์น๊ตฌ. :๋
@ rm-rf-etc ์ข์ ๋ถ์ ... @dnephin ๋๋ @aanand ๊ฐ ๋ ์ด์ docker-compose ์์ ์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์, ์ด์ ๋ช ๋ ์ด ์ง๋ฌ์ต๋๋ค. ์ค๋๋ ๋ฌธ์ ์ ๋ํด ๊ณ์ ํํ ํ์๊ฐ ์์ต๋๋ค.
์ด์ด ์ข์ผ๋ฉด Docker๋ ์คํ์ ์ํด compose๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ณํ์ด๋ฉฐ ์ฌ๊ธฐ์ ๋ถ๋ง์ ์ ๊ธฐ ํ ํ์ด ๋จ์ ์์ง ์์ผ๋ฉฐ ์ ํ์ ๋ํ ํฅํ ์งํ ์ํฉ์ ๋ค์๋ณด๊ธฐ ์์ํ ๊ฒ์ ๋๋ค.
๐
@ shin-ํ์ง๋ง ๋น์ ์ ๊ทธ ์๋ต์ผ๋ก ๊ทธ๊ฒ์ ํํ์ต๋๋ค.
์ต๊ทผ ์์ด ๋ฌธ์ ๊ฐ ๋ค์ ๋ฐ์ํ์ผ๋ฉฐ ๋ด ํด๊ฒฐ ๋ฐฉ๋ฒ ์์ ๋ณผ ์ ์๋ฏ์ด ์ํ ํ ์ ์์ง๋ง 2.1์ ์ง์ ํ๋ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค.
๋ชจ๋ ๊ฒ์ ๋ํด ๊ณ ์ ํ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด์ผํ๋ค๋ ๊ณต์ ์
์ฅ์ด ๋์๊ฒ๋ ๋๋์ต๋๋ค.
๋์๊ฒ ์ด๊ฒ์ ๋ฌธ์ ๊ทธ๋๋ก "์ด๋ค ํ๋ก๊ทธ๋จ์์ ์ค์ ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ์์ค ์ฝ๋๋ฅผ ์์ ํ๊ณ ๋ค์ ์ปดํ์ผํด์ผํฉ๋๋ค."๋ผ๊ณ ๋งํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
์ ์๋น์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ MongoDB ๋๋ MySQL Docker ์ด๋ฏธ์ง์ ๊ฐ์ ..์ ์ ๋ฒ์ ์ผ๋ก ์
๊ทธ๋ ์ด๋ ํ ๋๋ง๋ค ์ Dockerfile์ ๋ง๋ค๊ณ ๋น๋ ํ ๋ค์ ์ ์ฌ์ ์ผ๋ก ๋ ์ง์คํธ๋ฆฌ์ ํธ์ํด์ผํฉ๋๋ค.
์ด๋ docker-compose.yml์์ image: mongo:3.0.2
๋ฅผ image: mongo:3.0.3
๋ก ๋ณ๊ฒฝํ ์์๋ ๋ฐฉ๋ฒ์ ๋นํด ์์ฒญ๋ ์๊ฐ๊ณผ ๋ฆฌ์์ค ๋ญ๋น์
๋๋ค.
๋๋ ๊ธด ๋น๋ ์๊ฐ์ ๋ํด ์ธ์น๋ ๊ฒ์ด ์๋๋ผ ์ ์ฌ์ ์ผ๋ก ๊ท ๋ฑํ์ง ์์ ์๋น์ค์ ๋งค๊ฐ ๋ณ์๋ฅผ ์
๋ฐ์ดํธํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ํ ๋ Dockerfiles ๋ฐ docker build
๋ก ๊ท์ฐฎ๊ฒํด์ผํ๋ค๋ ์ฌ์ค์ ๋ํด ์ธ์น๊ณ ์์ต๋๋ค. ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ํ ๊ฐ์ง ์ผ๋ง ์ํํด์ผํ๋ค๋ ์ฃผ์ฅ๋ ์ ๋ง ์
์ทจ๊ฐ๋ฉ๋๋ค. ์ด๊ฒ์ ์์ ํ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ด ์๋๋ผ docker
ํตํด ๋ค๋ฅธ ๋งค๊ฐ ๋ณ์๋ฅผ ์ ๋ฌํ๋ ๊ฒ์
๋๋ค. ๋ํ docker run
, docker build
, docker exec
, docker pull
๋ฑ์ด ๋ชจ๋ ๋์ผํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ผ๋ถ์ธ ์ด์ ์ ๋ํด์๋ ์ง๋ฌธํฉ๋๋ค. ๋
ผ์์ด ์ง๊ธ์ ์์ ์ ์ผ๋ก ๋ค๋ฆฌ์ง ์์ต๋๊น?
@ shin-, ๋๋ ๋น์ ์ ๋งํฌ๋ฅผ ๋ฐ๋ผ ๊ฐ๊ณ ์ฌ์ฉ์ ์์ฑ์ด ๋ฐ์ธ๋ ๋ง์ดํธ ๋๋ ํ ๋ฆฌ์ ์์ ์๋ฅผ ์ค์ ํ๋ ๊ฒ๊ณผ ์ด๋ค ๊ด๋ จ์ด ์๋์ง ์์ง ๋ชปํฉ๋๋ค. ํฌํธ์ ๊ด๋ จ๋ ๊ฒ ๊ฐ์ต๋๋ค.
Re : ํ๋ : ์ฌ๋๋ค์ด ์ ์๊ฒ ๋์ํ๋ ๊ฒ ๊ฐ์ผ๋ ๊ฐ๋ ฅํ ํผ๋๋ฐฑ์ผ๋ก ๋ฐ์๋ค์ด์ธ์. ๋ด๊ฐ ์ด๊ฒ์ ํํํ๋ ๋ฐฉ์์ด ๋ง์์ ๋ค์ง ์์ผ๋ฉด ๋ฏธ์ํ์ง๋ง ์ฌ์ฉ์์ ์๊ตฌ๊ฐ ๋ฌด์๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ค๋ฅธ ๋ฌด์์ ๊ธฐ๋ํ์ญ๋๊น?
๋๋ onrun๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ธฐ๋ํ๋ฉฐ ์ฌ๊ธฐ์ ์์ต๋๋ค. compose๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ดํ ๋ฐ์ ๊ฑธ๋ฆฌ์ง ์์๊ณ ์ด์ ๊ฐ์ ๋๊ตฌ๊ฐ์ด ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ด์ผํ๊ธฐ ๋๋ฌธ์ ์ ์๋์์ต๋๋ค.
๋ด ๋์ปค ํ์ผ๋ก ๋์๊ฐ ๊ธฐ๋ฅ์ ๋ํ ๋ณ๋์ ์คํฌ๋ฆฝํธ๋ก ๊ฐ๊ฐ์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ์ค๋ณต๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ๋ค๋ฅธ ์ปจํ ์ด๋์ ํ ํฐ์ ์ด์ ์ ๋ด dockerfile์ด ์ ์ฐํ๋ ํ๊ฒฝ ๋ณ์์ ์ฃผ์ ํ๊ณ ์ถ์๋ฟ์ ๋๋ค. ์ด์ ๊ฐ๋จํ ๋ชฉ์ ์ ์ํด docker-composer.yml ๋ฐ ์๋ฃจ์ ๊ณผ ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋ฉ๋๋ค.
์ ์ฅ, ๋๋ "์ข์, ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด ๋ฉ์ง๋ค๋ ๊ฒ์ ๋ง์นจ๋ด ๊นจ๋ฌ์๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ตฌํํ ๊ฒ์ด๋ค"๋ผ๋ ๋ต์ ์ฐพ๊ธฐ ์ํด ์ ์ฒด ์ค๋ ๋๋ฅผ ์ฝ์๋ค. ์ด๊ฒ์ด ์์ผ๋ก ๋์ ๊ฐ์ง ์์ ๊ฒ์๋ณด๊ณ ์ฌํ๋ค.
์จ๋ฐ์ +1!
@fabiomolinar , ์ฐ๋ฆฌ๊ฐ ์์ฐ ๋ฌด๋ฆฌ์์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํ๋ ํ ๊ฐ์ง ์ข ๋ฅ์ ์๋ฃจ์ ์ด ์์ง๋ง ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ ๊ฒ๋ง ํผ ์ข์ง๋ ์์ต๋๋ค.
๋ค์ ์ต์ปค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
#### configure a service to run only a single instance until success
x-task: &task
# for docker stack (not supported by compose)
deploy:
restart_policy:
condition: on-failure
replicas: 1
# for compose (not supported by stack)
restart: on-failure
์ฑ๊ณตํ ๋๊น์ง ์์ ์ ๋ฐ๋ณตํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฉฑ๋ฑ ํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง ๋ง์ด๊ทธ๋ ์ด์ ๋ฐ ์ค์ ์์ ์์ํ ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ณ ๋ก์ปฌ ์์ฑ ๋ฐ ์คํ์์ ์ด์ ๊ฐ์ด ์คํํฉ๋๋ค.
์์ ์ ์์กดํ๋ ์๋น์ค๋ ๊ตฌ์ฑ ์์ ์ด ์๋ฃ๋์ง ์์ ๊ฒฝ์ฐ ๋ค์ ์ ์์ ์ผ๋ก ์คํจํด์ผํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ต์ข ์ฌ์ฉ์์๊ฒ ๋ช ๊ฐ์ง ์ค๋ฅ๊ฐ ๋ฐ์ํด๋ ๊ด์ฐฎ๋ค๋ฉด ๋๋ถ๋ถ์ ํ๊ฒฝ์์ ์ ์๋ํ๋ ์ต์ข ์ผ๊ด์ฑ์ ์ป์ ์ ์์ต๋๋ค.
๋ํ ์๋น์ค ์ปจํ ์ด๋๊ฐ ์์ ์๋ฃ ์ ํ ์ํ ๋ชจ๋์์ ์๋ ํ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ ๊ฐ์ ์ฌ์ฉ ์ฌ๋ก์์ ์ข ์ ์๋น์ค๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์ ํ ์คํค๋ง ๋ชจ๋์์ ์๋ ํ ์ ์์ด์ผํฉ๋๋ค. ๋ถ๋ช ํ ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ์กฐ์ ์ ๋ํด ๋ช ๊ฐ์ง ์๊ฐ์ํด์ผํ์ง๋ง ์ด๋ ์ผ๋ฐ์ ์ธ ์ฌ์ค์ ๋๋ค. ์๋น์ค์ ๋กค๋ง ์ ๋ฐ์ดํธ ์ํ.
@fabiomolinar , ๋ค์์ ์์ฑ ์๋น์ค์์์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์ ๋๋ค ...
#### configure a service to run only a single instance until success
x-task: &task
# for docker stack (not supported by compose)
deploy:
restart_policy:
condition: on-failure
replicas: 1
# for compose (not supported by stack)
restart: on-failure
#### configure a service to always restart
x-service: &service
# for docker stack (not supported by compose)
deploy:
restart_policy:
condition: any
# for compose (not supported by stack)
restart: always
services:
accounts: &accounts
<<: *service
image: internal/django
ports:
- "9000"
networks:
- service
environment:
DATABASE_URL: "postgres://postgres-master:5432/accounts"
REDIS_URL: "hiredis://redis:6379/"
accounts-migrate:
<<: *accounts
<<: *task
command: ./manage.py migrate --noinput
@dopry๋ฅผ ์ง์ ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ํ์ง๋ง ์ ๊ฒฝ์ฐ๋ ์ข ๋ ๊ฐ๋จํ์ต๋๋ค. ์๋ฒ๋ฅผ ์คํํ๊ณ ์คํ ํ ํ์์ผ ๋ช ๊ฐ์ง ๋ฐฐํฌ ์์
์ ์ํํด์ผํ์ต๋๋ค. ์ค๋ ์ ๋ ๋จ์ผ CMD
๋ผ์ธ ๋ด์์ ์๊ท๋ชจ ํ๋ก์ธ์ค ๊ด๋ฆฌ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. ์๋ฒ ๋ฐ ๋ฐฐํฌ ํ๋ก์ธ์ค๊ฐ ๊ฐ๊ฐ server
๋ฐ deploy
ํด๋ณด์ญ์์ค. ๊ทธ๋ฐ ๋ค์ ๋ค์์ ์ฌ์ฉํ์ต๋๋ค.
CMD set -m; server $ deploy && fg server
์์ ์ค์ bash์ ๋ชจ๋ํฐ ๋ชจ๋๋ฅผ ์ค์ ํ ๋ค์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ server
ํ๋ก์ธ์ค๋ฅผ ์์ํ ๋ค์ deploy
ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ณ ๋ง์ง๋ง์ผ๋ก server
ํ๋ก์ธ์ค๋ฅผ Docker
๊ฐ ์ปจํ
์ด๋๋ฅผ ์ฃฝ์ด๋ ๊ฒ์ ํผํ๊ธฐ ์ํด ๋ค์ ํฌ ๊ทธ๋ผ์ด๋๋ฅผ ๋ง๋ญ๋๋ค.
์ด์ ๋ํด ๋
ผ์ํ๋ ๋์ ๋๊ตฌ๋ docker-compose up
์คํ์ ์ปจํ
์ด๋ ๋๋ ํธ์คํธ์์ ๋ช
๋ น์ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํ์ด ์์ต๋๋ค.
ํธ์คํธ์์ ๋ช
๋ น์ ์คํํ๋ฉด ๋ณด์ ๊ณ์ธต์ด ์์๋๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง ์ปจํ
์ด๋ ์์ ์ ์ด๋ ์์ ์ค์ ๋๋ ํฐ๋ฆฌ๋ฅผ rm
ํ๊ณ ์ถ์ต๋๋ค. ๋๋ ํ ๋ฆฌ๋ ํธ์คํธ์ ์ปจํ
์ด๋ ๋ชจ๋์์ ์ก์ธ์ค ํ ์ ์์ต๋๋ค. ๋๋ ์ ์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ฒ์ํ๋ ์คํฌ๋ฆฝํธ ์ถ์ง ์์์ rm
๋ค์ ์คํ docker-compose
.
๊ฐ์ฌ!
@fabiomolinar , ๊ทํ๊ฐ ์ ์ํ ์ ๊ทผ ๋ฐฉ์์ ๋ช ๊ฐ์ง 12 ์์ ์ฑ ์ฃผ์ฒด๋ฅผ ์๋ฐํฉ๋๋ค. ์ธํ๋ผ๋ฅผ ์ปจํ ์ด๋ํํ๋ ๊ฒฝ์ฐ ํด๋น ์ธํ๋ผ๋ฅผ ์๊ฒฉํ๊ฒ ์ค์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ๊ทผ ๋ฐฉ์์์ ๋ฐ์ํ ์์๋ ๋ช ๊ฐ์ง ๋ฌธ์
์ฒ์์๋ ๋ด๊ฐ ์ถ์ฒํ๋ ์ ๊ทผ ๋ฐฉ์์ด ๋ฐ ์ง๊ด์ ์ด๋ผ๋ ๊ฒ์ ์์์ต๋๋ค. docker-compose, docker swarms ๋ฐ mesos / marathon ํด๋ฌ์คํฐ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ค์ ๋ก ์ ์๋ํ์ต๋๋ค. ๋ํ 'onrun'๋ถ์กฑ์ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ์ต๋๋ค.
๋ด๊ฐ ์ฌ์ฉํ ์ ๊ทผ ๋ฐฉ์์ ์ค์ ๋ก ๋งค์ฐ ์ถํฉ๋๋ค. ๋ด ๊ฐ๋ฐ ํ๊ฒฝ์ ์คํํ๊ธฐ ์ํด ์ ์ ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ฒ๊ฐ ๊ฐ๋๋๊ณ ์คํ ๋ ํ ์์์ ์คํฌ๋ฆฝํธ์ at
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋๋ก ์ด๋ฏธ ๋ณ๊ฒฝํ์ต๋๋ค. ์ด์ ๋ด ์ปจํ
์ด๋๊ฐ PID 1๋ก ์ฌ๋ฐ๋ฅธ ํ๋ก์ธ์ค๋ก ์คํ๋๊ณ ๋ชจ๋ ์ ํธ์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ตํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ด๊ฒ์ด ํ์ํฉ๋๋ค. ์ปจํ ์ด๋๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์์ํ ํ ์ฌ๋ฌ Makefile์์ ๋ง๋ค์ง ์๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋กค์ ์ ์คํํ ์์๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.
@ victor-perov๋ ๋กค์ ์์ ์์ํ ๋ค๋ฅธ ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ณ ๋ณ๋์ ์๋น์ค๋ก ์คํํฉ๋๋ค.
๋ค์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์ ์คํํ๋ ํ์คํฌ ์๋น์ค๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ๋ก์ ํธ ์ค ํ๋์ ์ผ๋ถ ์ค ๋ํซ์ ๋๋ค.
x-task: &task
# run once deploy policy for tasks
deploy:
restart_policy:
condition: none
replicas: 1
service:
automata-auth-migrate:
<<: *automata-auth
<<: *task
# without the sleep it can't lookup the host postgres. maybe the command is ran before the network set is complete.
command: sleep 5 && python /code/manage.py migrate --noinput
์, ์ด๋ฒ์ด์ด ๋
ผ์๊ฐ ํ์ฅ ๋ 4 ๋
์ฐจ์
๋๋ค. onrun
๊ฐ ํ์ํ์ด ์ฌ์ฉ ์ฌ๋ก์ +1์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค. ์ถ์ : ์ ์ฒด ์ค์ ํ์ฝ์ ์ฌ์ผ ํ์ด์.
๋๋ onrun
๋๋ ์ด์ ์์ํ๋ ๊ฒ (ํฌ์คํธ ๋ฐ?)์ด ํ์๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ํผ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๊ณ ์ปจํ
์ด๋์ docker exec๋ฅผ ์ํํ๋ ๊ฒ์ ๋จ์ง ... ์ถํฉ๋๋ค.
IMO docker compose๋ ์ปจํ ์ด๋ ๊ด๋ฆฌ๊ฐ ์ฌ์ธ ์ ์์์ ์ฌ๋๋ค์๊ฒ ํ์ ์ํค๋ ํ๋ฅญํ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ MVP์์ต๋๋ค. ์๋ง๋ ์ฐ๋ฆฌ ์ปค๋ฎค๋ํฐ๋ ํ๋ก๋์ ์ค๋น ์ค์ผ์คํธ๋ ์ด์ ์๋ฃจ์ (์ : kubernetes)์ด ํ์ฐ๋จ์ ๋ฐ๋ผ "์ ์ง ๊ด๋ฆฌ ๋ชจ๋"๋ก ๊ฐ์ฃผํด์ผํฉ๋๋ค. ์ปจํ ์ด๋ ์ข ์์ฑ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด "์ปจํ ์ด๋๊ฐ ๊ฐ๋ ๋ ํ์ด ์์ ์ ์คํ"๊ณผ ๊ฐ์ ๋ถ์ฌ ๊ธฐ๋ฅ๊ณผ ๊ฒฐํฉ ๋ ๊ฒฝ์ฐ ๊ฐ๋ฐ ์๋๊ฐ ๋จ์ํ ์ ์ฒด ์ํ์ ์๋ค๋ ์ด์ผ๊ธฐ์ ๋ถํฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ์ด๋์ด ๊ธฐ๋ฅ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ด์ผํ๋ค๋ ๊ฒ์ ๋ถ๋ช ํ์ง ์์ต๋๋ค.
Dockerfile๋ก ๋ชจ๋ ๊ฒ์ ์ฝ๊ฒ ํ ์๋ ์์ต๋๋ค. ์ปจํ
์ด๋์ ์์ฒด ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์๋ฅผ ๋ค์ด mysql
์ปจํ
์ด๋๋ฅผ ๊ฐ์ ธ ์์ ์ด๋ฒคํธ ๋ฐ์์ API๋ฅผ ํธ์ถํ๋ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํด๋ณด์ญ์์ค.
๋ค์ ์ค ํ๋๋ฅผ ์ํ ํ ์ ์์ต๋๋ค.
Dockerfile
๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ง์
์ ์์ ์ปจํ
์ด๋์ ์์ฒด ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋น์ ์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค CMD
์ Dockerfile
๊ฐ์ ์ธ์ ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ENTRYPOINT
.docker cp
, docker exec
].๊ทธ๋์ Dockerfile์ ๋ณ๊ฒฝํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์๊ธฐ ๋๋ฌธ์ onrun
์ ๊ฐ์ ๊ธฐ๋ฅ์ด ์ ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋คํ, ์ ์ด๊ฒ์ด ๋ซํ ์์ต๋๊น? Cassandra์ ๊ฐ์ ๊ณต์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ ํ ์คํค๋ง๋ฅผ๋ก๋ํด์ผ ํ ๋ ์ํฉ์ ๊ณ ๋ คํ์ญ์์ค.์ด๋ฅผ ์ํด ์์ฒด bash ์คํฌ๋ฆฝํธ ์๋ฃจ์ ์ ๊ตฌํํด์ผํฉ๋๋ค.
@somebi ๋ compose๊ฐ ๋ซํ ๊ฒ ๊ฐ์ต๋๋ค ...
2 ์ผํธ ๋ง : ํ์ฌ ์ปจํ
์ด๋๋ฅผ ์์ํ ๋๋ง๋ค Apache ๋ชจ๋์ ์๋์ผ๋ก ํ์ฑํํด์ผํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ์์ต๋๋ค (SSL์ ๊ธฐ๋ณธ์ ์ผ๋ก Docker Hub wordpress
์ด๋ฏธ์ง์์ ํ์ฑํ๋์ง ์์). ์ธ์์ ๋์ ์๋์ง๋ง, ์ฌ๋ผ๊ฐ ๋๋ง๋ค ๋ช ๊ฐ์ง ๋ช
๋ น์ ์คํํ๊ธฐ๋ฅผ ๋ฐ๋ผ๊ณ ์์๊ธฐ ๋๋ฌธ์ ๊ฐํํ์ง ์๊ณ ๋ ์ปจํ
์ด๋๋ฅผ ์ํํ๊ฒ ์์๋๋ก ๊ฐ์ ธ๊ฐ ์ ์์ต๋๋ค.
2 ์ผํธ ๋ง : ํ์ฌ ์ปจํ ์ด๋๋ฅผ ์์ํ ๋๋ง๋ค Apache ๋ชจ๋์ ์๋์ผ๋ก ํ์ฑํํด์ผํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ์์ต๋๋ค (SSL์ ๊ธฐ๋ณธ์ ์ผ๋ก Docker Hub
wordpress
์ด๋ฏธ์ง์์ ํ์ฑํ๋์ง ์์). ์ธ์์ ๋์ ์๋์ง๋ง, ์ฌ๋ผ๊ฐ ๋๋ง๋ค ๋ช ๊ฐ์ง ๋ช ๋ น์ ์คํํ๊ธฐ๋ฅผ ๋ฐ๋ผ๊ณ ์์๊ธฐ ๋๋ฌธ์ ๊ฐํํ์ง ์๊ณ ๋ ์ปจํ ์ด๋๋ฅผ ์ํํ๊ฒ ์์๋๋ก ๊ฐ์ ธ๊ฐ ์ ์์ต๋๋ค.
ํ์ํ ๋ชจ๋์ด ํ์ฑํ ๋ wordpress ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ฉด์ด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋์ Dockerfile์ ์ฌ์ฉํ์ญ์์ค.
FROM wordpress:php7.1
RUN a2enmod ssl
๋ ๋ค๋ฅธ ํด๊ฒฐ์ฑ ์ ์๋ ํ๋ ์ค Dockerfile์ ๋ค์ด๋ก๋ํ๊ณ ๊ทธ ์์ ๋ชจ๋ ํ์ฑํ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ Docker ๋น๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ์ญ์์ค. ์๋ฅผ ๋ค์ด ์ด๊ฒ์ PHP 7.1์ ์ฌ์ฉํ๋ wordpress 5.2 ์ฉ Dockerfile์ ๋๋ค.
์๋ ํ๋ ์ค ๋์ปค ํ์ผ
63 ํ์์ ๋ ๋ง์ ๋ชจ๋์ ํ์ฑํํ๊ฑฐ๋ ssl ์์ฑ์ ์คํํ ์ ์์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ๋ ผ์ํ๊ณ ์๋ค๊ณ ์๊ฐํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋๋ค. ๋ฌธ์ ๋ ์์๋ ๋์ ๊ฐ์ด ์ปจํ ์ด๋ ์๋ช ์ฃผ๊ธฐ์์ ๋์ ํํฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ docker-compose์ ์ข์ ์ถ๊ฐ๊ฐ ๋ ๊ฒ์ ๋๋ค!
์ด ์ค๋ ๋์์๋ ๊ฒ๊ณผ ๊ฐ์ ๋ต๋ณ์ Kubernetes๊ฐ Docker (๊ธฐ์ )๊ฐ ์์ฐํ๋ "๋ชจ๋ " ๋์ ์ ์งํ๋ ์ด์ ์ด๋ฉฐ ๋๊ตฐ๊ฐ๊ฐ ๊ณง Docker (ํ์ฌ)๋ฅผ ๊ตฌ๋งคํ๊ณ ์ปค๋ฎค๋ํฐ ์ ์ / ์์ฒญ์ ํ์ํ๋ ๋ฐฉ์์ ๋ณ๊ฒฝํ๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๊ฒ์ ๋์ ์ผ์ด ์๋๋๋ค. / ๋ถ์ ๋จ ...
์ด ์ค๋ ๋์์๋ ๋ต๋ณ๊ณผ ๊ฐ์ ๋ต๋ณ์ Kubernetes๊ฐ Docker (๊ธฐ์ )๊ฐ ์์ฐํ๋ _ "๋ชจ๋ "_์ ์ ์งํ๋ ์ด์ ์ด๋ฉฐ, ๋๊ตฐ๊ฐ๊ฐ ๊ณง Docker (ํ์ฌ)๋ฅผ ๊ตฌ๋งคํ๊ณ ์ปค๋ฎค๋ํฐ ์ ์ / ์์ฒญ ๋ฐฉ์์ ๋ณ๊ฒฝํ๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๊ฒ์ ๋์ ์ผ์ด ์๋๋๋ค. ํ์ / ๋ถ์ ...
๋๋ ๋ชจ์์ ์ธ ๋ฐ์ธ์์ด ๋น์ทํ ๋นํ์ ์ผ๋ค. (๊ทธ๊ฒ์ ์ ์ง ์๋ค์ด ์ผ๋ง๋ ๋ง์ ๊ธฐ์ ์ ์ธ ์๋ฅด๊ณค์ ๊ฐ์ง๊ณ ์๋์ง ๋ณด์ฌ์ฃผ๋ ๊ฒ ์ธ์ ๋ค๋ฅธ ์ด์ ์์ด ๋ ผ์์ ๋ฌด์ํ๋ _ ์คํ ์์ค๊ฐ ์๋ _ ์คํ ์์ค ํ๋ก์ ํธ์ ๋ผ์ธ์ ๋ฐ๋ผ ์์๋ค.) , ๋ฉ์์ง๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค.
์ด๊ฒ์ ์ด๋ค ์ข ๋ฅ์ ์ค๋งํ ์ฌ๋๋ค์ด ์ด๊ฒ ๋ค์ ์๋์ง ๋ณด์ฌ์ค๋๋ค.
๋น์ ์ ์ปค๋ฎค๋ํฐ๊ฐ 4 ๋ ๋์ ๋ฌด์ธ๊ฐ๋ฅผ ์๊ตฌํ๊ณ ๋น์ (Docker)์ด ๋์ ๊ฐ ์ผ๋ฉด ๋น์ ์ด ๊ทธ๋ค๊ณผ ๊ฐ์ ๋ฐฉํฅ์ ๋ฐ๋ผ๋ณด๊ณ ์์ง ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ ๋์ปค๋ ํฌ๊ธฐํ๊ณ ๋งค์ง๋์์ต๋๋ค.
๊ทธ๋ค์๋ค์ ์ ์์๊ธฐ ๋๋ฌธ์ ... ๊ทธ๋ค์์ก์ต๋๋ค.
์์น์ฌ-ํ์ง๋ง ํค์ด ํธ.
์ด๋ฐ ๊ฒ์ด ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ ์ ๋ง ๋ถ๋๋ฌ์ด ์ผ์
๋๋ค. ์ํ ํ์ธ์ด ์คํจ ํ ๋ ๋ฐ์ํ ์์๋ onFailure
ํํฌ๋ฅผ ๋ง๋ค ์ ์์์ผ๋ฉด ์ข์์ ๊ฒ์
๋๋ค.
์ฆ
services:
app:
image: myapp:latest
hooks:
onFailure:
- # Call a monitoring service (from the host machine) to tell it that the service is offline.
์ด๊ฒ์ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์ผ / ํฌํธ์ ๋ฐ์ธ๋ฉ๋์ง ์๋ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค. ์ฟ ๋ฒ๋ค ํฐ์ค๋ ์๋ง๋ ๊ฐ ๊ธธ์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋งค์ฐ ์์ ํ๊ฒฝ์์ ์๋นํ ํฐ ์ธํ๋ผ ๋ณ๊ฒฝ์ด๋ฉฐ ๊ณผ์์ ๋๋ค.
ํธ์งํ๋ค:
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ์ "๋ํ"ํ๊ธฐ ์ํด ์ปจํ
์ด๋์ ์ง์
์ ์ ์
๋ฐ์ดํธํ์ต๋๋ค. ์ฆ
# /app/bin/run_with_monitor
#!/bin/bash
set -eE
updateMonitoringSystem() {
# do something here... This is run from the container, though, unfortunately.
if [[ $? -eq 1 ]]; then
# Failed!
else
# All is good!
fi
}
trap 'updateMonitoringSystem' EXIT
$@
# Dockerfile
....
CMD ["/app/bin/run_with_monitor", "./my-app"
๊ทธ๋๋ ์ด๋ฏธ์ง๋ฅผ ์์ ํ ํ์์์ด์ด ์์ ์ ์ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
: man_shrugging : ๊ฒฝ์์ (Kubernetes)๊ฐ ๊ฐ์ง๊ณ ์๋์ด ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ฐพ๊ณ ๋์ ์ฐ๋ ๊ธฐํต ํ์ฌ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ ๋ง ๋ถ๋๋ฌ์ด ์ผ์ ๋๋ค. ์ด์ ๋ก์ปฌ์์ ํ ์คํธํ๊ธฐ ์ํด ๋ณ๋์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ ์งํด์ผํฉ๋๋ค.
์ํด ๋ณต ๋ง์ด ๋ฐ์ผ์ธ์ : roll_eyes :
@LukeStonehm๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์ปจํ ์ด๋๊ฐ ์ธ์์ง ํ ํ๋์ ๋ช ๋ น์ ์ํํด์ผํ์ง๋ง ๋์ ๋จ๊ฑฐ์ด ์ฐ๋ ๊ธฐ๋ก ์ฒ๋ฆฌ๋์์ต๋๋ค. ๊ณต์ ์ด๋ฏธ์ง๊ฐ 90 % ์ด์์ ๊ฐ์ ธ ์ค๋ฉด ๋ด ์ด๋ฏธ์ง์ ๋์ปค ํ์ผ์ ๊ด๋ฆฌํ๊ณ ์ถ์ง ์์ต๋๋ค.
์๋น๋์ ํ๋ก๊ทธ๋จ์ ์์์ ํน์ ์๋น์ค์ ์์กดํฉ๋๋ค. ์๋ฅผ ๋ค์ด MySQL ๋๋ MongoDB ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค.
๋ฐ๋ผ์ ์ด๋ฌํ ๊ฒฝ์ฐ docker-compose
๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋์ ์ฌ์ฉ์๋ ๋ค์์ ์ํํด์ผํฉ๋๋ค.
Dockerfiles
์์ฑ ๋ฐฉ๋ฒ ๋ฐ ํ๋ก๊ทธ๋๋ฐ ๋ฐฐ์ฐ๊ธฐDocker images
๋น๋ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐDockerfiles
๋ฅผ ๋ง๋ค๊ณ ์ปจํ
์ด๋๊ฐ ์๋ก๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๋ก ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.Dockerfiles
๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์์ ํ์ฌ ์
๋ฐ์ดํธ๋ฅผ ์ ์ฉํ์ญ์์ค.Docker images
๊ฒ๊ณผ Dockerfiles
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ์ง์ฆ๋ฉ๋๋ค.
Docker images
๋ง๋ค๊ณ ์ ์ฅํ๊ฑฐ๋ ์
๋ก๋ / ๋ค์ด๋ก๋ (ํ๋ง / ํธ์)ํ๋ ๋ฐ ์ ๊ธฐ์ ์ผ๋ก ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ๋ญ๋นํฉ๋๋ค.Dockerfiles
, ๋น๋, ํ
์คํธ, ์์ ๋ฑ์ ์ ๊ธฐ์ ์ผ๋ก ์๊ฐ์ ๋ญ๋นํฉ๋๋ค.Docker images
๋ง ์คํํ ์์๋ ๊ธฐ๋ฅ์ ์์ต๋๋ค.์คํํธ ์
ํ์ธ์ด ์์๋ค๋ฉด์ด ๋ชจ๋ ๊ฒ์ด ํ์ํ์ง ์์ ๊ฒ์ด๋ฉฐ ์ฐ๋ฆฌ๊ฐ ์ํ๊ณ ๋๋ผ ๋๋ง๋ค image: mysql:8.0.18
๋ฅผ image: mysql:8.0.19
๊ฐ๋จํ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค!
ํ์ค์ ์ผ๋ก ์ด๊ฒ์ ํ์ฌ ํ์ค ์ธ๊ณ์์ ์ผ์ด๋๊ณ ์๋ ์ผ์ ๋๋ค.
docker-compose
์์
ํ ์ ์๋๋ก ์์ ๋ง์ Dockerfiles
๋ง๋ค์ด ๋ณ๊ฒฝํฉ๋๋ค.๊ทธ๋ฆฌ๊ณ ๋น์ ์ docker-compose
์ด ์ด๋ฏธ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ํ๊ธฐ ๋๋ฌธ์ "ํ๊ฐ์ง ์ผ์ํด์ผํ๋ค"๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. depends_on
์์ฑ์ ์ฌ์ฉํ์ฌ ์ข
์์ฑ์ ์ง์ ํ๋ ๊ฒ๋ณด๋ค ๋ ์ค์ํ ๊ฒ์ ์ด๋ฏธ์ง ๊ฐ์ ธ ์ค๊ธฐ ๋ฐ ๋น๋๋ฅผ ํฌํจํฉ๋๋ค. ์ด๊ฒ์ ์์ ํ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ๋ ์๋๋๋ค. ์ด๊ฒ์ ๋ค๋ฅธ ๋งค๊ฐ ๋ณ์๋ฅผ docker
์
๋๋ค.
@ binman-docker @crosbymichael @dmcgowan @ebriney @ehazlett @eunomie @guillaumerose @jeanlaurent @justincormack @lorenrh @manishtomar @olegburov @routelastresort @spencerhcheng @StefanScherer @thaJeztah @tonistiigi @ulyssessouza @aiordache @ chris-crone @aiordache
์ด ๊ธฐ๋ฅ์ ์ฌ๊ณ ํ๊ฑฐ๋ ์ ์ด๋ ์ด์ ๋ํด ์ ์ ํ ๋
ผ์๋ฅผํฉ์๋ค.
task service
๊ธฐ์ ์์ด ์์ ์์ ์ ์๊ฒ ๊ฝค ์ ์๋ํ์ง๋ง ํน์ดํ ์ ์ด ์์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์
๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ด๊ธฐํ๋ฅผ ์ํด compose ํ์ผ์ ํจํด์ ๊ด๋ฒ์ํ๊ฒ ์ ์ฉํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฑ๊ณต์ ์ธ ์ํ ํ์ธ ๋๋ ์ฑ๊ณต์ ์ธ ์ข
๋ฃ / ์์
์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฐ ๋ ๋์ 'depends_on'์ด ๋ง์ ์์
์ ๋ ์ฝ๊ณ ์์ ์ ์ผ๋ก ๋ง๋๋ ๋ฐ ๋์ํฉ๋๋ค.
์ด๊ฒ์ ์ ๋ง ๋์์ด ๋ ๊ฒ์ ๋๋ค.
Kubernetes๊ฐ postStart ์๋ช ์ฃผ๊ธฐ๋ฅผ ํตํด์ด ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค๋ ์ ์ ๊ฐ์กฐ ํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
k8s! = ๋์ปค ์์ฑ. ์๋ชป๋ ์ฑ๋
๋ช ํํ์ง ์์์ ๋ฏธ์ํ์ง๋ง ๋ด ์์ ์ Kubernetes๊ฐ ์ด๊ฒ์ ์ง์ํ๊ณ Kubernetes์ Docker compose๊ฐ ๋์ผํ ์ฌ์ฉ ์ฌ๋ก / ๋ชฉ์ ์ ๋ง์ด ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ฑ์ ๋ํ ๋ ผ์์ด ๋ ๊ฒ์ ๋๋ค. ์ ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด ๋ฏธ์ ํด์.
์ข์ ์์!!
๋๋ docker๊ฐ ์ฐ๋ฆฌ๋ฅผ ๋ค์๋ค๊ณ ์๊ฐํฉ๋๋ค (์ด ๋ฌธ์ ์ ๋ค๋ฅธ ๋ช ๊ฐ์ง). https://www.docker.com/blog/announcing-the-compose-specification/
์ปค๋ฎค๋ํฐ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ ์ํด ์ฌ์์ ๋ํด ์์ ํด ๋ด ์๋ค. ์ด๋ฒ ์ฌ๊ฐ๋ฅผ ํตํด์ด ์ปค๋ฎค๋ํฐ๋ฅผ ๊ฐ๋ฐฉ์ ์ด๊ณ ์น๊ทผํ ์ปค๋ฎค๋ํฐ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
์ข์ ์์!!
๋๋ docker๊ฐ ์ฐ๋ฆฌ๋ฅผ ๋ค์๋ค๊ณ ์๊ฐํฉ๋๋ค (์ด ๋ฌธ์ ์ ๋ค๋ฅธ ๋ช ๊ฐ์ง). https://www.docker.com/blog/announcing-the-compose-specification/
์ปค๋ฎค๋ํฐ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ ์ํด ์ฌ์์ ๋ํด ์์ ํด ๋ด ์๋ค. ์ด๋ฒ ์ฌ๊ฐ๋ฅผ ํตํด์ด ์ปค๋ฎค๋ํฐ๋ฅผ ๊ฐ๋ฐฉ์ ์ด๊ณ ์น๊ทผํ ์ปค๋ฎค๋ํฐ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ํ ์ฌ๋์ด ์์ต๋๊น? ๋ฉ์ผ ๋ง๋ฆฌ์คํธ๋ ์์ง ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ฐจ์ ์ฑ ์ด ์ฌ๊ธฐ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค : https://github.com/compose-spec/compose-spec
์ด ๋ฌธ์ ๋ฅผ ์ค๋ช ํ๋ ๋ฌธ์ ๊ฐ ๋ณด์ด์ง ์์ง๋ง ์ฌ๋ฐ๋ฅธ ์ฅ์์ธ์ง ํ์คํ์ง ์์ต๋๋ค.
ํธ์ง : https://github.com/compose-spec/compose-spec/issues/84 ์์ ๋ฌธ์ ๋ฅผ ์ด์์ต๋๋ค
HEALTHCHECK ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ์์ ์ ๊ฐ์ ๋ค๋ฅธ ์์ ์ ์ํ ํ ์ ์์ต๋๋ค.
Dockerfile
FROM ubuntu
COPY healthcheck.sh /healthcheck.sh
RUN chmod a+x /healthcheck.sh
HEALTHCHECK --interval=5s CMD /healthcheck.sh
CMD bash -c 'set -x; set +e; while true; do cat /test.txt; sleep 3; done'
healthcheck.sh
#/usr/bin/env bash
set -e
FIRST_READY_STATUS_FLAG='/tmp/.FIRST_READY_STATUS_FLAG'
# Health check
echo 'Run command to validate the container status HERE'
# On success
if [ ! -f "${FIRST_READY_STATUS_FLAG}" ]; then
# On first success...
touch "${FIRST_READY_STATUS_FLAG}"
# Run ON_RUN on first health check ok
if [ ! -z "${DOCKER_ON_RUN}" ]; then
eval "${DOCKER_ON_RUN}"
fi
fi
1
์คํฌ๋ฆฝํธ๋ฅผ ์ข
๋ฃํฉ๋๋ค.DOCKER_ON_RUN
ํ๊ฒฝ ๋ณ์๊ฐ ์์ผ๋ฉด ์คํํฉ๋๋ค.docker-compose.yml
version: "3.7"
services:
test:
build:
context: .
image: test/on-run
environment:
DOCKER_ON_RUN: echo x >> /test.txt
DOCKER_ON_RUN
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ํ ์คํํ ์ฌ์ฉ์ ์ง์ ๋ช
๋ น์ ์ ๋ฌํ ์ ์์ต๋๋ค.
docker-compose build
docker-compose up
์ฐ์ถ:
Creating network "tmp_default" with the default driver
Creating tmp_test_1 ... done
Attaching to tmp_test_1
test_1 | + set +e
test_1 | + true
test_1 | + cat /test.txt
test_1 | cat: /test.txt: No such file or directory
test_1 | + sleep 3
test_1 | + true
test_1 | + cat /test.txt
test_1 | cat: /test.txt: No such file or directory
test_1 | + sleep 3
test_1 | + true
test_1 | + cat /test.txt
test_1 | x
test_1 | + sleep 3
test_1 | + true
test_1 | + cat /test.txt
test_1 | x
test_1 | + sleep 3
test_1 | + true
test_1 | + cat /test.txt
test_1 | x
test_1 | + sleep 3
cat: /test.txt: No such file or directory
์ค๋ฅ๋ฅผ ๋ณผ ์ ์์ต๋๋ค./test.txt
๋ด๋ถ์์ x
ํ๋๋ง ๋ณผ ์ ์์ต๋๋ค.์ด๊ฒ์ด ๋๊ตฐ๊ฐ๋ฅผ ๋์ธ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
_health check_๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ๋๋จธ์ง ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฟก ๋นต๋จ
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ฌ์ฉ์ ์์ฑ ๋ฑ๊ณผ ๊ฐ์ด ๋ช
๋ น 1์ ์คํํด์ผํ๋ ๊ฒฝ์ฐ touch "${FIRST_READY_STATUS_FLAG}"
๋ํ ๋ณผ๋ฅจ์ ๋ง์ดํธ ํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์๋ฃจ์
์ค ์๋น์๋์ด ๋ฌธ์ ์ ๋ํ ์ ํจํ ํด๊ฒฐ ๋ฐฉ๋ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด ์ง์
์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค๋ฉด ๋ค์์ ํด๊ฒฐํ ์๋ ์์ต๋๋ค.
ENTRYPOINT ["./entrypoint.sh"]
์ค์ ์๋น์ค ๋๋ ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ ๋ณต์กํ ๋
ผ๋ฆฌ๊ฐ ํฌํจ๋ฉ๋๋ค.
์ปจํ
์ด๋ ๋ผ์ดํ ์ฌ์ดํด์ ๋ก์ง์ ์ฝ์
ํ ์ ์์ง๋ง ์ฌ์ ํ ํํฌ๋ ์๋๋๋ค.
์์ ๋ชจ๋ ๊ฒ์ด ์๋ฏธ์๋ ๊ฒ์ ์๋์ง๋ง ์ด๊ฒ์ด ํฌ์ธํธ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ง์ ์ฐ์ ์ผ๋ฉดํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ง์๋ฌธ๊ณผ ํจ๊ป docker-compose
ํฌํจ๋ ์๋ ์์ต๋๋ค.
lifecycle:
before_start: "./beforeStartHook.sh"
after_destroy: "./afterDestroyHook.sh"
๋๋ ์ฌ์ง์ด ๊ทธ๋ ๊ฒ :
hooks:
before_destroy: "./beforeDestroyHook.sh"
before_create: "./fixFsRights.sh"
๋ฃจํธ๊ฐ ์๋ ์ฌ์ฉ์๋ก ์ปจํ ์ด๋๋ฅผ ์์ํ๊ธฐ ๋๋ฌธ์ ํํฌ ์คํฌ๋ฆฝํธ ๋๋ ๋ถํธ ์คํธ๋ฉ ์คํฌ๋ฆฝํธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ฃจํธ ๊ถํ์ด ํ์ํ ํ์ผ์ ๋ฎ์ด ์ธ ์ ์์ต๋๋ค.
์, ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ด์ง๋ง ์์ง ๊ตฌํ๋์ง ์์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฐ๋ผ์ ๋ด ๋์ปค๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด Script ๋๋ Makefile์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋์ compose๊ฐ ๋ง๋ค์ด์ง ์ด์
? ์คํฌ๋ฆฝํธ๋ก ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๊ณ ํ์ฅ ํ ์ ์์ต๋๋ค || dockerfile?
์ข์ต๋๋ค.์ด ์์ ๋ฅผ ์ฌ์ฉํ์ฌ CI ํ๋ก์ธ์ค์์ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ ํ๊ฒฝ์ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉํ์ต๋๋ค.
์ปจํ ์ด๋๊ฐ ์์๋ ํ mongodb๋ฅผ ํ๋ก๋น์ ๋ํ๊ณ rabbitmq์์ ๋๊ธฐ์ด ๋ฐ ๊ณ์ ์ ๊ด๋ฆฌํด์ผํฉ๋๋ค.
์ค๋ ๋ด๊ฐํ๋ ์ผ์ ๋ค์๊ณผ ๊ฐ์ ์คํฌ๋ฆฝํธ์ ๋๋ค.
onrun
๋ช ๋ น์ผ๋ก ์ง์ docker-compose -f appmaster.yml -p appmaster up -d
๋ง๋ค ์ ์์ต๋๋ค.yml ํ์ผ์ด ๋ ์ฝ๊ธฐ ์ฌ์์ง๋๋ค.