Wordpress란?!
CMS(Content Management System, 콘텐츠 관리 시스템) 중에서 가장 대표적인 플랫폼으로, 웹 사이트를 만들기 위한 소프트웨어라고 생각하면 된다.
나도 워드프레스를 사용해본 적은 없지만.. (사실 도커 공부하면서 처음 들어봤다ㅎ)
워드프레스 프로그램 외에도 아파치나 DB, PHP 런타임 등을 필요로 하기 때문에
무언가 구축 연습을 할 때에 많이 사용된다고 한다.
도커를 이용해 워드프레스를 구축할 때는 크게 3가지가 필요하다.
1️⃣ 네트워크
2️⃣ MySQL 컨테이너 (컨테이너가 아닌, 도커 외부에 두는 방식도 가능함.)
3️⃣ Wordpress 컨테이너
※ Wordpress 공식 이미지에는 워드프레스 프로그램과 아파치, PHP 런타임이 함께 포함되어 있다!!
웹 사이트에 작성된 내용들을 DB에 저장해두고 있다가, 웹 사이트를 열람할 때 DB에서 데이터를 가져와서 보여주는 시스템이기 때문에 DB와 Wordpress 컨테이너가 각각 필요하고, 또 이 두 컨테이너가 연결되어야 하기 때문에 가상 네트워크를 만들어서 이 네트워크에 두 컨테이너를 연결함으로써 두 컨테이너가 통신할 수 있도록 하는 것이다.
이렇게 Wordpress 구축하는 연습을 2가지 방법으로 해보려고 한다.
[방법1] 여러 컨테이너 생성 및 연동하기
[방법2] 도커 컴포즈 사용하기
첫 번째 방법은 위에서 얘기한 1, 2, 3번 요소들을 각각 만들고 연동해주는 방식이다. 이 방법을 통해서는 컨테이너를 생성하고 실행하는 명령어들을 연습해볼 수 있을 것이다.
두 번째 방법은 도커 컴포즈를 이용하는 것이다. 도커 컴포즈가 무엇이고, 어떻게 작동하는지는 다음 포스팅에서 다뤄보도록 하겠다.
여러 컨테이너 생성 및 연동하기
첫 번째, 여러 컨테이너를 만들고 연동하는 방법이다.
워드프레스 구축을 위해 필요한 3가지 요소들을 네트워크 생성 -> MySQL 컨테이너 생성 -> 워드프레스 컨테이너 생성 순서대로 진행해주면 된다.
Step1. 네트워크 생성
docker network create wordpress_net
- docker network create : 도커 네트워크를 생성하는 커맨드
- wordpress_net : 네트워크 이름. 원하는 대로 지으면 됨.
네트워크 생성 후 ls 커맨드로 네트워크 목록을 출력해보면 가장 밑에 "wordpress_net"라는 이름의 네트워크가 생성되었음을 확인할 수 있다.
참고로, network
라는 상위 커맨드와 함께 사용할 수 있는 하위 커맨드들은 다음과 같다.
container
, image
와 같은 상위 커맨드는 생략 가능한 경우들이 있는 반면, network
는 어떤 경우에도 생략해서는 안된다.
하위 커맨드 | 내용 |
connect | 컨테이너를 도커 네트워크에 연결 |
disconnect | 컨테이너의 도커 네트워크 연결 해제 |
create | 도커 네트워크 생성 |
inspect | 도커 네트워크의 상세 정보 출력 |
ls | 도커 네트워크의 목록 출력 |
prune | 현재 컨테이너가 접속하지 않은 네트워크 모두 삭제 |
rm | 지정한 네트워크 삭제 |
Step2. MySQL 컨테이너 생성
docker run --name mysql_container -dit --net=wordpress_net
-e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress_db
-e MYSQL_USER=wordpress_user -e MYSQL_PASSWORD=wuserpass mysql
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
--default-authentication-plugin=mysql_native_password
🚨 보기 편하게 줄바꿈을 해서 썼지만, 실제 cmd창에 입력할 때는 전부 한 줄로 작성해야 한다!!
위의 명령어를 입력하고 컨테이너 목록을 출력하면 mysql_container라는 이름의 컨테이너가 잘 생성되고 실행되고 있음을 확인할 수 있는데..
커맨드가 좀 많이 길다ㅎ
안의 요소들을 좀 나눠서 보자면 다음과 같다.
<커맨드 및 이미지 이름>
- docker (container) run : 도커 이미지를 내려받고 컨테이너를 생성해 실행함 (docker image pull, docker container create, docker container start 3개의 명령어를 하나로 합친 것과 같음)
- mysql : 이미지 이름
<옵션>
- --name mysql_container : 컨테이너 이름. 원하는 대로 지어도 됨.
- -dit : 실행 옵션.
- --net=wordpress_net : 컨테이너를 'wordpress_net'라는 이름의 네트워크에 연결함
🤔-dit 옵션을 왜 붙여야 할까?!!🤔
데몬 형태로 동작하는 소프트웨어의 컨테이너는 -d, -i, -t 옵션을 합친 -dit를 사용하면 편하다.
여기서 데몬이란, 유닉스 또는 리눅스에서 동작하는 프로그램 중에서 백그라운드에서 항상 동작하는 프로그램을 뜻한다.
-d는 컨테이너를 백그라운드로 실행하는 옵션으로, -d를 붙이지 않고 프로그램을 실행하면 실행된 컨테이너가 프로그램의 실행을 마칠 때까지 계속 터미널의 제어를 차지하게 되기 때문에 그 다음 명령을 입력할 수 없는 상태가 된다. 계속 대기중인 상태가 되는 것이다.
-i와 -t는 컨테이너 내부에 터미널로 접속하기 위해 사용하는 옵션으로, 이 옵션을 붙이지 않으면 컨테이너 안의 파일 시스템에 접근할 수 없다.
한 번만 실행되고 끝나는 컨테이너의 경우에는 위와 같은 -dit 옵션이 필요 없겠지만, 데몬 형태의 컨테이너는 -d, -i, -t 옵션을 적절히 활용하여 사용해야 할 것이다.
- -e MYSQL_ROOT_PASSWORD=myrootpass : 환경변수 설정. 루트 패스워드. 루트는 모든 권한을 가진 사용자로, 루트 권한으로 모든 작업이 가능하지만 매번 루트 사용자로 접속할 경우 보안 측면에서 문제가 생기기 때문에 제한된 권한을 가진 일반 사용자로 전환하는 것이 일반적이다.
- -e MYSQL_DATABASE=wordpress_db : 환경변수 설정. 데이터베이스 이름.
- -e MYSQL_USER=wordpress_user : 환경변수 설정. 사용자 이름.
- -e MYSQL_PASSWORD=wuserpass : 환경변수 설정. 패스워드.
🤔환경변수🤔
환경변수란 운영체제에서 다양한 설정값을 저장하는 장소이다. 컨테이너의 설정값을 이 환경변수를 통해 전달하는 경우가 많다. 어떤 환경변수를 사용할지는 컨테이너의 종류에 따라 달라진다.
<인자>
- --character-set-server=utf8mb4 : 문자 인코딩으로 UTF8을 사용. 한국어를 사용하기 위한 인자.
- --collation-server=utf8mb4_unicode_ci : 정렬 순서로 UTF8을 따름. 한국어를 사용하기 위한 인자.
- --default-authentication-plugin=mysql_native_password : 인증 방식을 예전 방식(native)으로 변경. (MySQL8로 넘어오면서 외부 소프트웨어가 MySQL에 접속하는 인증 방식을 바꾸었는데, 새로운 인증 방식으로는 워드프레스가 MySQL에 접속할 수 없기 때문에 예전 인증 방식을 사용하는 것임)
Step3. Wordpress 컨테이너 생성
docker run --name wordpress_container -dit --net=wordpress_net -p 8085:80
-e WORDPRESS_DB_HOST=mysql_container -e WORDPRESS_DB_NAME=wordpress_db
-e WORDPRESS_DB_USER=wordpress_user -e WORDPRESS_DB_PASSWORD=wuserpass wordpress
🚨 보기 편하게 줄바꿈을 해서 썼지만, 실제 cmd창에 입력할 때는 전부 한 줄로 작성해야 한다!!
<커맨드 및 이미지 이름>
- docker (container) run : 도커 이미지를 내려받고 컨테이너를 생성해 실행함 (docker image pull, docker container create, docker container start 3개의 명령어를 하나로 합친 것과 같음)
- wordpress : 이미지 이름
<옵션>
- --name wordpress_container : 컨테이너 이름. 원하는 대로 지어도 됨.
- -dit : 실행 옵션.
- --net=wordpress_net : 컨테이너를 'wordpress_net'라는 이름의 네트워크에 연결함
- -p 8085:80 : 포트 번호 지정. publish. 호스트의 8085번 포트와 컨테이너의 80번 포트를 연결함.
- -e WORDPRESS_DB_HOST=mysql_container : 환경변수 설정. 데이터베이스 컨테이너 이름.
- -e WORDPRESS_DB_NAME =wordpress_db : 환경변수 설정. 데이터베이스 이름.
- -e WORDPRESS_DB _USER=wordpress_user : 환경변수 설정. 사용자 이름.
- -e WORDPRESS_DB _PASSWORD=wuserpass : 환경변수 설정. 패스워드.
👆 환경변수 -e 4가지는 MySQL 접속과 관련된 정보를 전달하는 것이기 때문에 MySQL 컨테이너의 설정값과 동일한 값이어야 한다!!
위의 커맨드 입력 후 컨테이너 목록을 출력해보면 wordpress 컨테이너 생성 및 실행되고 있음을 확인할 수 있다.
wordpress 컨테이너까지 만들어줬다면 wordpress 구축은 다 되어서 사용 가능한 상태가 된 것이다.
http://localhost:8085 으로 접근했을 때 위와 같은 화면이 나오면 잘 구축된 것이다!!

이번 포스팅에서는 컨테이너를 여러 개 만들고, 가상 네트워크로 연동해 줌으로써 wordpress를 구축해봤다.
다음 포스팅에서는 똑같은 작업을 도커 컴포즈를 이용해 해 볼 예정이다.
참고 자료
📓 그림과 실습으로 배우는 도커 & 쿠버네티스
그림과 실습으로 배우는 도커 & 쿠버네티스: 개념과 작동 원리가 쏙쏙 이해되는 완벽 입문서
컨테이너나 도커를 도통 이해하기 어려운 분들을 위한 본격 도커 입문서! 이 책은 컨테이너 기술이 어렵게 느껴지는 엔지니어나 백엔드 기술에 자신이 없는 분들을 위한 도커 입문서입니다. 자
wikibook.co.kr