sangw0804 / study-docker

0 stars 1 forks source link

4. 도커 컴포즈 #5

Open gyeol1212 opened 3 years ago

gyeol1212 commented 3 years ago

도커 컴포즈를 사용하는 이유

도커 컴포즈

version: '3.0'
services:
  web:
    image: alicek106/composetest:web
    ports:
      - "80:80"
    links:
      - mysql:db
    command: apachectl -DFOREGROUND
  mysql:
    image: alicek106/composetest:mysql
    command: mysqld

YAML 뜯어보기

버전 정의

version: '3.0' # 최신. 도커 스웜이랑도 호환되는 버전이므로 그냥 3.0 쓰자

서비스 정의

services:
  web:
    image: alicek106/composetest:web # 생성하는데 사용할 이미지. 없으면 저장소에서 내려받음
    ports: # 컨테이너를 개발할 포트. 80:80처럼 호스트의 특정 포트를 연결하면, scale 조정 불가
      - "80:80"
    links: # 다른 서비스에 서비스 명만으로 접근할 수 있도록 설정
      - mysql:db
    command: apachectl -DFOREGROUND # 실행될 때 수행할 명령어
    depends_on: # 특정 컨테이너에 대한 의존 관계. 이 항목에 명시된 컨테이너가 먼저 생성되고 실행됨.
      - mysql
  mysql:
    build: ./composetest # 이 항목에 정의된 도커파일로 이미지 빌드. 이미지 이름은 아래 image의 이름
    # context: ./composetest
    # dockerfile: myDockerFile
    # args: 
    #   HOST_NAME: web
    #   HOST_CONFIG: self_config
    image: alicek106/composetest:mysql
    command: mysqld
    environment: # 환경 설정
      - MYSQL_ROOT_PASSWORD=mypassword
    extends: 
      file: asdf.yml
      service: extend_web

네트워크 정의

version: '3.0'
services:
  myservice:
    image: nginx
    networks:
      - mynetwork
networks:
  mynetwork:
    driver: overlay # 사용할 네트워크 드라이버 설정. default= 브릿지. overlay는 스웜이나 주키퍼
    dirver_opts:
      subnet: "255.255.255.0"
      IPAddress: "10.0.0.2"
  ipam: # IP Address Manager 사용 옵션
    driver: mydriver
    config: ...

services:
  myservice:
    image: nginx
    networks:
      - mynetwork
networks:
  mynetwork:
    external: true # 외부 네트워크 사용

볼륨 정의

version: '3.0'
services:
  ...
volumes:
  driver: flocker # 볼륨을 생성할 때 사용할 드라이버. default=local
    driver_opts:
      opt: "1",

services:
  myservice:
    image: nginx
    volumes:
      - myvolume:/var/www/html
volumes:
  myvolume:
    external: true # 외부 볼륨 사용

YAML 검증

도커 컴포즈 네트워크

with 도커 스웜