[Docker] Docker compose

그냥·2022년 7월 19일
0

docker

목록 보기
4/6

1. docker-compose와 dockerFile

정의

1) docker-compose: 앱을 구성하는 서비스를 docker-compose.yml에 정의하여 docker-compose up을 실행하여 하나의 명령으로 앱을 실행하는 것이다.
2) dockerFile: 사용자가 이미지를 만들기 위해 호출할 수 있는 명령이 포함된 간단한 텍스트 파일이다.




2. 일반 vs docker-compose

1) 일반적인 컨테이너 만드는 방법

docker network create wordpress_net

docker \
run \
    --name "db" \
    -v "$(pwd)/db_data:/var/lib/mysql" \
    -e "MYSQL_ROOT_PASSWORD=123456" \
    -e "MYSQL_DATABASE=wordpress" \
    -e "MYSQL_USER=wordpress_user" \
    -e "MYSQL_PASSWORD=123456" \
    --network wordpress_net \
mysql:5.7

docker \
    run \
    --name app \
    -v "$(pwd)/app_data:/var/www/html" \
    -e "WORDPRESS_DB_HOST=db" \
    -e "WORDPRESS_DB_USER=wordpress_user" \
    -e "WORDPRESS_DB_NAME=wordpress" \
    -e "WORDPRESS_DB_PASSWORD=123456" \
    -e "WORDPRESS_DEBUG=1" \
    -p 8080:80 \
    --network wordpress_net \
wordpress:latest
  • docker run으로 컨테이너 실행시 수많은 옵션들을 비효율적인 명령어로 설정하여야 한다.
  • 가독성이 매우 떨어진다.

2) docker-compose.yaml로 컨테이너 만드는 방법

version: "3.7"

services:
  db:
    image: mysql:5.7
    volumes:
      - ./db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress_user
      MYSQL_PASSWORD: 123456
  
  app:
    depends_on: 
      - db
    image: wordpress:latest
    volumes:
      - ./app_data:/var/www/html
    ports:
      - "8080:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress_user
      WORDPRESS_DB_PASSWORD: 123456 
  • depends_on: db 컨테이너에 의존하고 있어 db 컨테이너가 만들어진 후에 app 컨테이너가 만들어 질 수 있다.
  • image: container의 기반이 될 image
  • volumes: 마운트 될 local:container 내 디렉토리
  • ports: host:container 포트 설정
  • restart: always : 컨테이너가 실행 중 중단됐을 때(여기서는 어떤 특정 서비스가 ready 상태가 아직 안 돼 중단된 경우) 컨테이너를 다시 알아서 재시작을 해준다.
  • environment: container 생성에 필요한 환경 변수 설정


출처

생활코딩: Docker compose 를 이용해서 복잡한 도커 컨테이너를 제어하기

0개의 댓글