반응형
SMALL
docker-compose 다루기
5.1 docker-compose?
한마디로 여러 컨테이너의 실행을 한 번에 관리할 수 있게 해주는 것
- 예를들어
도커 컨테이너로 시스템을 구축하면 하나 이상의 컨테이너가 서로 통신하며, 그 사이에 의존관계가 생긴다.
이런 방식으로 시스템을 구축하다보면 단일 컨테이너를 다룰 때는 문제가 되지 않던 부분에도 주의가 필요하게 된다.
이때 필요한 것이 Docker Compose 이다.
$ docker-compose version
- Compose
- yaml 포맷(확장자
.yml
)으로 기술된 설정 파일 (스크립트 파일) - build + run 을 한번에
- yaml 포맷(확장자
<순서대로 진행해도 됨>
5.2 docker-compose.yml
파일 구성
- VS 키고 Dockerfile 있는 폴더에서
docker-compose.yml
파일 새로 만들기- VS에 yaml 패키지 추가해주기
예1
version: "3"
services:
mongo1:
image: "mongo"
ports:
- "27017:27017"
volumes:
- $HOME/mongoRepl/mongo1:/data/db
networks:
- mongo-networks
command: mongod --replSet myapp
mongo_setup:
image: "mongo_repl_setup:latest"
depends_on:
# 우선선위 지정 여기에 지정하는걸 먼저 실행후 현재꺼를 실행시켜라
- mongo1
networks:
- mongo-networks
# 새로 네트워크 만들기
networks:
mongo-networks:
# 이 이름으로 생성
driver: bridge
# bridge 타입으로 생성
version
- 파일 맨 앞에 선언
- 파일의 내용을 해석하는데 필요한 문법 버전 선언
- 주로 "3" 버전
services
- 생성하고자 하는 컨테이너 항목들
- service 아래 항목들은 하나하나의 생성할 컨테이너인 것
mongo1, mongo_setup
- 생성할 컨테이너 명
- services 의 아래 항목으로 (들여쓰기 필요) 위치함
image
- 컨테이너가 만들어질 수 있는 기반인 이미지를 지정
- 현재 도커 위에 있는 이미지를 지정해야 함
- 그래야 컨테이너가 만들어지니까
ports
- 포트 포워딩 할 포트를 지정
- <호스트 포트>:<컨테이너 포트> 순서대로
- ! 호스트포트는 중복될 수 없음
- 포트 포워딩에 대하여
-
- 여러개가 올 수 있다는 의미
volumes
- 볼륨 마운트 디렉터리 지정
networks
- 네트워크 지정
- 따로 함수처럼 만들어서 함수명을 써줄 수 있음
- 위 코드에서는
mongo-networks
네트워크를 만들어서 써주었음
- 위 코드에서는
- 내부에서(파일에서) 만들면
driver
- 외부 커맨드에서 네트워크를 이미 만들었으면
external: true
를 써줌 - Docker 네트워크에 대하여
command
- 컨테이너 생성 시 실행시킬 명령어
depends_on
- 컨테이너 생성 우선순위를 지정해줌
- 써준 이름을 수행한 다음 이 컨테이너 생성을 수행하시오
- 컨테이너 생성 우선순위를 지정해줌
deploy
- replicas
- 복제할 개수
- placement
- 설치할 위치
- constraints
- 위치 제약 조건
- [node.role != manager]
- manager가 아닌 노드에 설치하겠다는 의미
- [node.role != manager]
- 위치 제약 조건
- replicas
예2
version: "3"
services:
my-mysql:
image: mysql:5.7
ports:
- "3306:3306"
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=true
- 이게 바로 shell 커맨드에서 아래의 명령과 같은 것
$ docker run --name my-mysql -d -p 3306:3306 mysql:5.7
5.3 이미지 빌드하기
- 이미지 수정이나
Dockerfile
수정안했다면 재빌드 안해도 무방
5.4 Compose 실행하기
docker-compose.yml
저장 후
$ docker-compose up
그럼 이제 빌드한 이미지를 기반으로 컨테이너가 만들어졌을 것
- 새로운 셸에서 컨테이너 프로세스 떠있는지 확인 (mysql)
$ docker ps
up
상태여야 작동 중인 프로세스라는 것
- 이제 MySQL 접속이 가능할 것
$ docker exec -it <컨테이너 ID> bash
> mysql -uroot -p test
mysql> 접속완료
5.5 Compose 종료하기
- 종료 및 remove까지 같이 됨
- 웬만하면 Compose 실행 후 다 사용하면 down 시켜주기
$ docker-compose down
** Error
우리가 작업 중인 폴더가 아니여서 생긴 문제
작업 중인 폴더로 이동하여 down 하니 해결
반응형
LIST
'Docker' 카테고리의 다른 글
[Docker] 도커 네트워크 종류 (0) | 2020.03.28 |
---|---|
[Docker] MongoDB 설치하기 (0) | 2020.03.27 |
[Docker] Volume Mount(볼륨 사용하기) (1) | 2020.03.26 |
[Docker] 이미지 빌드와 컨테이너 실행 (0) | 2020.03.24 |
[Docker] About Dockerfile (0) | 2020.03.23 |