Docker

[Docker] docker-compose 란? (compose 실행 및 종료)

nang. 2020. 3. 26. 21:50
반응형
SMALL

docker-compose 다루기

5.1 docker-compose?

한마디로 여러 컨테이너의 실행을 한 번에 관리할 수 있게 해주는 것

  • 예를들어
도커 컨테이너로 시스템을 구축하면 하나 이상의 컨테이너가 서로 통신하며, 그 사이에 의존관계가 생긴다.

이런 방식으로 시스템을 구축하다보면 단일 컨테이너를 다룰 때는 문제가 되지 않던 부분에도 주의가 필요하게 된다.

이때 필요한 것이 Docker Compose 이다.
$ docker-compose version
  • Compose
    • yaml 포맷(확장자 .yml)으로 기술된 설정 파일 (스크립트 파일)
    • build + run 을 한번에

<순서대로 진행해도 됨>

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가 아닌 노드에 설치하겠다는 의미

예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