Web/Docker

Docker-compose

tose33 2023. 12. 30. 15:44

어떤 환경에서 어플리케이션을 실행할때 해당 어플리케이션은 여러개의 또 다른 어플리케이션에 종속적일수 있다.

예를들어 웹서버 어플리케이션 컨테이너가 있는데, 이 웹서버는 정보를 저장하는 db가 필요할수 있다.

 

이럴때 docker run 을 통해 웹서버 컨테이너를 만들고, 그 후 db 컨테이너를 만들어야 한다.

run 명령에 옵션으로 포트번호 환경변수등도 다 지정해줘야 한다.

 

docker network 생성

docker network create wordpress_net

 

mysql 컨테이너 생성

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

 

wordpress 컨테이너 생성 

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 network

위에서 wordpress_net 이라는 docker network 를 생성하고 db( mysql ), app( wordpress ) 컨테이너들을 --network wordpress_net 옵션으로 두 컨테이너를 하나의 네트워크로 묶어줬다.

 

이렇게 하나의 네트워크로 묶어줬기 때문에 wordpress 컨테이너를 실행할때 -e "WORDPRESS_DB_HOST=db" 처럼 db 라는 이름으로 db 컨테이너와 app 컨테이너를 연결시켜줄수 있던것이다.

 

docker-compose.yml

docker compose 는 이런 기나긴 명령어를 yml 파일에 미리 정의해 놓고 'docker compose up' 이라는 명령어로 긴 명령어들을 자동으로 실행해준다.

 

version: "3.7"
# docker network create wordpress_net
# docker-compose 에서는 자동으로 네트워크 만들어지고 컨테이너들은 자동 연결됨 
services:
  db: # 컨테이너 이름 
    image: mysql:5.7 # 이미지 
    volumes: # volume: host와 container 매핑 
      - ./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: # wordpress 는 db를 사용하기 때문에 db 컨테이너 먼저 만들어져야함
      - db
    image: wordpress:latest
    volumes:
      - ./app_data:/var/www/html
    ports: # 호스트 8080 포트와 컨테이너 80 포트 연결 
      - "8080:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress_user
      WORDPRESS_DB_PASSWORD: 123456

 

https://www.youtube.com/watch?v=EK6iYRCIjYs

 

 

docker-compose 로 만들어진 컨테이너들은 자동으로 하나의 네트워크에 속하게 된다.

 

 

 

 

 

 

 

 

 

 

ref

https://www.youtube.com/watch?v=EK6iYRCIjYs