기존에는 각 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
Code language: CSS (css)
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
Code language: JavaScript (javascript)
[...]
networks:
net:
driver: bridge
Code language: CSS (css)
위 코드가 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
Code language: CSS (css)
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
Code language: JavaScript (javascript)
[...] 핵심
external_links:
- DB__wordpress:mariadb
networks:
default:
external:
name: db_net
Code language: CSS (css)
위 링크를 참고해서 docker-compose를 만들 수 있었다.
네트워크에서 속해있는 컨테이너를 링크 그리고 해당 서비스는 db_net이라는 네트워크에 속하게 설정
워드프레스가 정상적으로 구동되는 것을 살펴볼 수 있다!