κΈ°λ³Έμ μΌλ‘ πλ컀
μ΄κΈ° λλ¬Έμ k8sμ λ¬λ¦¬ λ¨μΌ νΈμ€νΈ νκ²½μ΄λ€.
πλ컀 μ»΄ν¬μ¦
λ μ΄λ¬ν λ¨μΌ νΈμ€νΈ νκ²½μμ μ¬λ¬ 컨ν
μ΄λλ₯Ό μ€ννκ³ κ΄λ¦¬νλλ° μ¬μ©λλ€.
λ컀 μ»΄ν¬μ¦λ YAML νμΌμ μ¬μ©νμ¬ κ° μ»¨ν μ΄λκ° μ΄λ»κ² μνΈμμ©νλμ§, μ΄λ€ λ€νΈμν¬μ λ³Όλ₯¨μ μ¬μ©νλμ§λ₯Ό μ μν μ μλ€.
Version
: Docker Engineκ³Ό νΈνλλ Docker Compose νμΌμ λ²μ μ λͺ
μν©λλ€. μλ₯Ό λ€μ΄, version: '3.8'κ³Ό κ°μ΄ λͺ
μν©λλ€.
Services
: μ ν리μΌμ΄μ
μ μλΉμ€λ₯Ό μ μν©λλ€. μλΉμ€λ 컨ν
μ΄λμ μ§ν©μΌλ‘, λ
립μ μΌλ‘ νμ₯νκ±°λ κ΅μ²΄ν μ μλ μ»΄ν¨ν
μμμ λνλ
λλ€. κ° μλΉμ€λ Docker μ΄λ―Έμ§μ μ€νμ μν μ€μ μ ν¬ν¨ν©λλ€.
Networks
: μλΉμ€κ° μ°κ²°ν λ€νΈμν¬λ₯Ό μ μν©λλ€. λ€νΈμν¬λ λ컀 μμ§μ κΈ°λ³Έ λ€νΈμν¬ λλΌμ΄λ²λ₯Ό μ¬μ©νκ±°λ μ¬μ©μ μ μ λ€νΈμν¬ λλΌμ΄λ²λ₯Ό μ¬μ©ν μ μμ΅λλ€.
Volumes
: λ°μ΄ν°λ₯Ό μ μ₯νλ λ° μ¬μ©λλ λ³Όλ₯¨μ μ μν©λλ€. 컨ν
μ΄λ λ΄λΆλ νΈμ€νΈ μμ€ν
μ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν΄ μ¬μ©λ©λλ€.
Configs
: λ°νμμ μλΉμ€ 컨ν
μ΄λμ μ λ¬λλ κ΅¬μ± νμΌμ μ μν©λλ€. μ΄ κ΅¬μ±μ 컨ν
μ΄λμ λ§μ΄νΈλκ±°λ νκ²½ λ³μλ‘ μ€μ λ μ μμ΅λλ€.
Secrets
: λ―Όκ°ν λ°μ΄ν°λ₯Ό μμ νκ² μ μ₯νκ³ μ λ¬νλ λ° μ¬μ©λ©λλ€. μ΄λ 컨ν
μ΄λμ μ½κΈ° μ μ© νμΌλ‘ λ§μ΄νΈλμ΄ μνΈ, ν ν°, μΈμ¦μ λ±κ³Ό κ°μ 보μμ λ―Όκ°ν μ 보λ₯Ό κ΄λ¦¬ν©λλ€.
λ컀 μ»΄ν¬μ¦λ μ¬λ¬ κ°μ λ컀 컨ν μ΄λλ₯Ό μ μνκ³ μ€ννκΈ° μν λꡬ.
λ¨μΌ νΈμ€νΈμμ μλνλ©°, YAML νμΌμ μ¬μ©νμ¬ μ¬λ¬ 컨ν μ΄λ κ°μ κ΄κ³, νκ²½ μ€μ λ±μ μ μνμ¬ μ¬μ©νλ€.
μ£Όλ‘ λ°°ν¬ νκ²½μ΄ μλ, κ°λ° νκ²½μμμ λΉ λ₯Έ ν μ€νΈλ κ°λ¨ν μ ν리μΌμ΄μ λ°°ν¬μ μ μ©νλ€.
λκ·λͺ¨μ 컨ν μ΄λνλ μ ν리μΌμ΄μ μ κ΄λ¦¬νκΈ° μν μ€ν μμ€ μ»¨ν μ΄λ μ€μΌμ€νΈλ μ΄μ νλ«νΌ
μ¬λ¬ νΈμ€νΈλ‘ ꡬμ±λ ν΄λ¬μ€ν°μμ 컨ν
μ΄λλ₯Ό λ°°ν¬, νμ₯, μλ 볡ꡬ λ±μ μλνν μ μλ€.
κ³ κ°μ©μ±, μλ μ€μΌμΌλ§, μλΉμ€ λμ€μ»€λ²λ¦¬ λ± κΈ°λ₯μ μ 곡νμ¬ λκ·λͺ¨ λ° λ³΅μ‘ν μ ν리μΌμ΄μ
μ μ ν©νλ€.
λ컀 λ΄μ₯ μ€μΌμ€νΈλ μ΄μ λꡬλ‘, μ¬λ¬ νΈμ€νΈμ κ±Έμ³ μ»¨ν μ΄λλ₯Ό ν΄λ¬μ€ν°λ§νκ³ κ΄λ¦¬νλ λ° μ¬μ©νλ€.
Kubernetesμ μλ²½νκ² λμΌνλ, Kubernetes보λ€λ λ κ°λ²Όμ°λ©° κ°λ¨νκ³ μ½κ² μμν μ μλ€.
μλΉμ€κ° κ³ λνλ μλ‘ μλμ κ°μ ννλ‘ μ¬μ©λλ€.
πλ컀 μ»΄ν¬μ¦
<πλ컀 μ€μ
<βΈοΈKubernetes
# μ΄λ―Έμ§ μ¬λ¦¬κΈ°
docker compose up
# μ΄λ―Έμ§ λ΄λ¦¬κΈ°
docker compose down
version: '2.23.0'
services:
my-service1:
image: ubuntu:latest
version: '2.23.0'
services:
my-service1:
image: ubuntu:latest
my-service2:
image: ubuntu:latest
my-service3:
image: ubuntu:latest
λ°°ν¬λλ 컨ν μ΄λμ λͺ μ ν΄λ κ²½λ‘μ λͺ μ λ°λΌκ°λ κ²μ νμΈν μ μλ€.
version: '2.23.0'
services:
my-service1:
build:
context: ./dfile
dockerfile: Dockerfile_1
# download ubuntu image
FROM ubuntu:latest
λ컀 μ»΄ν¬μ¦μ μ μν νμΌμ΄ μλ, λ컀 νμΌμ΄ μΈλΆμ dfile
λλ ν°λ¦¬μ μμΉν΄ μλ κ²½μ° λ€μκ³Ό κ°μ΄ μΈ μ μλ€.
λ컀 μ»΄ν¬μ¦λ₯Ό μμν λ λ컀 νμΌμ argsλ₯Ό μ μνκ³ , μ΄λ₯Ό λ컀 μ»΄ν¬μ¦ μͺ½μμ ν λΉν΄λ³΄μ.
λ컀νμΌμ μ μλ λ³μ buildno
μ λ컀 μ»΄ν¬μ¦μμ ν΄λΉ κ°μ args: - buildno=1
λ‘ ν λΉνμ¬ λ컀 μ΄λ―Έμ§λ₯Ό λΉλλλ κ²μ νμΈν μ μλ€.
version: '2.23.0'
services:
my-service1:
tty: true
build:
context: ./dfile
dockerfile: Dockerfile_1
args:
- buildno=1
tty: true
Docker 컨ν μ΄λμμ κ°μ ν°λ―Έλ(TTY)μ νμ±ννλ μ΅μ
λ컀 μ»΄ν¬μ¦λ₯Ό λ°°ν¬νκ³ λ°°ν¬λ 컨ν μ΄λμ μ΄λ¦μΌλ‘ ν°λ―Έλμ μ΄μ΄ μ μν΄λ³΄μ.
docker compose up
docker exec -it 1208-my-service1-1 /bin/bash
μ μμ΄ μλλ κ²μ νμΈν μ μλ€.
version: '2.23.0'
services:
web:
image: python:3.7
command: "python -m http.server 8000"
ports:
- "8000:8000"
Python λ΄μ₯ λͺ¨λμΈ http.serverλ₯Ό μ¬μ©νμ¬ 8000λ² ν¬νΈμμ μΉ μλ²λ₯Ό μ€ννλλ‘ μ§μ .
Docker 컨ν
μ΄λ λ΄μμ μ€ν μ€μΈ μΉ μλ²κ° νμ¬ λλ ν 리μ νμΌ λͺ©λ‘μ νμλλ€.
version: '2.23.0'
services:
myservice1:
tty: true
image: alpine
environment:
- HOST=kim
- NAME_PORT=8080
working_dir: /data
command: ["/bin/sh", "-c", "echo 'hello world!' > hello.txt; tail -f /dev/null"]
## μ΄ν λ€λ₯Έ μλ‘ μ μ
docker exec -it 1208-myservice1-1 /bin/sh
# λ컀 νμΌ
# download ubuntu image
FROM ubuntu:latest
CMD [ "echo", "hello docker file!" ]
# -------------------------------------
# λ컀 μ»΄ν¬μ¦ νμΌ
version: '2.23.0'
services:
myservice1:
tty: true
build:
context: ./dfile
dockerfile: Dockerfile_1
command: "echo 'hello docker compose!'"
λ컀 μ»΄ν¬μ¦ μͺ½μ 컀맨λκ° μ€νλκ² λλ€
λ΄λΆμ 곡κ°λμ΄μλ μλλ key
λλ ν¬νΈ λ²νΈ
μ κ°μ΄ μ¨κ²¨μΌνλ νκ²½λ³μμ κ°μ μ 보λ₯Ό.env
νμΌμ ν΅ν΄μ λ³λλ‘ λ§λ€μ΄μ κ΄λ¦¬ν μ μλ€.
version: '2.23.0'
services:
web:
image: nginx:latest
ports:
- "8080:80"
depends_on:
- db
#links:
# - db
db:
image: mariadb:latest
environment:
- MYSQL_ROOT_PASSWORD=1234
- NAME_PORT
links μ΅μ
μ μλΉμ€ κ°μ μ°κ²°μ μλμΌλ‘ μ€μ νκΈ° μν΄ μ¬μ©λμλ€.
μλ₯Ό λ€μ΄, web μλΉμ€κ° db μλΉμ€μ μ’
μμ μ΄κ³ , web μλΉμ€κ° db μλΉμ€μ νΈμ€νΈλͺ
μ μμμΌ ν κ²½μ° μ¬μ©νμλλ°, μ΅μ λ²μ μ Docker Composeμμλ μ΄λ¬ν μ°κ²°μ΄ μλμΌλ‘ κ΄λ¦¬λκΈ° λλ¬Έμ links μ΅μ
μ λͺ
μμ μΌλ‘ μ¬μ©ν νμκ° μμ΄μ‘λ€.
2λ²μ κ±Έμ³μ νκ²½ λ³μλ₯Ό λ컀 μ΄λ―Έμ§(리λ μ€)μ μ λ¬ν΄λ³΄μ.
λ컀νμΌ λ΄ μ΄λ―Έμ§μ νκ²½λ³μλ₯Ό λ±λ‘ν λ λ컀 μ»΄ν¬μ¦μμ args
ννλ‘ μΈμλ₯Ό ν΅ν΄ κ°μ μ λ¬ ν μ μλ€.
λ컀 μ»΄ν¬μ¦μ νκ²½λ³μλ μΈλΆ .env
νκ²½ λ³μμ νμΌμ λ±λ‘νμ¬ ${env_name}
ννλ‘ μ κ·Όνλ©΄ λλ€.
version: '2.23.1'
services:
web:
image: nginx:latest
# ports:- "8080:80" κ³Ό λμΌ
ports:
- target: 80
published: 8080
protocol: tcp
mode: HOST
# κ°λ°λλ μλΉμ€λ₯Ό μ€μΌμΌλ§ νκΈ° μν μ΅μ
deploy:
mode: replicated
replicas: 3 # νμ₯ μν€κ³ μ νλ λ
Έλμ κ°μ
resources: # μ§μ νκ³ μ νλ 리μμ€ κ΅¬μ± μν
limits: # cpuμ λ©λͺ¨λ¦¬ μ ν
cpus: "0.5" # cpuλ₯Ό μ 체 λΉμ¨λ‘ ν λΉ
memory: 50M # memoryλ₯Ό 50λ©κ°λ°μ΄νΈλ‘ μ€μ
restart_policy: # μ¬μμ μ μ±
condition: on-failure # μ€νμ΄ μ€ν¨νμ μ μ¬μμ
deploy
Docker Composeμ βdeployβ μ΅μ μ μλΉμ€λ₯Ό λ°°ν¬ν λ μΆκ° λ©νλ°μ΄ν°λ₯Ό μ μΈνλ λ° μ¬μ©λλ€
network
networks μ΅μ μ μ¬μ©νλ©΄ μ¬λ¬ κ°μ 컨ν μ΄λλ‘ κ΅¬μ±λ μ ν리μΌμ΄μ λ΄μμ 컨ν μ΄λ κ°μ ν΅μ μ μ€μ ν μ μλ€.
νμ§λ§ μ΄λ νμ¬ μΉκ³Ό DBκ° κ°μ λ€νΈμν¬λ₯Ό μ¬μ©νλλ‘ νμ λΏ, μ€μ λ‘ λΆμ¬λ IPκ° μμΌλ―λ‘ ν΅μ μ λΆκ°λ₯νλ€.