티스토리 뷰

docker-compose docker-compose.yml 이라는 Compose 정의 파일에 시스템 안에서 가동하는 여러 서버들의 구성을 모아서 정의함
이정의 파일은 YAML 형식으로 기술

 

docker-compose.yml 정의 예제

# 버전을 지정(현재 메이저 최신 버전)
version: "3"

# 서비스 정의
services:
    webserver:
        image: ubuntu
        ports:
            - "80:80"
        networks:
            - webnet

    redis:
        image: redis
        networks:
            - webnet

# 네트워크 정의
networks:
    webnet:

# 데이터 볼륨 정의
volumes:
    data-volume:

 

이미지 저장[image]

베이스 이미지가 로컬에 없으면 Docker Hub로 부터 자동 다운로드 함
이미지 태그를 지정하지 않은 경우는 최신 버전(latest)이 다운로드 됨

 

이미지 태그[Image Tag]

* 이미지 태그를 지정하지 않은 경우
services:
webserver:
    image: ubuntu
    
    
* 이미지 태그를 지정한 경우
services:
webserver:
    image: asashiho/dockersample:1.0

 

이미지 빌드[Build]

docker-compose.yml 파일과 Dockerfile 이 같은 경로에 있을떄 아래와 같이 설정할 수 있다

services:
    webserver:
        # current directory 설정
        build: .

 

Dockerfile과 Context지정

임의 이름으로 된 Dockerfile을 빌드 할 때 Dockerfile이 있는 디렉토리의 경로나 Git Repository URL context로 지정

services:
    webserver:
        build:
            context: /data
            dockerfile: Dockerfile-alternate

 

빌드시 인수 지정

docker 이미지를 build 할 때 인수를 args로 지정할 수 있으며, bool 연산자 (true/false/yes/no)를 사용하는 경우는 따옴표로

둘러싸야 하고 변수 값은 docker-compose를 실행하는 머신 위에서만 유효하다.

services:
    webserver:
        build:
            args:
                projectno: 1
                user: asa

 

Container 내에서 작동하는 Command 지정[Command / entrypoint]

컨테이너에서 작동하는 명령은 command로 지정 하며, 베이스 이미지에서 지정되어 있을 때는 그 명령을 덮어 쓴다.

 

Container 내에서 작동하는 Command

command: /bin/bash

 

entrypoint 저정

entrypoint:
    - php
    - -d
    - memory_limit=-1

 

Container 끼리 연결[Links]

다른 컨테이너에 대한 링크 기능을 사용하여 연결하고 싶을때 links를 사용하여 연결할 컨테이너명을 설정
links 항목을 사용하지 않더라도 한 네트워크 안에 있는 서비스끼리 통신을 할 수 있다..
docker-compose.yml 안에 있는 서비스들은 별도로 지정하지 않으면 하나의 네트워크에 속한다.

links:
    - logserver
    # 컨테이너 명과 별도로 Alias 명을 붙임
    - logserver:log01

 

Container끼리 통신[ports/expose]

ports

컨테이너가 외부에 공개하는 포트는 ports로 지정
'호스트 머신의 포트번호: 컨테이너의 포트번호' 를 지정하거나 컨테이너의 포트 번호만 지정
컨테이너의 포트 번호만 지정한 경우는 호스트 머신의 포트 랜덤한 값으로 설정
공개 포트 지정

ports:
    - "3000"
    - "8000:8000"
    - "49100:22"
    - "127.0.0.1:8001:8001"

expose

호스트 머신에 대한 포트를 공개하지 않고 링크 기능을 사용하여 연결하는 컨테이너에게만 포트를 공개 할떄 expose를 지정
로그 서버와 같이 호스트 머신에서 직접 액세스하지 않고 웹 애플리케이션 서버 기능을 갖고 있는 컨테이너를 경유해서만 액세스하고 싶은 경우 등에 사용

컨테이너 내부에만 공개하는 포트 지정

expose:
    - "3000"
    - "8000"

 

서비스의 의존관계 정의[depends_on]

여러 서비스의 의존관계를 정의할 때는 depends_on을 지정
예를 들어 webserver 컨테이너를 시작하기 전에 db 컨테이너와 redis 컨테이너를 시작하고 싶을 때 아래와 같이 정의

의존관계 지정

services:
    webserver:
        build: .
        depends_on:
            - db
            - redis
    redis:
        image: redis
    db:
        image: postgres

※주의 depends_on은 컨테이너의 시작 순서만 제어할 뿐 컨테이너상의 애플리케이션이 이용 가능해 질 때까지 기다리고 제어하지는 않음

 

컨테이너 환경변수 지정[environment / env_file]

컨테이너 안의 환경변수를 지정할 때는 environment를 지정
YAML 배열 형식 또는 해시 형식 중 하나로 변수를 지정

환경변수 지정

# 배열 형식으로 지정
environment:
    - HOGE=fuga
    - FOO
# 해시 형식으로 지정
environment:
    HOGE: fuga
    FOO:

환경 변수 파일에 환경변수를 정의하고 파일을 읽어 올 수 있음
docker-compose.yml 과 동일한 디렉토리에 envfile이라는 이름의 파일을 작성 하고 환경변수를 정의 한뒤
env_file 항목에 연결

 

 envfile

HOGE=fuga
FOO=bar

 

환경변수 파일 읽어 들이기

env_file: envfile

 

여러개의 환경변수 파일 읽어 들이기

env_file:
    - ./envfile1
    - ./app/envfile2
    - /tmp/envfile3

애플리케이션 안에서 사용하는 API 키와 같은 비밀정보의 관리는 컨테이너 오케스트레이션 툴의 기능을 사용하는 것을 권장

컨테어니 정보 설정[container_name / labels]

docker-compose로 생성되는 컨테이너에 이름을 붙일 때는 container_name을 지정
docker 컨테이명은 고유해야 하므로 커스텀명을 지정하면 여러 컨테이너로 스케일할 수 없음

 

컨테이너명 지정

container_name: web-container


컨테이너 라벨 지정

# 배열 형식으로 지정
labels:
    - "com.example.description=Accounting webapp"
    - "com.example.department=Finance"
# 해시 형식으로 지정
labels:
    com.example.description: "Accounting webapp"
    com.example.department: "Finance"

설정한 라벨확인

docker-compose config

 

컨테이너 데이터 관리[volumes / volumes_from]

컨테이너에 볼륨을 마운트할때는 volumes를 지정

 

볼륨지정

volumes:
    - /val/lib/mysql
    - cache/:/tmp/cache

 

읽기 전용 볼륨 지정

볼륨 지정 뒤에 ro를 지정하면 볼륨을 읽기 전용으로 마운트

volumes:
    - ~/configs:/etc/configs/:ro

 

볼륨 마운트 지정

다른 컨테이너로부터 모든 볼륨을 마운트할 때는 volumes_from에 컨테이너명을 지정

volumes_from:
    - log

 

참고

freedeveloper.tistory.com/182?category=808752

 

[docker-compose] 설정 가이드

docker-compose 설정 가이드 docker-compose는 docker-compose.yml 이라는 Compose 정의 파일에 시스템 안에서 가동하는 여러 서버들의 구성을 모아서 정의함 이정의 파일은 YAML 형식으로 기술 레퍼런스: https:/..

freedeveloper.tistory.com

 

'DevOps > Docker-Compose' 카테고리의 다른 글

2. docker-compose 운용 가이드  (0) 2021.04.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함