IT기술/도커 (docker)

Docker 다중 컨테이너 연동 완벽 가이드: WordPress와 MySQL 구축하기

후스파 2025. 7. 7. 19:36
반응형

오늘은 여러 개의 컨테이너를 연동하여 워드프레스를 구축하는 방법에 대해 알아보겠습니다. 워드프레스는 웹사이트를 만들기 위한 인기 있는 소프트웨어로, 이를 컨테이너 환경에서 실행하기 위해서는 웹 서버, 데이터베이스, PHP 런타임 등 다양한 컨테이너를 구성해야 합니다. 이 과정에서 도커를 활용하여 효율적으로 운영할 수 있습니다.


도커 네트워크 생성 및 삭제

워드프레스를 실행하기 위해서는 워드프레스 컨테이너와 MySQL 컨테이너가 필요합니다. 이 두 컨테이너는 서로 연결되어 있어야 하며, 이를 위해 가상 네트워크를 생성해야 합니다. 네트워크를 생성하고 두 개의 컨테이너를 해당 네트워크에 소속시키면, 컨테이너 간의 통신이 가능해집니다.

도커 네트워크 생성

도커 네트워크를 생성하는 명령어는 다음과 같습니다:

docker network create netex001

실행 결과:

a791f89c8c43ccf250a0dae428bda6655c8654fbfc1404cfb1e5cd8671884c3e

이 명령어를 실행하면 새로운 네트워크가 생성됩니다. 생성된 네트워크를 확인할 수 있는 명령어는 다음과 같습니다:

docker network ls

출력 예시:

NETWORK ID     NAME       DRIVER    SCOPE
cb4df52b6c36   bridge     bridge    local
c30ea96f3f05   host       host      local
a791f89c8c43   netex001   bridge    local
f425b0135de3   none       null      local

네트워크 삭제

필요 시 네트워크를 삭제할 수 있습니다:

docker network rm netex001

네트워크 관련 주요 하위 커맨드

네트워크 관련 커맨드는 다음과 같습니다:

  • connect: 네트워크에 컨테이너를 새롭게 접속
  • disconnect: 네트워크에서 컨테이너의 접속을 해제
  • create: 네트워크를 생성
  • inspect: 네트워크 상세 정보를 확인
  • ls: 네트워크의 목록 확인
  • prune: 아무 컨테이너도 접속하지 않은 네트워크 모두 삭제
  • rm: 대상 네트워크 삭제

고급 네트워크 설정

# 커스텀 서브넷으로 네트워크 생성
docker network create --driver bridge \
  --subnet=172.20.0.0/16 \
  --ip-range=172.20.240.0/20 \
  custom-network

# 네트워크 상세 정보 확인
docker network inspect netex001

MySQL 컨테이너 실행

MySQL 컨테이너를 실행하기 위해서는 여러 가지 옵션을 설정해야 합니다. 다음은 MySQL 컨테이너를 실행하는 예시입니다:

docker run --name mysql_container -dit --net=netex001 -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root_password \
-e MYSQL_DATABASE=database_name \
-e MYSQL_USER=user_name \
-e MYSQL_PASSWORD=user_password mysql \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci \
--default-authentication-plugin=mysql_native_password

MySQL 컨테이너 옵션 설명

--name컨테이너 이름
--net네트워크 이름
-p포트번호 설정 (호스트:컨테이너)
-e MYSQL_ROOT_PASSWORDMySQL 루트 패스워드
-e MYSQL_DATABASE데이터베이스 이름
-e MYSQL_USER사용자 이름
-e MYSQL_PASSWORD사용자 패스워드

MySQL 추가 설정 옵션

# 볼륨 마운트를 통한 데이터 영속성
docker run --name mysql_persistent -dit --net=netex001 -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root_password \
-e MYSQL_DATABASE=wordpress_db \
-e MYSQL_USER=wp_user \
-e MYSQL_PASSWORD=wp_password \
-v mysql_data:/var/lib/mysql \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci \
--default-authentication-plugin=mysql_native_password

# 커스텀 설정 파일 사용
docker run --name mysql_custom -dit --net=netex001 -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root_password \
-v /path/to/custom.cnf:/etc/mysql/conf.d/custom.cnf \
mysql:8.0

워드프레스 컨테이너 실행

이제 워드프레스 컨테이너를 실행해보겠습니다. 다음은 워드프레스 컨테이너를 실행하는 예시입니다:

docker run --name wordpress_container -dit --net=netex001 -p 8080:80 \
-e WORDPRESS_DB_HOST=mysql_container \
-e WORDPRESS_DB_NAME=database_name \
-e WORDPRESS_DB_USER=user_name \
-e WORDPRESS_DB_PASSWORD=user_password wordpress

워드프레스 컨테이너 옵션 설명

--name컨테이너 이름
--net네트워크 이름
-p포트번호 설정 (호스트:컨테이너)
-e WORDPRESS_DB_HOST데이터베이스 컨테이너명
-e WORDPRESS_DB_NAME데이터베이스 이름
-e WORDPRESS_DB_USER데이터베이스 사용자 이름
-e WORDPRESS_DB_PASSWORD데이터베이스 패스워드

워드프레스 고급 설정

# 볼륨 마운트를 통한 테마/플러그인 영속성
docker run --name wordpress_advanced -dit --net=netex001 -p 8080:80 \
-e WORDPRESS_DB_HOST=mysql_container \
-e WORDPRESS_DB_NAME=wordpress_db \
-e WORDPRESS_DB_USER=wp_user \
-e WORDPRESS_DB_PASSWORD=wp_password \
-e WORDPRESS_TABLE_PREFIX=wp_ \
-e WORDPRESS_DEBUG=1 \
-v wordpress_data:/var/www/html \
wordpress:latest

# SSL 인증서와 함께 HTTPS 설정
docker run --name wordpress_ssl -dit --net=netex001 -p 443:443 -p 80:80 \
-e WORDPRESS_DB_HOST=mysql_container \
-e WORDPRESS_DB_NAME=wordpress_db \
-e WORDPRESS_DB_USER=wp_user \
-e WORDPRESS_DB_PASSWORD=wp_password \
-v /path/to/ssl:/etc/ssl/certs \
wordpress:latest

Docker Compose를 활용한 통합 관리

docker-compose.yml 파일 작성

version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: mysql_container
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: wp_password
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - wordpress_network
    command: >
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
      --default-authentication-plugin=mysql_native_password

  wordpress:
    image: wordpress:latest
    container_name: wordpress_container
    restart: always
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: mysql_container
      WORDPRESS_DB_NAME: wordpress_db
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: wp_password
      WORDPRESS_TABLE_PREFIX: wp_
    volumes:
      - wordpress_data:/var/www/html
    networks:
      - wordpress_network
    depends_on:
      - mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin_container
    restart: always
    ports:
      - "8081:80"
    environment:
      PMA_HOST: mysql_container
      PMA_PORT: 3306
      MYSQL_ROOT_PASSWORD: root_password
    networks:
      - wordpress_network
    depends_on:
      - mysql

volumes:
  mysql_data:
  wordpress_data:

networks:
  wordpress_network:
    driver: bridge

Docker Compose 실행

# 서비스 시작
docker-compose up -d

# 로그 확인
docker-compose logs -f

# 서비스 중지
docker-compose down

# 볼륨까지 삭제
docker-compose down -v

컨테이너 상태 확인 및 관리

컨테이너 상태 모니터링

# 실행 중인 컨테이너 확인
docker ps

# 모든 컨테이너 확인
docker ps -a

# 컨테이너 로그 확인
docker logs wordpress_container
docker logs mysql_container

# 실시간 로그 모니터링
docker logs -f wordpress_container

컨테이너 내부 접근

# WordPress 컨테이너 내부 접근
docker exec -it wordpress_container /bin/bash

# MySQL 컨테이너 내부 접근
docker exec -it mysql_container mysql -u root -p

# MySQL 데이터베이스 확인
docker exec -it mysql_container mysql -u wp_user -p wordpress_db

네트워크 연결 확인

# 네트워크 상세 정보 확인
docker network inspect netex001

# 컨테이너 간 연결 테스트
docker exec -it wordpress_container ping mysql_container

결론

이제 워드프레스와 MySQL 컨테이너가 성공적으로 연동되어 실행되고 있습니다. 도커를 이용한 컨테이너 환경은 개발과 배포를 효율적으로 할 수 있는 방법입니다.
핵심 포인트:

  • 커스텀 네트워크 생성을 통한 컨테이너 간 안전한 통신
  • 환경 변수 설정으로 데이터베이스 연결 정보 관리
  • 볼륨 마운트 활용으로 데이터 영속성 보장
  • Docker Compose 활용으로 다중 컨테이너 관리 자동화
  • 모니터링과 로그 관리를 통한 안정적인 운영

다양한 컨테이너를 활용하여 더 복잡한 환경을 구축할 수 있으니, 앞으로도 도커를 활용한 다양한 프로젝트에 도전해보시기 바랍니다. 마이크로서비스 아키텍처와 DevOps 환경에서 이러한 컨테이너 연동 기술은 필수적인 역량이 되고 있습니다.

반응형