[원티드 챌린지 2/4] docker compose

jaeyunim00·2023년 8월 10일
0

Cloud

목록 보기
4/8
post-thumbnail

도커 컴포즈란?

도커 컴포즈란 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구이다.

워드프레스를 실행할때

워드프레스는 프로그램(워드프레스)과 데이터베이스(MySQL)를 같이 띄워야한다.

게다가 데이터베이스가 먼저 띄워진 상태에서 프로그램을 띄워야만 한다(의존성)

compose를 사용했을 때와 사용하지 않았을 때의 차이를 느껴보고, compose파일에 대해 자세히 알아보자.


docker compose가 없다면

  1. 네트워크 생성하기
    docker network create wordpress_net

  2. 컨테이너 실행하기

docker \
run \
    --name "db" \
    -v "$(pwd)/db_data:/var/lib/mysql" \
    -e "MYSQL_ROOT_PASSWORD=root_pass" \
    -e "MYSQL_DATABASE=wordpress" \
    -e "MYSQL_USER=docker_pro" \
    -e "MYSQL_PASSWORD=docker_pro_pass" \
    --network wordpress_net \
mysql:latest
docker \
    run \
    --name app \
    -v "$(pwd)/app_data:/var/www/html" \
    -e "WORDPRESS_DB_HOST=db" \
    -e "WORDPRESS_DB_NAME=wordpress" \
    -e "WORDPRESS_DB_USER=docker_pro" \
    -e "WORDPRESS_DB_PASSWORD=docker_pro_pass" \
    -e "WORDPRESS_DEBUG=1" \
    -p 8000:80 \
    --network wordpress_net \
wordpress:latest

이러한 과정을 거치면 문제없이 8000포트로 워드프레스를 실행할 수 있다.

또한 따로 정의한 wordpresss_net네트워크에도 문제없이 컨테이너가 추가된걸 확인할 수 있다.


docker compose를 사용한다면

  1. docker-compose.yml 파일 만들어주기
version: "3.0"

services:
  db:
    image: mysql:latest
    volumes:
      - ./db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_pass
      MYSQL_DATABASE: wordpress
      MYSQL_USER: docker_pro
      MYSQL_PASSWORD: docker_pro_pass
  
  app:
    depends_on: 
      - db
    image: wordpress:latest
    volumes:
      - ./app_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: docker_pro
      WORDPRESS_DB_PASSWORD: docker_pro_pass
  1. docker-compose up 명령하기

이런과정을 거치기만 하면 워드프레스가 실행된다.

app폴더와 db폴더가 자동으로 마운트됐고, 심지어 네트워크를 따로 지정해주지 않았는데도, test_docker_default라는 이름으로 생성된걸 볼 수 있다.

이 네트워크 안에는 당연히 app과 db컨테이너가 물려있을 것이다.

사용하지 않을 이유가 없다!!!
너무 간편하고, yml파일만 전달한다면 누구든 워드프레스를 가볍게 실행할 수 있을 것이다.


도커 컴포즈 파일의 구성

  • Version(options)
  • Services(required)
  • Networks
  • Volumes
  • Configs
  • Secrets

이렇게 구성되어 있다.

여기서 version와 필수 구성인 services에 대해 알아보자.

다른 구성요소는 공식사이트 를 참고해서 알아보면 되겠다.

Version(옵션)

  • version 속성은 이전 버전과의 호환성을 위해 정의 되는데, compose씨는 최신 버전을 사용하는걸 선호한다고한다 (3버전)
  • version 공식문서

Services(필수)

  • 실행하려는 컨테이너들을 정의하는 역할을한다.
  • 이름, 이미지, 포트 매핑, 환경 변수, 볼륨 등을 포함한다.
  • 위의 정보들을 가지고 컨테이너를 생성하며 관리한다.
  • images : 컨테이너를 생성할 때 쓰일 이미지 지정한다.
  • build : 정의된 도커파일에서 이미지를 빌드해 서비스의 컨테이너를 생성하도록 설정한다.
  • environment : 환경 변수 설정이다. --env, -e 옵션과 동일하다.
  • command : 컨테이너가 실행될 때 수행할 명령어, docker run 명령어의 마지막에 붙는 커맨드와 동일한다.
  • depends_on : 컨테이너 간의 의존성을 주입한다, 명시된 컨테이너가 먼저 생성되고 실행된다.
  • ports : 개방할 포트를 지정한다. -p 옵션과 동일하다.
  • expose : 링크로 연계된 컨테이너에게만 공개할 포트를 설정한다.
  • volumes : 컨테이너에 볼륨을 마운트한다.-v 옵션과 동일하다.
  • restart : 컨테이너가 종료될 때 재시작 정책을 정한다.(no: 재시작X, always: 외부에 영향에 의해 종료 되었을 때 항상 재시작, on-failure: 오루가 있을 시에 재시작)

도커 컴포즈 명령어

docker-compose에 붙일 수 있는 명령어

up : 도커 컴포즈 파일로, 컨테이너를 생성하기
-f : 도커 컴포즈 파일 지정하기 (지정하지 않아도 자동으로 docker-compose.yml을 찾음)
-d : 백그라운드에서 실행하기

공식문서


개인적으로 궁금했던거에 대한 답변들

: 실무에서 compose up을 하는 경우는 어떤 경우인가요?
답변 모음 :

profile
IT Note

0개의 댓글