상현에 하루하루
All 개발자의 하루

docker-compose wp, db 다른 컨테이너, 다른 서비스 설정

( 업데이트: )

기존에는 각 docker-compose.yaml에서 db와 wordpress 모두를 관리했다. 그런데 점차 워드프레스 서비스가 많아지면서 고민하게되었다. 안정성있게 워드프레스 db들만 묶어서 관리하면 어떨까? 여러개로 복제하는 절차도만들고 고가용성을 높이기위해서 한번 도전해보기로했다.

추후에 중간에 레디스같은 캐시서버, 캐시컨테이너를두고 운영하고싶은데 이때도 간단하게 설정할 수 있을 것같다.

docker network

docker-compose는 기본적으로 network을 폴더이름에 맞에 폴더이름_default라는 네트워크로 묶어서 services안에 있는 컨테이너를 네트워크로 실행한다.

네트워크 설정을 해주지않으면 다른 컨테이너에 접속할수 없기때문에 특정 네트워크를 만들어서 운영 할 것이다.

https://www.daleseo.com/docker-compose-networks/ 이 포스트를 보고 영감을 받았다 🙏

  . 
 ├── DB 프로젝트 폴더
 └── WordPress 프로젝트 폴더

DB docker-compose 설정

DB 컨테이너와 DB를 관리할 수있는 phpmyadmin or adminer를 설정

나는 한번도 사용해보지 않은 adminer를 설치하려한다.

폴더 구조

  . DB 프로젝트 폴더
 ├── .env
 └── docker-compose.yaml 
version: "3.7"

services:
  mariadb:
    image: mariadb
    container_name: DB__wordpress
    restart: always
    env_file:
      - ./.env
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    volumes:
      - data:/var/lib/mysql
    expose:
      - 3306
    networks:
      - net

  adminer:
    image: adminer
    container_name: DB__adminer
    restart: always
    ports:
      - 외부포트:8080
    networks:
      - net
volumes:
  data:
networks:
  net:
    driver: bridge
[...]
networks:
  net:
    driver: bridge

위 코드가 net이라는 커스텀 네트워크로 생성한다는 의미! docker command로 네트워크를 생성해주지는 않았다. docker-compose에서 생성되는 network를 기준으로 전부 해당 네트워크로 컨테이너를 영입시켜서 사용할 것이다.

.env 파일에서는 MYSQL ROOT PASSWORD를 환경변수로 정해놓았다.

docker-compose env는 이 공식문서를 참고하였다 https://docs.docker.com/compose/environment-variables/

WordPress docker-compose 설정

  . WordPress 프로젝트 폴더
 ├── .env
 └── docker-compose.yaml 
version: "3.7"

services:
  wordpress:
    container_name: WP__sitename
    image: wordpress:php7.4
    restart: always
    ports:
      - 외부오픈포트:80
    env_file:
      - ./.env
    environment:
      WORDPRESS_DB_HOST: mariadb:3306
      WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
      WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
      WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
    external_links:
      - DB__wordpress:mariadb

networks:
  default:
    external:
      name: db_net
[...] 핵심
external_links:
      - DB__wordpress:mariadb

networks:
  default:
    external:
      name: db_net

https://stackoverflow.com/questions/61132883/connecting-separate-wordpress-docker-compose-stacks-to-an-external-mysql-and-php

위 링크를 참고해서 docker-compose를 만들 수 있었다.

네트워크에서 속해있는 컨테이너를 링크 그리고 해당 서비스는 db_net이라는 네트워크에 속하게 설정

워드프레스가 정상적으로 구동되는 것을 살펴볼 수 있다!