본문 바로가기

InfoSec Log/Docker

[Docker] Docker-compose를 이용하여 워드프레스 및 DB 환경 구축

Docker-compose는 다수의 컨테이너를 빠르고, 또한 쉽게 생성이 가능하도록 도움을 주는 도구이다.


 

 

도커 컴포즈를 이용하여 환경을 구축하기 위해서는 먼저, 위와 같은 내용이 담긴 docker-compose.yml 파일을 만든다.

services:
  db:
    # We use a mariadb image which supports both amd64 & arm64 architecture
    image: mariadb:10.6.4-focal
    # If you really want to use MySQL, uncomment the following line
    #image: mysql:8.0.27
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=somewordpress
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
    expose:
      - 3306
      - 33060
  wordpress:
    image: wordpress:latest
    volumes:
      - wp_data:/var/www/html
    ports:
      - 80:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=wordpress
volumes:
  db_data:
  wp_data:

 

db와 wordpress 두 대의 컨테이너를 만들고, 해당 컨테이너의 이미지로는 각각 mariadb 10.6.4 version, wordpress 최신버전이다. 그리고 볼륨을 통해, LocalhostPC와 컨테이너를 마운트시키고, 포트 포워딩을 통해, HostPC의 기본 웹서버 포트인 80포트를 통해, 컨테이너의 80포트로 포워딩 시킨다. 환경 설정은 위와 같이 db와 wordpress를 일치시킨다. 그 후 파일을 저장 후, 아래와 같이 docker-compose tool을 install 한다.

 

docker-compose 설치 후, docker-compose up -d 를 통해 도커 컴포즈를 실행시키면, 박스에 보이는 것과 같이, 두 대의 컨테이너가 생성되어 실행 중인 것을 볼 수 있다.

#다운로드 가능한 목록 최신화 및 docker-compose tool 다운로드.
apt-get update && apt-get intall docker-compose -y

#docker-compose 실행.
docker-compose up -d

#현재 실행 중인 도커 컨테이너 목록 확인.
docker ps

 

 

LocalhostPC의 80포트로 접속해보면, 위와 같이 워드 프레스 환경이 정상적으로 구축이 되어진 것을 볼 수 있다.

 

위 사진을 통해 db 또한 워드프레스 웹서버와 연동되어 정상적으로 구축이 되었음을 보여준다.

#docker_db_1이라는 컨테이너 bash 쉘에 직접적으로 접속.
docker exec -it docker_db_1 bash

#mysql root user로 실행.
mysql -uroot -p

#저장되어 있는 DB목록들을 보여주는 sql문
SHOW DATABASES;

#DB 접속 종료
exit

 

 

 

 

 

References

 

https://github.com/docker/awesome-compose/tree/master/official-documentation-samples/wordpress/