먼저 워드 프레스란, 웹 사이트를 만들기 위해 서버에 설치하는 소프트웨어로, 웹 페이지를 손쉽게 만들 수 있어 매우 유용하다. 워드프레스는 PHP 스크립트로 작성되어 있으며, MySQL 데이터베이스를 사용하여 정보를 저장하기 때문에, 워드 프레스를 구축하는 과정에서 여러 개의 컨테이너를 연동하는 방법을 이해할 수 있을 것이다.
워드 프레스 공식 이미지에서 워드 프레스 프로그램의 본체와 아파치, PHP 런타임을 모두 포함하고 있기 때문에, 워드 프레스 컨테이너와 MySQL 컨테이너만 생성하면 된다.
워드 프레스는 데이터베이스에 저장되어 있는 웹 페이지의 내용을 가져와, 클라이언트에게 보여주는 방식으로 동작한다. 따라서, 두 컨테이너가 서로 연결되어 있어야 한다. 하지만, 컨테이너를 단순히 2개 생성하는 것만으로는 두 컨테이너가 서로 연결되지 않기 때문에 가상 네트워크를 만들어주어야 한다.
① 가상 네트워크 관련 커맨드
docker network create 네트워크 이름 // 네트워크 생성
docker network rm 네트워크 이름 // 네트워크 삭제
docker network ls // 네트워크 목록 출력
② MySQL 컨테이너 생성 커맨드
docker run
--name 컨테이너 이름 -dit
--net=네트워크 이름
-e MYSQL_ROOT_PASSWORD=root 패스워드
-e MYSQL_DATABASE=데이터베이스 이름
-e MYSQL_USER=사용자 이름
-e MYSQL_PASSWORD=일반 패스워드
mysql
--character-set-server=문자 인코딩
--collation-server=정렬 순서
--default-authentication-plugin=인증 방식
※ 인증 방식을 지정해야 하는 이유
--default-authentication-plugin을 사용해 인증 방식을 지정하는 이유는, MySQL이 5.7 버전에서 8.0 버전으로 바뀌면서 외부 소프트웨어가 MySQL에 접속하는 인증방식이 바뀌었기 때문이다. 워드 프레스를 포함한 많은 소프트웨어에서 아직 MySQL 8.0 인증 방식을 지원하지 않기 때문에, 인증 방식을 변경하지 않고는 MySQL 8.0에 접속할 수 없다. 따라서, MySQL 5.7 버전에서 사용하던 인증 방식을 사용하기 위해 mysql_native_password를 값으로 지정해야 한다. 물론, docker image pull mysql:5.7을 이용하여 이미지를 다운로드 받은 경우, 인증 방식을 지정하지 않아도 된다.
③ 워드 프레스 컨테이너 생성 커맨드
docker run
--name 컨테이너 이름 -dit
--net=네트워크 이름
-p 포트 설정
-e WORDPRESS_DB_HOST=데이터베이스 컨테이너 이름
-e WORDPRESS_DB_NAME=데이터베이스 이름
-e WORDPRESS_DB_USER=데이터베이스 사용자 이름
-e WORDPRESS_DB_PASSWORD=데이터베이스 패스워드
wordpress
네트워크의 이름은 wordpress000net1이고, MySQL 컨테이너의 이름은 mysql000ex11, 데이터베이스의 이름은 wordpress000db, 워드프레스 컨테이너의 이름은 wordpress000ex12인 컨테이너를 생성하고 실행해보자.
① network create 커맨드
docker network create wordpress000net1
② MySQL 컨테이너 생성 및 실행
docker run --name mysql000ex11 -dit --net=wordpress000net1 -e MYSQL_ROOT_PASSWORD=rootpwd -e MYSQL_DATABASE=wordpress000db -e MYSQL_USER=wordpress000chrome -e MYSQL_PASSWORD=pwd mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
③ 워드프레스 컨테이너 생성 및 실행
docker run --name wordpress000ex12 -dit --net=wordpress000net1 -p 8080:80 -e WORDPRESS_DB_HOST=mysql000ex11 -e WORDPRESS_DB_NAME=wordpress000db -e WORDPRESS_DB_USER=wordpress000chrome -e WORDPRESS_DB_PASSWORD=pwd wordpress
④ docker ps 커맨드
⑤ 웹 브라우저를 통해 워드프레스에 접근
⑥ 워드프레스 사용
⑦ 컨테이너 종료 및 삭제
docker stop wordpress000ex12 mysql000ex11
docker rm wordpress000ex12 mysql000ex11
docker ps -a // 컨테이너가 정상적으로 삭제되었는지 확인
워드프레스와 마찬가지로 대부분의 웹 시스템은 리눅스 + 웹 서버 + 프로그래밍 언어 런타임 + 데이터베이스로 구성된다. 특히, 워드프레스와 같이 Linux, Apache, MySQL, PHP의 조합으로 구성된 것을 LAMP 스택(또는 APM 스택)이라 부른다. Apache를 대신하여 Nginx, MySQL을 대신하여 Maria DB나 PostgreSQL이 사용되는 경우도 있지만, 웹 시스템의 전체적인 구성은 거의 동일하다.
이번에 소개할 레드마인도 이와 같은 구조를 갖는다. 그러면 지금부터 레드마인을 MySQL과 Maria DB 컨테이너에 연동해보도록 하자.
먼저 레드마인 컨테이너와 MySQL 컨테이너를 연동하여 레드마인 서버에 접속해볼 것이다. 네트워크의 이름은 redmine000net2이고, MySQL 컨테이너의 이름은 mysql000ex13, 데이터베이스의 이름은 redmine000db, 레드마인 컨테이너의 이름은 redmine000ex14인 컨테이너를 생성하고 실행해보자. 참고로, 레드마인 이미지의 이름은 redmine이다.
① network create 커맨드
docker network create redmine000net2
② MySQL 컨테이너 생성 및 실행
docker run --name mysql000ex13 -dit --net=redmine000net2 -e MYSQL_ROOT_PASSWORD=rootpwd -e MYSQL_DATABASE=redmine000db -e MYSQL_USER=redmine000chrome -e MYSQL_PASSWORD=pwd mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
③ 레드마인 컨테이너 생성 및 실행
docker run -dit --name redmine000ex14 --network redmine000net2 -p 8080:3000 -e REDMINE_DB_MYSQL=mysql000ex13 -e REDMINE_DB_DATABASE=redmine000db -e REDMINE_DB_USERNAME=redmine000chrome -e REDMINE_DB_PASSWORD=pwd redmine
※ 생성한 컨테이너가 실행되지 않는 경우
간혹 생성한 컨테이너가 실행되지 않는 경우가 있는데, 대부분 오타로 인해 발생하게 된다. 만약 어디에서 문제가 발생했는지 알고 싶다면, 아래의 명령을 입력하여 에러 로그를 확인할 수 있다.docker logs 컨테이너 이름
④ 웹 브라우저를 통해 레드마인에 접근
⑤ 컨테이너 종료 및 삭제
docker stop redmine000ex14 mysql000ex13
docker rm redmine000ex14 mysql000ex13
docker ps -a // 컨테이너가 정상적으로 삭제되었는지 확인
이번에는 레드마인 컨테이너와 MariaDB 컨테이너와 연동해 볼 것이다. 네트워크의 이름은 redmine000net3이고, MariaDB 컨테이너의 이름은 mariadb000ex15, 데이터베이스의 이름은 redmine000db, 레드마인 컨테이너의 이름은 redmine000ex16인 컨테이너를 생성하고 실행해보자. 참고로, MariaDB 이미지의 이름은 mariadb이다.
① network create 커맨드
docker network create redmine000net3
② MariaDB 컨테이너 생성 및 실행
docker run --name mariadb000ex15 -dit --net=redmine000net3 -e MYSQL_ROOT_PASSWORD=rootpwd -e MYSQL_DATABASE=redmine000db -e MYSQL_USER=redmine000chrome -e MYSQL_PASSWORD=pwd mariadb --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
③ 레드마인 컨테이너 생성 및 실행
docker run -dit --name redmine000ex16 --network redmine000net3 -p 8080:3000 -e REDMINE_DB_MARIADB=mariadb000ex15 -e REDMINE_DB_DATABASE=redmine000db -e REDMINE_DB_USERNAME=redmine000chrome -e REDMINE_DB_PASSWORD=pwd redmine
④ 웹 브라우저를 통해 레드마인에 접근
⑤ 컨테이너 종료 및 삭제
docker stop redmine000ex16 mariadb000ex15
docker rm redmine000ex16 mariadb000ex15
docker ps -a // 컨테이너가 정상적으로 삭제되었는지 확인
⑥ 이미지 삭제
docker image ls // 삭제할 이미지의 이름 확인
docker rmi mariadb mysql wordpress redmine // 이미지 삭제
docker image ls // 이미지가 정상적으로 삭제되었는지 확인