docker-compose : 설정파일을 만들어서 docker 사용
설정파일은 docker-compose.yml 이다.
https://docs.docker.com/compose/
Overview
docs.docker.com
#1. Define and run multi-container applications with Docker.
docker-compose [-f <arg>...] [--profile <name>...] [options] [COMMAND] [ARGS...]
1. -f <config file>
1) config: Yaml filetype
2) default filename : docker-compose.yml
2. builds or rebuilds, creates, starts
https://docs.docker.com/compose/reference/
Overview of docker compose CLI
docs.docker.com
#2. Usage (help) 명령어 : docker-compose -h
#3. docker-compose : install
$ sudo apt -y install docker-compose
1. 설치 후 간단한 설정을 만들자.
1) 먼저 docker-compose를 작업할 디렉터리 생성.
$ mkdir ~/docker-compose
$ cd ~/docker-compose/
#4. docker-compose : nginx
$ vi docker-compose.yml
1. docker-compose.yml 파일에 다음 장의 내용을 넣는다.
1) yml 파일 형식은 indentaion, space에 주의해야 한다.
가. Official site - https://yaml.org/
2. docker-compose.yml (nginx)
version: '3'
services:
nginx_8080:
image: nginx
restart: always
hostname: nginx1
container_name: cmp_nginx1_1 ## container_name을 미지정하면, directory이름을 prifix로하여 , 자동 생성함.
networks:
mynet:
ipv4_address: 172.20.0.10
ports:
- 8080:80
networks:
mynet:
ipam:
driver: default
config:
- subnet: 172.20.0.0/24
restart 는 프로그램 종료 될 시 재시작.
container_name을 고정시킴, 지정하지 않을 시 디렉터리 이름을 고정해 자동생성.
docker net, volume은 docker compose와 같이 사용.
$ docker-compose up
3. 2번 터미널 : docker-compose 디렉터리에서 명령해야 한다.
jlim@home:~/docker-compose$ pwd
/home/jlim/docker-compose
$ docker-compose ps
$ docker ps
$ curl http://127.0.0.1:8080/
방금 실행한 것은 detach를 하지 않아, 해당 터미널이 닫히면 프로세서가 죽을 수 있다.
detach하는 법으로 실행하자.
#4. docker-compose : nginx : up (detach)
1.
1 번 터미널 : docker-compose up -d
^C 를 눌러 실행문을 빠져나온다.
$ docker-compose up -d #detach
$ docker-compose ps
$ docker-compose stop
$ docker-compose ps
#5. docker-compose : nginx : recreating
1. 1번 터미널:
1) docker-compose.yml을 수정해보자.
가. docker-compose.yml 은 수정 후 up --> recreating (container id는 당연히 변경됨)
이전 port binding에서 volumes바인딩 하자.
yaml 파일 아래 같이 수정
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/jlim/nginx_doc_root:/usr/share/nginx/html
networks:
mynet:
ipam:
driver: default
config:
- subnet: 172.20.0.0/24
volumes만 추가.
1번 터미널 : 수정 후 up.
$ docker-compose up -d
$ docker-compose ps
2번 터미널 : curl로 확인
$ curl http://127.0.0.1:8080/hello.txt
실습 완료 후 아래 명령을 하여 docker-compose 를 지워보자
$ docker-compose stop; docker-compose rm;
#6 Practice :Nginx를 2개 설정 #1
1. 웹서버를 2개 실행하도록 yml 파일을 작성하자.
1) docker-compose.yml을 compose-nginx2.yml (cp이용)로 변경해서 작업해보자.
compose-nginx2.yml
version: '3'
services:
nginx_8080:
image: nginx
restart: always
hostname: nginx1
container_name: cmp_nginx1_1 #여기서는 container끼리 서로 접속하지 않지만, DB나 API서버를 사용한다면 container들의 hostname을 설정해줘야 하는 경우가 있다. 이런 경우 /etc/hosts에 서버를 등록한다. 예를 들어 아래와 같은 행을 추가할 수 있다.
# 172.20.0.10 nginx1 nginx1.domainname
# 172.20.0.20 nginx2 nginx2.domainname
networks:
mynet:
ipv4_address: 172.20.0.10
ports:
- 8080:80
volumes:
- /home/jlim/nginx_doc_root:/usr/share/nginx/html
nginx_8081:
image: nginx
restart: always
hostname: nginx2
container_name: cmp_nginx2_1
networks:
mynet:
ipv4_address: 172.20.0.20
ports:
- 8081:80
volumes:
- /home/jlim/nginx2_doc_root:/usr/share/nginx/html
networks:
mynet:
ipam:
driver: default
config:
- subnet: 172.20.0.0/24
2. Nginx를 2개 설정 #2
1) docker-compose실행 : -f 옵션 사용
$ docker-compose -f compose-nginx2.yml up -d
$ docker-compose -f compose-nginx2.yml ps
2개가 올라왔고 포트번호도 8080, 8081 로 되있다.
#7 docker : network
$ docker network ls
$ docker-compose -f compose-nginx2.yml stop
$ docker network rm dockercompose_mynet
## 에러발생 이유: network이 재생성 되면서 id값이 달리지기때문임.
$ docker-compose -f compose-nginx2.yml up -d
$ docker-compose -f compose-nginx2.yml up --force-recreate -d
Summary
1. docker CLI option이 복잡해지면..
1) docker-compose를 사용하는 것을 권장
2) 설정에 따라 /etc/hosts에 IP address와 hostname의 등록이 필요
'프로그래머스 > Docker' 카테고리의 다른 글
로컬 -> 도커로 파일 옮기기. (0) | 2023.01.30 |
---|---|
vs code 에서 도커 연결하기 (0) | 2023.01.30 |
[인공지능 개요] Docker #4 - docker CLI 2편- run ex ec start stop (0) | 2023.01.03 |
[인공지능 개요] Docker #3 - CLI -ps rm rmi image (0) | 2023.01.02 |
[인공지능 개요] Doker #2 - installation (0) | 2023.01.02 |