참고글
도커로 워드프레스(WordPress) 간단 구축하기
도커를 활용하여 워드프레스를 구축하는 방법을 알아봅니다. 이 글의 범위는 워드프레스를 띄우는 것 까지 목표이며, 워드프레스에 대한 가이드는 제공하지 않습니다. 또한 도커 자체를 설치하는 과정은 참고글을 확인하도록 합니다.
워드프레스 및 MySQL 컨테이너 구성
대부분의 서비스는 하나의 모듈로 동작하는 것이 아닌 여러개의 모듈이 체계적으로 동작합니다. 예를들어 지금 구축하려는 워드프레스 역시 워드프레스(아파치 웹서버) 및 MySQL(DBMS)로 나뉘어 동작합니다. 도커는 하나의 컨테이너에서 하나의 프로세스만 실행하는 것을 철학으로 하며, 도커 커뮤니티에서는 이러한 컨테이너 구성을 권장합니다. 이는 컨테이너 간의 독립성을 보장하므로서 컨테이너 유지 및 관리를 효율적으로 하기 위함입니다.
물론 하나의 컨테이너에 이 두 가지 프로세스를 모두 띄워 운영할 수도 있지만 향후 유지 및 관리 측면에서는 버전관리 및 모듈화가 되지 않아 비용이 많이 발생할 수 있습니다. 따라서 여기서는 도커의 철학에 따라 워드프레스컨테이너와 MySQL 컨테이너를 따로 띄워 운영할 것입니다.
MySQL 컨테이너 생성
먼저 워드프레스의 데이터베이스로 사용할 MySQL 컨테이너를 생성해보도록 하겠습니다. 가독성을 위해 \를 사용했는데, \(역슬래쉬)는 명령어를 줄넘김(Enter) 친 이후에서 계속해서 입력하기 위함입니다.
# docker run --detach \
> --name wordpressdb \
> --restart always \
> -v /var/docker/wordpress_db:/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=123456 \
> -e MYSQL_DATABASE=wordpress \
> mysql:5.7 |
cs |
-v 옵션은 MySQL 컨테이너와 호스트간에 저장 공간을 공유하기 위함입니다. 다시 말해 MySQL 컨테이너에서 저장하는 데이터를 호스트의 /var/docker/wordpress_db/ 에 저장합니다. 더욱 정확하게는 옵션에서 지정한 호스트 경로의 디렉터리를 컨테이너 내부에 마운트시켜 사용합니다.
이렇게 하면 MySQL 컨테이너를 제거한다고 하더라도 워드프레스에서 사용하는 데이터들은 호스트에 남아 있기 때문에 안전하고 MySQL 버전을 변경하는 등의 일이 있더라도 별도의 백업 작업 없이 간단하게 수정할 수 있습니다.
-e MYSQL_ROOT_PASSWORD 옵션값으로는 mysql의 root 계정 비밀번호를 지정합니다.
워드프레스(WordPress) 컨테이너 생성
이번엔 워드프레스 컨테이너를 생성합니다. 생성과 동시에 이미지에서 제공하는 변수와 옵션값들을 통해 이전에 생성했던 MySQL 데이터베이스 컨테이너를 DB로 사용하도록 연결(link)해줍니다. 이때 MySQL 데이터베이스의 비밀번호와 사용할 포트 등을 지정합니다.
마지막에 이미지 이름을 지정해주는데, 버전(태그) 를 명시하지 않는 경우 자동으로 최신 버전으로 내려받습니다.
# docker run -d \
> -e WORDPRESS_DB_PASSWORD=123456 \
> --name wordpress \
> --link wordpressdb:mysql \
> --restart always \
> -p 80:80 \
> wordpress |
cs |
--link 옵션을 통해 MySQL 컨테이너를 DB로 사용하도록 연결했습니다.
-p 옵션은 publish의 줄임말로 호스트 OS에서 사용하는 포트번호를 컨테이너에서 사용하는 포트번호로 포트포워딩 해주는 것입니다.
브라우저로 생성한 워드프레스 접근하기
당연히 외부에서 워드프레스에 접근하기 위해서는 호스트 OS의 ip를 통해 접근해야 합니다. 이때 포트는 몇번으로 해야 할지 의문일 수 있습니다. 포트는 앞에서 설정했던 -p 옵션에 따라 80번으로 접근하면 요청을 컨테이너의 80번으로 전달해줍니다.
호스트에서 ifconfig 명령어를 사용하여 ip를 확인합니다.
설정했던 80번으로 접근합니다. 브라우저에서는 포트를 명시하지 않는 경우 자동으로 80번으로 접근하기 때문에 생략이 가능합니다. 워드프레스 구축 및 설정이 완료되었습니다.
컨테이너 내부로 접속하기
유지 및 관리를 위해 컨테이너 내부에 접근해야 되는 경우가 있습니다. docker ps 명령어로 방금 구축한 두개의 컨테이너명을 확인합니다.
docker exec 명령어로 컨테이너 내부에 접근합니다. 예를 들어 MySQL 컨테이너에 접근하는 방법을 다음과 같습니다. 그러나 실제 데이터는 호스트의 공유 디렉터리에 저장되고 있고 MySQL 클라이언트를 통해 호스트IP:3306으로 접근가능 하기때문에 컨테이너에 접근하는 경우는 많지 않을 것입니다.
# docker exec -i -t wordpressdb /bin/bash |
cs |
워드프레스 및 MySQL 로그 보기
워드프레스는 아파치 웹서버 기반이므로 아파치 웹서버의 로그를 보거나 MySQL의 출력 로그를 봐야 하는경우가 있습니다. 이때는 docker logs 명령어를 사용합니다. 자세한 내용은 참고글을 타고 들어가주세요.
# docker logs wordpress |
cs |
'시스템 인프라' 카테고리의 다른 글
[Docker] 도커 컨테이너의 볼륨을 호스트 OS와 공유하기 (1) | 2018.06.26 |
---|---|
[Docker] 도커 네트워크 구조 및 컨테이너 호스트 OS 외부에 개방하는 방법 (0) | 2018.06.22 |
[Docker] 컨테이너 로그 보기 - docker logs 명령어 (0) | 2018.06.20 |
[Docker] 컨테이너 정지 및 삭제하기 (0) | 2018.06.19 |
[Docker] 컨테이너 목록 확인하기 - docker ps 명령어 (0) | 2018.06.19 |