Docker compose
도커 컨테이너를 다루는 도구
다수의 컨테이너를 하나로 통합하여 관리
인프라를 코드로 표현
하나의 서비스를 위해 여러개의 컨테이너를 올리는 경우
docker compose를 이용하여 컨테이너들을 관리
docker compose 는 링크옵션이 필요하지 않다 ,알아서 연결 됨
-> 쿠버네티스를 사용하면 docker compose 가 필요없다
쿠버네티스랑 호환이 되지 않아서 거의 사용하지 않는다
설치
https://docs.docker.com/compose/install/
vagrant@docker:~$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c
# 도커 컴포즈 파일 만들기
# yml 야믈
vagrant@docker:~$ cat docker-compose.yml
version: '3'
services: # 컨테이너
web:
image: httpd:alpine
# 컨테이너 생성, 실행
vagrant@docker:~$ docker-compose up -d
# 실핼중인 컨테이너 확인
# 현재 있는 디렉토리_서비스명_숫자
vagrant@docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a39e15be6ad9 httpd:alpine "httpd-foreground"2 minutes ago Up About a minute 80/tcp vagrant_web_1
# 도커 컴포즈로 배포 된 컨테이너 확인
vagrant@docker:~$ docker-compose ps
Name Command State Ports
-------------------------------------------------
vagrant_web_1 httpd-foreground Up 80/tcp
# 도커 컴포즈 삭제
vagrant@docker:~$ docker-compose down
vagrant@docker:~$ docker-compose ps
Name Command State Ports
------------------------------
# 다수의 컨테이너 관리
# docker-compose.yml 파일 생성
vagrant@docker:~$ mkdir ldh
vagrant@docker:~/ldh$ cat docker-compose.yml
version: '3'
services:
web:
image: httpd:alpine
db:
image: mysql:5.7
# 도커 컴포즈 생성, 실행
vagrant@docker:~/ldh$ docker-compose up -d
vagrant@docker:~/ldh$ docker-compose ps
Name Command State Ports
---------------------------------------------------------
ldh_db_1 docker-entrypoint.sh mysqld Exit 1
ldh_web_1 httpd-foreground Up 80/tcp
-> 환경 변수를 제공하지 않았기 때문에 Exit 상태
# docker-compose.yml 파일 수정
vagrant@docker:~/ldh$ cat docker-compose.yml
version: '3'
services:
web:
image: httpd:alpine
db:
image: mysql:5.7
environment: # 환경변수
MYSQL_ROOT_PASSWORD: 1234
# 도커 컴포즈 생성, 실행
vagrant@docker:~/ldh$ docker-compose up -d
vagrant@docker:~/ldh$ docker-compose ps
Name Command State Ports
------------------------------------------------------------
ldh_db_1 docker- Up 3306/tcp,
entrypoint.sh 33060/tcp
mysqld
ldh_web_1 httpd-foreground Up 80/tcp
-> 환경변수 추가 후 정상적으로 실행 된 것을 확인
# 도커 컴포즈 컨테이너 스케일링
# docker-compose.yml 파일에 작성한 서비스를 실행할 컨테이너 개수 지정
# 다수의 컨테이너 생성, 시작
vagrant@docker:~/ldh$ docker-compose scale web=3
vagrant@docker:~/ldh$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------
ldh_db_1 docker- Up 3306/tcp, 33060/tcp
entrypoint.sh
mysqld
ldh_web_1 httpd-foreground Up 80/tcp
ldh_web_2 httpd-foreground Up 80/tcp
ldh_web_3 httpd-foreground Up 80/tcp
# web 2ro db 3개 생성,시작
vagrant@docker:~/ldh$ docker-compose up -d --scale web=2 --scale db=3
# 포트포워딩 scale
# docker-compose.yml 파일 수정
vagrant@docker:~/ldh$ cat docker-compose.yml
version: '3'
services:
web:
image: httpd:alpine
ports:
- "80:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 1234
# 도커 컴포즈 생성, 실행
vagrant@docker:~/ldh$ docker-compose up -d --scale web=2
WARNING: The "web" service specifies a port on the host.
ldh_db_1 is up-to-date
Creating ldh_web_2 ...
Creating ldh_web_2 ... error
ERROR: for ldh_web_2 Cannot start service web: Bind for 0.0.0.0:80 failed: port is already allocated
-> 포트포워딩을 구성하면 scale 사용 불가능 하다
# 이미지 대신에 Dockerfile을 이용하여 빌드
vagrant@docker:~/build/flask$ cat docker-compose.yml
version: '3'
services:
web:
build: .
'클라우드 > 도커(Docker)' 카테고리의 다른 글
도커 Docker gcc 컴파일러를 사용하여 이미지 만들기 (0) | 2021.07.05 |
---|---|
도커 Docker Alpine (알파인) 이미지 (0) | 2021.07.05 |
도커 Docker Flask를 이용한 간단한 앱 실행 (0) | 2021.07.05 |
도커 Docker 레이어 (Layer) , Port (포트) (0) | 2021.07.05 |
도커 Docker .dockerignore 파일 (0) | 2021.07.05 |