본문 바로가기
IT/기타

Docker-compose 작성 예시

by JGSHIN 2025. 2. 17.
SMALL
  1. 도커 컴포즈 작성 예시

Mariadb WordPress를 도커 컴포즈로 만들어보자.

#vi docker-compose.yml

 

version: '2'

services:

  db:

    image: mariadb:10.5

    volumes:

      - ./mysql:/var/lib/mysql

    restart: always #도커가 죽이면 자동으로 재실행

    environment:

      MYSQL_ROOT_PASSWORD: wordpress

        MYSQL_DATABASE: wordpress

        MYSQL_USER: wordpress

        MYSQL_PASSWORD: wordpress

     

  wordpress:

    image: wordpress:latest

    volumes:

      - ./wp:/var/www/html

    ports:

      - "8000:80"

    restart: always

    environment:

      WORDPRESS_DB_HOST: db:3306

        WORDPRESS_DB_USER: wordpress

        WORDPRESS_DB_PASSWORD: wordpress

 

실행  # docker-compose up

중지 # docker-compose down

 

컴포즈 문법

 

=======================================================

version: '3' 버전에 따라 지원하는 도커 엔진 버전도 다르다.

=======================================================

 

=======================================================

service: 실행할 컨테이너 정의. docker run --name django와 같다고 할수있다.

 

service:

 diango:

  …

 

=======================================================

image: 컨테이너에 사용할 이미지 이름과 태그. 태그를 생략하면 자동으로 latest. 이미지가 없으면 자동으로 pull

 

  service:

   django:

    image: django-sample

 

=======================================================

ports: 컨테이너와 연결할 포트(). (호스트포트):(컨테이너 포트)

 

  services:

   django:

   ...

   ports:

   - "8000:8000"

 

=======================================================

environment: 컨테이너에서 사용할 환경변수(). {환경변수이름}:{}

 

services:

  mysql:

  ...

  environment:

    - MYSQL_ROOT_PASSWORD=somewordpress: '3'

 

=======================================================

volumes: 마운트하려는 디렉터리(). {호스트 디렉터리}:{컨테이너 디렉터리}

 

services:

 django:

 ...

 volumes:

   - ./app:/app

 

=======================================================

restart: 재시작 정책. 종류: "no", always, on-failure, unless-stopped

 

services:

  django:

    restart: always

=======================================================

build: 이미지를 자체 빌드 후 사용. image 속성 대신 사용. 여기에 사용할 별도의 도커 파일이 필요함

 

  django:

   build:

    context: .

    dockerfile: ./compose/django/Dockerfile-dev

=======================================================

command : 도커 실행 후 도커내에 실행할 명령어

 

version: '2'

 

services:

   app:

     image: php:7

     volumes:

       - ./hello.php:/app/hello.php

     command: "php /app/hello.php"

 

=========================================================================================

Container_name: 생략 자동으로 부여. "디렉터리명_서비스명_n". Docker run --name옵션과 동일

 

Ports: 서비스 내부 포트와 외부 호스트 포트를 지정하여 바인드. 외부 노출 포트 지정. Docker run -p 옵션과 동일.

 

Expose: 호스트 운영체제와 직접 연결하는 포트를 구성하지 않고, 서비스만 포트를 노출. 필요 링크로 연결된 서비스와 서비스 간의 통신만 사용

 

Networks: 최상위 레벨의 networks 정의된 네트워크 이름을 작성. Docker run --net(--network) 옵션과 동일

 

Volumes: 서비스 내부 디렉터리와 호스트 디렉터리를 연결하여 데이터 지속성 설정. Docker run -v(--volume) 옵션과 동일

 

Environment: 서비스 내부 환경 변수 설정. 환경 변수가 많은 경우에는 파일(*.env) 만들어 env_file 옵션에 파일명을 지정(env_file: ./envfile.env). Docker run -e 옵션과 동일

 

Command: 서비스가 구동 이후 실행할 명령어 작성. Docker run 마지막에 작성되는 명령어.

 

Restart: 서비스 재시작 옵션지정(no: 수동 재시작, always: 컨테이너 수동 제어를 제외하고 항상 재시작, on-failure: 오류가 있을 재시작). Docker run --restart 옵션과 동일

 

Depends_on: 서비스 간의 종속성을 의미하며 먼저 실행해야 하는 서비스를 지정하여 순서 지정. 옵션에 지정된 서비스가 먼저 시작됨.

 

명령어 도커 명령 도커 컴포즈 옵션
컨테이너(서비스)명 --name container_name:
포트 연결 -p ports:
네트워크 구성 --net networks:
재시작 --restart restart:
볼륨 -v (--volume) volumes:
환경 변수 -e environment:
컨테이너 간 연결 --link 컨테이너명:서비스명 depends_on:
이미지 이미지명 image:

 

 

=========================================================================================

 

 

version: "3.9"

services:

  mydb:

    image: mysql:5.7

    container_name: mysql_app

    volumes:

      - db_data:/var/lib/mysql

  myweb:

    depends_on:

      - mydb

    image: wordpress:latest

    container_name: wordpress_app

    volumes:

      - web_data:/var/www/html

    volumes:

      db_data: {}                         # { } 생략 가능, 도커가 관리하는 볼륨 생성을 의미

      web_data: {}

 

 

=========================================================================================

 

 

version: "3.9"

services:

  myweb:

    depends_on:

      -mydb

    image: wordpress:latest

    container_name: wordpress_app

    volumes:

      - web_data:/var/www/html

      - /home/kevin/my_wp/myweb-log:/var/log

 

=========================================================================================

 

 

 

version: "3.9"

services:

# 첫 번째 서비스 정의

  mydb:

    # 도커 허브에서 제공하는 mysql:8.0 이미지 선택.

    image: mysql:8.0

    # 서비스 컨테이너 이름 지정.

    container_name: mysql_app

    # 최상위 레벨에 정의 mydb_data 볼륨 지정

    volumes:

      - mydb_data:/var/lib/mysql

    # 수동 제어를 제외한 컨테이너 종료 시 자동 재시작

    restart: always

    # 호스트 운영체제와 컨테이너의 3306 포트를 바인드한다.

    # workbench 같은 클라이언트 도구와 연결하기 위해 필요하다.

    prots:

      - "3306:3306"

    # 최상위 레벨에 정의한 backend-net을 기본 네트워크로 지정한다.

    networks:

      - backend-net

    # 서비스가 사용할 환경 변수를 지정한다.

    environment:

      MYSQL_ROOT_PASSWORD: Admin123!

      MYSQL_DATABASE: TESTDB

      MYSQL_USER: usertest

      MYSQL_PASSWORD: usertestAdmin123!

  # 두 번째 서비스를 작성한다.

  myweb:

    # myweb 서비스가 실행되기 전에 mydb 서비스를 먼저 실행하는 의존성을 설정한다.

    depends_on:

      - mydb

    # wordpress:5.7 이미지를 지정한다.

    image: wordpress:5.7

    # 서비스 컨테이너 이름을 지정한다.

    container_name: wordpress_app

    # 호스트 운영체제의 8888 포트와 컨테이너의 80 포트를 바인드한다.

    ports:

      - "8888:80"

    # backend-net으로 mydb 서비스와 동일 네트워크로 지정하고,

    # 외부 연결을 위한 네트워크를 위해 fronetend-net 지정을 가정한다.

    # docker network connect ~ 명령으로 두 번째 네트워크를 추가하는 것과 같다.

    networks:

      - backend-net

      - frontend-net

    # 컨테이너 데이터 지속성을 위해 도커 볼륨 기법과 바인드 마운트 기법을 사용한다.

    volumes:

      - myweb_data:/var/www/html

      - ${PWD}/myweb-log:/var/log

    # 수동 제어를 제외한 컨테이너 종료 시 자동 재시작한다.

    restart: always

    # 서비스가 사용할 환경 변수를 저장한다.

    environment:

      WORDPRESS_DB_HOST: mydb:3306

      WORDPRESS_DB_USER: usertest

      WORDPRESS_DB_PASSWORD: usertestAdmin123!

      WORDPRESS_DB_NAME: TESTDB

    # 도커 컴포즈 애플리케이션이 사용할 네트워크 생성. docker network create와 동일하다.

    networks:

      frontend-net: {}

      backend-net: {}

    # 도커 컴포즈 애플리케이션이 사용할 볼륨 생성. docker volume create와 동일하다.

    volumes:

      mydb_data: {}

      myweb_data: {}

 

 

 

=========================================================================================

 

 

version: '3.8'

services:

  server_web:

    image: httpd:2

  servcer_db:

    image: redis:6-alpine

 

=========================================================================================

 

 

 

version: '3'

services:

  pyfla_app1:

    build: ./pyfla_app1

    ports:

    - "5001:5000"

  pyfla_app2:

    build: ./pyfla_app2

    ports:

    - "5002:5000"

  pyfla_app3:

    build: ./pyfla_app3

    ports:

    - "5003:5000"

  nginx:

    build: ./nginx_alb

    ports:

    - "8080:80"

    depends_on:

      - pyfla_app1

      - pyfla_app2

      - pyfla_app3

 

LIST

'IT > 기타' 카테고리의 다른 글

Docker (nginx+tomcat+mysql) - 1  (0) 2025.02.17
Docker 설치 방법(yum)  (0) 2025.02.17
Docker-compose 설치 방법  (0) 2025.02.17
Dockerfile 작성 예시 - 2  (0) 2025.02.17
Dockerfile 작성 예시  (0) 2025.02.17
📧 이메일 문의
by @ 2025 JGSHIN