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 파일 수정
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. 실행
$ 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의 등록이 필요