[DOCKER]docker compose

박민하·2022년 7월 20일
0

Deploy

목록 보기
8/15
post-thumbnail

  compose는 컨테이너 간의 관계를 문서화하여, 쉽게 컨테이너를 운영할 수 있게 한다.

  웹 브라우저에서 Wordpress에 접속하면 MySQL에 접속하고, 작업한 결과물을 웹 브라우저로 보내주는 환경을 docker compose를 통해 만들어보자.

✅ wordpress 설치

https://gist.github.com/egoing/b62aa16573dd5c7c5da51fd429a5faa2

  위 주소로 들어가서 명령어(command)와 설정 파일(docker-compose.yml)을 사용해서 실습을 할 수 있다.

1. 네트워크 생성

docker network create wordpress_net

2. 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

  host에 db_data라는 폴더가 생기고, 이 안에 MySQL의 데이터가 저장된다.

3. 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

  host에 app_data라는 폴더가 생기고, 이 안에 wordpress의 데이터가 저장된다.

4. 결과

  이렇게 두 개의 컨테이너는 wordpress_net이라는 네트워크에 연결된 상태가 된다. wordpress를 8080번 포트에 연결되도록 컨테이너를 만들었으니 접속해보면 wordpress를 설치하는 화면이 뜬다.

✅ compose

  docker-compose.yml이라는 파일을 만들고 안에 아래의 명령어를 저장한다.

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 
  • version : compose 파일 버전
  • services : 이하 컨테이너 생성
  • db & app : 컨테이너 이름
  • volumes : host에 연결하는 주소. 현재 디렉토리의 db_data와 컨테이너의 var/lib/mysql에 연결한다는 의미다.
  • environment : 환경변수
  • depends-on : 선행 설치 컨테이너
  • port : 외부에서 접속할 수 있는 컨테이너의 포트 번호. host의 8080포트와 app의 80포트 연결.
  • HOST=<컨테이너이름> : 컨테이너에 접속. db를 적으면 db에 접속된다. 이를 사용하기 위해서는 네트워크를 생성해야 하지만, yml 파일을 만들면 자동으로 네트워크가 생성된다.

  그리고 docker-compose up 명령어를 실행하면, 위의 상황보다 간단히 wordpress 설치 화면을 볼 수 있다. docker-compose down을 실행하면 종료된다.

✅ 정리

  위 사진에서 첫 번째 과정이 shell, 두 번째 과정이 compose에 해당된다. 둘 다 같은 결과를 보이지만 compose를 이용하면 압축 파일 풀듯이 쉽게 컨테이너를 사용할 수 있다.


[출처: 생활코딩]

profile
backend developer 🐌

0개의 댓글