[Docker] 4. docker-compose

happy_quokka·2023년 12월 13일
0

Docker

목록 보기
4/7

docker-compose

  • docker를 사용하는 설정파일
  • docker-compose.yaml
  • docker-compose [ -f <arg>...] [--profile <name>...] [option] [COMMAND] [ARGS...]
  • `-f
    • config : Yaml filetype
    • default : docker-compose.yaml
    • 파일 이름이 default의 경우 따로 지정해 줄 필요가 없다

docker-compose 설치

$ sudo apt -y install docker-compose
  • 설치 완료 후 설정
  • docker-compose를 작업할 디렉터리를 만든다
$ mkdir ~/docker-compose
$ cd ~/docker-compose/


docker-compose.yml 파일 작성

$ vi docker-compose.yml
version: '3'
services:
  nginx_8080:
    image: nginx
    restart: always
    hostname: nginx1
    container_name: cmp_nginx1_1
    networks:
      mynet:
        ipv4_address: 172.20.0.10
    ports:
      - 8080:80

networks:
  mynet:
    ipam:
      driver: default
      config:
        - subnet: 172.20.0.0/24
  • version : version에 따라 쓸수있는 지시어가 다르다
  • image : 가져올 이미지
  • restart : 해당 container가 종료되었으면 자동으로 재시작
  • hostname : 임의로
  • container_name : 지정하지 않으면 directory 이름을 prefix로 자동 생성
  • networt : 어떤 network를 쓸지
  • ports : 외부 port를 내부 container port로 연결

작성한 yml 파일로 docker 띄우기

docker-compose : nginx : up

1. 1번 터미널 : docker-compose 실행

$ cd ~/docker-compose/
$ docker-compose up

2. 2번 터미널

  • docker-compose ps가 docker ps보다 깔끔하게 나온다
$ docker-compose ps
$ docker ps

  • 작동 확인
$ curl http://127.0.0.1:8080

docker-compose : nginx : up (detach)

  • 위의 경우는 detach가 아니기 때문에 해당 터미널이 닫히면 프로그램이 죽을 수 있다

1. 1번 터미널 : docker-compose up -d

$ docker-compose up -d
$ docker-compose ps
$ docker-compose stop
$ docker-compose ps

docker-compose : nginx : recreating

1. docker-compose.yml 파일 수정

  • volume 부분 추가
version: '3'
services:
  nginx_8080:
    image: nginx
    restart: always
    hostname: nginx1
    container_name: cmp_nginx1_1
    networks:
      mynet:
        ipv4_address: 172.20.0.10
    ports:
      - 8080:80
    volumes:
      - /home/nahye/nginx_doc_root:/usr/share/nginx/html

networks:
  mynet:
    ipam:
      driver: default
      config:
        - subnet: 172.20.0.0/24

2. 1번 터미널 : docker-compose.yml 실행

$ docker-compose up -d
$ docker-compose ps

  • 기존의 container를 바꾸는 것이기 때문에 recreating

3. 2번 터미널 : 실행 확인

$ curl http://127.0.0.1:8080/hello.txt

4. 삭제

$ docker-compose stop 
$ docker-compose rm


nginx 2개 설정

  • web 서버를 2개 실행하도록 yml 파일 작성
  • docker-compose.yml을 docker-nginx2.yml로 변경

1. docker-nginx2.yml 파일 작성

  • nginx_8081 새로 생성
    • hostname, container_name, ip 주소, port 번호, volume을 겹치지 않게 변경
version: '3'
services:
  nginx_8080:
    image: nginx
    restart: always
    hostname: nginx1
    container_name: cmp_nginx1_1
    networks:
      mynet:
        ipv4_address: 172.20.0.10
    ports:
      - 8080:80
    volumes:
      - /home/nahye/nginx_doc_root:/usr/share/nginx/html
  nginx_8081:
    image: nginx
    restart: always
    hostname: nginx2
    container_name: cmp_nginx1_2
    networks:
      mynet:
        ipv4_address: 172.20.0.20
    ports:
      - 8081:80
    volumes:
      - /home/nahye/nginx2_doc_root:/usr/share/nginx/html

networks:
  mynet:
    ipam:
      driver: default
      config:
        - subnet: 172.20.0.0/24

2. 실행

  • -f 옵션으로 파일명을 지정해줘야한다
$ docker-compose -f compose-nginx2.yml up -d
$ docker-compose -f compose-nginx2.yml ps


network

1. network 확인

  • 만든 dockercompose_mynet가 있다
$ docker network ls

2. network 삭제

  • 간혹 network가 꼬여서 설정을 지우고 새로 만들어야되는 경우가 생긴다
  • 그런데 설정만 지우면 문제가 발생한다
$ docker-compose -f compose-nginx2.yml stop
$ docker network rm dockercompose_mynet

3. 재실행

  • 에러 발생
$ docker-compose -f compose-nginx2.yml up -d

  • network가 재생성되면서 id값이 달라지기 때문

4. 재생성

$ docker-compose -f compose-nginx2.yml up --force-recreate -d


요약

  • docker-compose를 사용하는 것을 권장
  • 설정에 따라 /etc/hosts에 IP address와 hostname의 등록이 필요

0개의 댓글