[docker 실습] 11. 도커 컴포즈
docker
Author
Date
2022-07-25 21:11
Views
1080
매번 run명령어에 옵션을 cli로 컨테이너를 생성하기 보다는 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음로 관리할수있다면 좀 더 편할것이다.
도커 컴포즈는 컨테이너를 이용한 서비스의 개발과 ci를 위해 여러 개의 컨테이너를 하나의 프로젝트로서 다룰수 있는 작업환경을 제공다.
도커 컴포즈는 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작한다. 도커 컴포즈의 설정 파일은 run 명령어의 옵션을 그대로 사용할 수 있으며, 각 컨테이너의 의존성,네트워크, 볼륨 등을 함께 정의 할수 있다.
스웜모드의 서비스와 유사하게 설정 파일에 정의된 서비스의 컨테이너 수를 유동적으로 조절할 수 있으며 컨테이너의 서비스 디스커버리도 자동으로 이뤄진다.
[도커 컴포즈 설치]
[root@docker ~]# curl -L https://github.com/docker/compose/releases/download/1.11.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose [root@docker ~]# chmod +x /usr/local/bin/docker-compose
버전 확인
[root@docker ~]# docker-compose -v docker-compose version 1.11.0, build 6de1806
[사용법]
도커 컴포즈는 컨테이너의 설정이 정의된 YAML 파일을 읽어 도커 엔진을 통해 컨테이너르 생성한다.
다음과 같은 파일 만들어놓기
yaml 파일에서 들여쓰기시 tab은 도커 컴포즈가 인식하지 못하므로 2개의 공백을 사용해 하위항목을 구분해야한다.
[root@docker ~]# cat docker-compose.yml 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파일을 현재 디렉토리에서 찾는다.
이름설정도 하지않으면 현재디렉토리가 프로젝트 명이된다.
[root@docker ~]# docker-compose up -d Creating network "root_default" with the default driver Pulling mysql (alicek106/composetest:mysql)... mysql: Pulling from alicek106/composetest Image docker.io/alicek106/composetest:mysql uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/ d89e1bee20d9: Pull complete 9e0bc8a71bde: Pull complete 27aa681c95e5: Pull complete a3ed95caeb02: Pull complete 7ab04d11bb96: Pull complete Digest: sha256:36eea6b0a8b767ef51dbc607c1249330ff762756c6c8ba72f8c565d2833818db Status: Downloaded newer image for alicek106/composetest:mysql Pulling web (alicek106/composetest:web)... web: Pulling from alicek106/composetest d89e1bee20d9: Already exists 9e0bc8a71bde: Already exists 27aa681c95e5: Already exists a3ed95caeb02: Already exists 15bc302aa28e: Pull complete 7233974738a3: Pull complete 732ac06e8a0b: Pull complete Digest: sha256:91e141799b618df4d665a1cade579c19c1f7e40e6c2ed5ff8acd87d834130b87 Status: Downloaded newer image for alicek106/composetest:web Creating root_mysql_1 Creating root_web_1
생성 확인
[root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 75aac88026fe alicek106/composetest:web "apachectl -DFOREGRO…" 41 minutes ago Up 41 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp root_web_1 3ad4ad940259 alicek106/composetest:mysql "mysqld" 41 minutes ago Up 41 minutes root_mysql_1
mysql 컨테이너 개수 늘림
[root@docker ~]# docker-compose scale mysql=2 Creating and starting root_mysql_2 ... done [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 464858ad0183 alicek106/composetest:mysql "mysqld" 6 seconds ago Up 5 seconds root_mysql_2 75aac88026fe alicek106/composetest:web "apachectl -DFOREGRO…" 44 minutes ago Up 44 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp root_web_1 3ad4ad940259 alicek106/composetest:mysql "mysqld" 44 minutes ago Up 44 minutes root_mysql_1
생성된 프로젝트 삭제
[root@docker ~]# docker-compose down Stopping root_mysql_2 ... done Stopping root_web_1 ... done Stopping root_mysql_1 ... done Removing root_mysql_2 ... done Removing root_web_1 ... done Removing root_mysql_1 ... done Removing network root_default [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
프로젝트 명 지정하기
[root@docker ~]# docekr-compose -p myproject up -d -bash: docekr-compose: command not found [root@docker ~]# docker-compose -p myproject up -d Creating network "myproject_default" with the default driver Creating myproject_mysql_1 Creating myproject_web_1 [root@docker ~]# docker-compose -p myproject ps Name Command State Ports ----------------------------------------------------------------------- myproject_mysql_1 mysqld Up myproject_web_1 apachectl -DFOREGROUND Up 0.0.0.0:80->80/tcp
Total Reply 0