본문 바로가기
#01.생활코딩/+04.Docker

[생활코딩] Docker compose

by 돌비오 2023. 4. 16.
728x90

 

강의 기본 코드링크

 

docker-compose.md

GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

 

 

 

 

Docker compose

 

기본 shell 에서 두 컨테이너 만들어 연결하기
docker network create wordpress_net   # 두 컨테이너의 네트워크 만들기


docker \
run \               # 첫번째 db mysql 컨테이너 만들기
    --name "db" \
    -v "$(pwd)/db_data:/var/lib/mysql" \     # 볼륨만들기.
 # 현재 위치 호스트에 db_data 디렉 만들고 컨테이너 내부의 /var/lib/mysql 디렉과 연결
   
    -e "MYSQL_ROOT_PASSWORD=123456" \   # mysql 접속하기 위한 환경변수
    -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 \                         # 호스트 8080 포트와 wordpress 컨테이너 80포트 연결
    --network wordpress_net \
wordpress:latest

 

 

 

 

docker-compose.yml 파일로 만들기
version: "3.7"

services:
  db:                 # 첫번째 컨테이너 => mysql db
    image: mysql:5.7
    volumes:     
      - ./db_data:/var/lib/mysql      # 호스트의 db_data 디렉토리 생성해서 컨테이너의 /var/lib/mysql 디렉과 연결
    restart: always
    environment:                          # mysql 접속 환경변수
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress_user
      MYSQL_PASSWORD: 123456
  
  app:                    # 두번째 컨테이너 => wordpress
    depends_on:    # mysql db 컨테이너를 wordpress 컨테이너보다 먼저 실행한다는 의미
      - db
    image: wordpress:latest
    volumes:
      - ./app_data:/var/www/html
    ports:
      - "8080:80"     # 호스트 8080 포트와 wordpress 80포트 연결.
                             # 외부에서 wordpress만 연결하기 위함. (db는 외부에서 연결되면 안되지)

    restart: always
    environment:   # wordpress 컨테이너에서 mysql 컨테이너에 접속하기 위한 환경변수
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress_user
      WORDPRESS_DB_PASSWORD: 123456 

 

 

 

볼륨을 쓰는 이유

volumes:     
      - ./db_data:/var/lib/mysql 

컨테이너 안에 있는 /var/lib/mysql 디렉토리에 데이터를 저장하면

컨테이너를 껐을때 데이터가 유실된다.

 

그래서 호스트 위치에 db_data 라는 디렉토리를 만들어

이 곳에 데이터를 저장하겠다는 의미.

 

 

 

※ shell 에서 docker network create wordpress_net 라고 선언해야

두 컨테이너의 네트워크가 생성되는 것과 달리

docker compose 에서는 두 컨테이너의 네트워크를 자동으로 생성한다.

728x90