본문 바로가기
개발 공부/인프라

[그림과 실습으로 배우는 도커 & 쿠버네티스] Ch5 - 여러 개의 컨테이너를 연동해 실행해보자

by 진!!!!! 2025. 1. 6.

 

워드프레스 사이트 구성 및 구축

워드프레스란?

웹 사이트를 만들기 위한 소프트웨어

아파치, 데이터베이스 , PHP 런타임 등을 필요로 함

컨테이너는 워드프레스 공식 이미지를 사용

워드프레스 컨테이너 (워드프레스+아파치+PHP런타임)/MySQL 컨테이너 분리하여 생성

가상 네트워크를 만들고 이 네트워크에 두 컨테이너를 소속시켜 연결

가상 네트워크

# 가상 네트워크 생성
docker network create 네트워크_이름
# 가상 네트워크 삭제
docker network rm 네트워크_이름
# 가상 네트워크 목록 확인
docker network ls

MySQL

docker run --name 컨테이너_이름 -dit --net=네트워크_이름 
-e MYSQL_ROOT_PASSWORD=MySQL_루트_패스워드
-e MYSQL_DATABASE=데이터베이스_이름
-e MYSQL_USER=MySQL_사용자이름
-e MYSQL_PASSWORD=MySQL_패스워드
mysql --character-set-server=문자_인코딩
--collation-server=정렬_순서
--default-authentication-plugin=인증_방식

 

옵션

항목 옵션 실습에서 사용하는 값
네트워크 이름 —net wordpress000net1
MySQL 컨테이너 이름 —name mysql000ex11
실행 옵션 -dit  
MySQL 루트 패스워드 -e MYSQL_ROOT_PASSWORD myrootpass
MySQL 데이터베이스 이름 -e MYSQL_DATABASE wordpress000db
MySQL 사용자 이름 -e MYSQL_USER wordpress000kun
MySQL 패스워드 -e MYSQL_PASSWORD wkunpass

 

매번 루트 사용자로 접속 시 보안 측면에서 문제가 생긴다

실제 패스워드를 설정할 때는 무작위 문자열을 사용해야 하지만 연습을 위해 쉬운 값으로 설정한다.

 

인자

항목 인자 의미
문자 인코딩 --character-set-server utf8mb4 UTF8 사용
정렬 순서 --collation-server utf8mb4_unicode_ci 정렬 순서로 UTF8 따름
인증 방식 --default-authentication-plugin mysql_native_password 인증 방식을 예전 방식(native)로 변경

 

MySQL이 MySQL5에서 MySQL8로 넘어오면서 인증 방식이 변경되었는데, 워드프레스는 이 새로운 인증 방식을 지원하지 않아 이전 인증 방식으로 인증해야한다.

=> 그러나 현재 최신 버전인 MySQL9에서는 이전 인증 방식으로 변경이 불가능하게 바뀌어서 --default-authentication-plugin 이 부분은 빼야한다. 혹시 책 보고 따라하다가 안되는 분이 있으시다면 참고하시길.. ㅎㅎ

 

워드프레스

docker run --name 컨테이너_이름 -dit --net=네트워크_이름 -p 포트_설정 
-e WORDPRESS_DB_HOST=데이터베이스_컨테이너_이름
-e WORDPRESS_DB_NAME=데이터베이스_이름
-e WORDPRESS_DB_USER=데이터베이스_사용자_이름
-e WORDPRESS_PASSWORD=데이터베이스_패스워드
wordpress

 

옵션

항목 옵션 설정값
네트워크 이름 —net wordpress000net1
워드프레스 컨테이너 이름 —name wordpress000net2
실행 옵션 -dit  
데이터베이스 컨테이너 이름 -e WORDPRESS_DB_HOST mysql000ex11
데이터베이스 이름 -e WORDPRESS_DB_NAME wordpress000db
데이터베이스 사용자 이름 -e WORDPRESS_DB_USER wordpress000kun
데이터베이스 패스워드 -e WORDPRESS_DB_PASSWORD wkunpass

 

워드프레스 및 MySQL 컨테이너 생성과 연동

  1. 네트워크 생성
docker network create wordpress000net1

 

2. MySQL 컨테이너 생성 및 실행

docker run --name mysql000ex11 -dit --net=wordpress000net1 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress000db -e MYSQL_USER=wordpress000kun -e MYSQL_PASSWORD=wkunpass mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password

 

3. 워드프레스 컨테이너 생성 및 실행

docker run --name wordpress000ex12 -dit --net=wordpress000net1 -p 8085:80 -e WORDPRESS_DB_HOST=mysql000ex11 -e WORDPRESS_DB_NAME=wordpress000db -e WORDPRESS_DB_USER=wordpress000kun -e WORDPRESS_DB_PASSWORD=wkunpass wordpress

 

 

4. docker ps로 컨테이너 상태 확인

 

근데 docker ps로 확인해보니 MySQL 컨테이너가 자꾸 꺼져있다…

왜일까? docekr logs로 로그를 확인해보았다.

C:\\Users\\whdms>docker logs mysql000ex11
2025-01-04 10:01:20+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 9.1.0-1.el9 started.
2025-01-04 10:01:21+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2025-01-04 10:01:21+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 9.1.0-1.el9 started.
2025-01-04 10:01:21+00:00 [Note] [Entrypoint]: Initializing database files
2025-01-04T10:01:21.202206Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2025-01-04T10:01:21.203298Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 9.1.0) initializing of server in progress as process 80
2025-01-04T10:01:21.219820Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-01-04T10:01:21.527815Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-01-04T10:01:22.686000Z 0 [ERROR] [MY-000067] [Server] unknown variable 'default-authentication-plugin=mysql_native_password'.
2025-01-04T10:01:22.686503Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2025-01-04T10:01:22.686544Z 0 [ERROR] [MY-010119] [Server] Aborting
2025-01-04T10:01:24.540167Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.

 

오류: 2025-01-04T10:01:22.686000Z 0 [ERROR] [MY-000067] [Server] unknown variable 'default-authentication-plugin=mysql_native_password'.

책에서는 MySQL8이고 내가 설치한건 MySQL9라 그 사이에 변화가 있었던 것 같다

2022년에 나온 책이고 지금은 2025년이니까..

찾아보니 MySQL9에서는 이전 방식 인증 방법이 삭제됐단다

거 참

'default-authentication-plugin=mysql_native_password' 이 부분이 문제인 것 같아서 이미지 삭제하고 명령어에서 저부분 뗀 뒤에 컨테이너 다시 만들고 실행시켰다.

해결!

 

 

5. 웹 페이지 접속해서 확인하기

정말 신기하네요..

 

6. 컨테이너와 이미지 삭제하기

 

docker stop wordpress000ex12
docker stop mysql000ex11
docker rm wordpress000ex12
docker rm mysql000ex11
docker image rm wordpress
docker image rm mysql
docker network rm wordpress000net1

 

레드마인 및 MariaDB 컨테이너를 대상으로 연습하기

레드마인이란?

‘타겟’(누구에게 어떤 업무를 맡길지 나타내는 Todo)를 관리하는 소프트웨어

처음보는데 Jira 비슷한 건가봄

워드프레스와 포트 번호만 다르고 거의 같은 구성이지만, 옵션의 이름이 다르다.

 

항목 설정값
네트워크 이름 redmine000net2
MySQL 컨테이너 이름 mysql000ex13
레드마인 컨테이너 이름 redmine000ex14
레드마인 이미지 이름 redmine

 

  1. 네트워크 생성
docker network create redmine000net2

 

2. MySQL 컨테이너 생성 및 실행

docker run --name mysql000ex13 -dit --net=redmine000net2 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=redmine000db -e MYSQL_USER=redmine000kun -e MYSQL_PASSWORD=rkunpass mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
항목 옵션 설정값
MySQL 컨테이너 이름 —name redmine000net2
MySQL 루트 패스워드 -e MYSQL_ROOT_PASSWORD myrootpass
MySQL 데이터베이스 이름 -e MYSQL_DATABASE redmine000db
MySQL 사용자 이름 -e MYSQL_USER redmine000kun
MySQL 패스워드 -e MYSQL_PASSWORD rkunpass

 

3. 레드마인 컨테이너 생성 및 실행

docker run -dit --name redmine000ex14 --network redmine000net2 -p 8086:3000 -e REDMINE_DB_MYSQL=mysql000ex13 -e REDMINE_DB_DATABASE=redmine000db -e REDMINE_DB_USERNAME=redmine000kun -e REDMINE_DB_PASSWORD=rkunpass redmine
항목 옵션 설정값
레드마인 컨테이너 이름 —name redmine000ex14
실행 옵션 -dit  
포트번호 설정 -p 8086:3000
데이터베이스 컨테이너 이름 -e REDMINE_DB_MYSQL mysql000ex13
데이터베이스 이름 -e REDMINE_DB_DATABASE redmine000db
데이터베이스 사용자 이름 -e REDMINE_DB_USERNAME redmine000kun
데이터베이스 패스워드 -e REDMINE_DB_PASSWORD rkunpass

 

오류: Unknown database adapter `"mysql2"` found in config/database.yml, use Gemfile.local to load your own database gems

Unknown database adapter `"mysql2"` found in config/database.yml, use Gemfile.local to load your own database gems
Unknown database adapter `"mysql2"` found in config/database.yml, use Gemfile.local to load your own database gems
rake aborted!
LoadError: Error loading the 'mysql2' Active Record adapter. Missing a gem it depends on? mysql2 is not part of the bundle. Add it to your Gemfile. (LoadError)

 

또 오류가 발생했다

 

로그를 읽어보니 mysql2에 “”를 붙여서 못읽는 것 같다

config/database.yml을 내가 수정할 수도 없고…

 

https://github.com/docker-library/redmine/issues/353

 

Unknown database adapter `"mysql2"` found in config/database.yml, use Gemfile.local to load your own database gems · Issue #353

Since 5.1.5 the container won't start. I guess the reason are the changes in the Gemfile:58 for the adapters. 5.1.4 works just fine with the same docker run command. docker run command docker run -...

github.com

 

무려 3주 전에 열린 따끈따끈한 이슈다

 

3주 전에 새로 업데이트 한 6.0.2에서만 오류가 나고 6.0.1에서는 괜찮다고 하네요

이미지를 삭제하고 6.0.1버전으로 다시 받아봅시다..

docker run -dit --name redmine000ex14 --network redmine000net2 -p 8086:3000 -e REDMINE_DB_MYSQL=mysql000ex13 -e REDMINE_DB_DATABASE=redmine000db -e REDMINE_DB_USERNAME=redmine000kun -e REDMINE_DB_PASSWORD=rkunpass redmine:6.0.1

 

 

드디어 레드마인 페이지가 떴습니다

흑흑

성공~

분명 환경 세팅할 때 고통 안받으려고 도커 배우는 것 같은데 도커 배우면서 환경 설정 때문에 큰 고통을 받고 있는 듯한 착각이 들고 있음

 

MariaDB 컨테이너로 변경하기

항목 설정값
네트워크 이름 redminenet3
MySQL 컨테이너 이름 mariadb000ex15
MariaDB 이미지 이름 mariadb
레드마인 컨테이너 이름 redmine000ex16
레드마인 이미지 이름 redmine
  1. 네트워크 생성
docker network create redmine000net3

 

2. MySQL 컨테이너 생성 및 실행

docker run --name mariadb000ex15 -dit --net=redmine000net3 -e MYSQL_ROOT_PASSWORD=mariarootpass -e MYSQL_DATABASE=redmine000db -e MYSQL_USER=redmine000kun -e MYSQL_PASSWORD=rkunpass mariadb --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

 

항목 옵션 설정값
MariaDB 컨테이너 이름 —name mariadb000ex15
실행 옵션 -dit  
MariaDB 루트 패스워드 -e MYSQL_ROOT_PASSWORD mriarootpass
MariaDB 데이터베이스 이름 -e MYSQL_DATABASE redmine000db
MariaDB 사용자 이름 -e MYSQL_USER redmine000kun
MariaDB 패스워드 -e MYSQL_PASSWORD rkunpass

 

3. 레드마인 컨테이너 생성 및 실행

 

레드마인을 6.0.1 버전으로 다운받아야한다.

버전 설정은 이미지_이름:버전 형태로!

docker run -dit --name redmine000ex16 --network redmine000net3 -p 8087:3000 -e REDMINE_DB_MYSQL=mariadb000ex15 -e REDMINE_DB_DATABASE=redmine000db -e REDMINE_DB_USERNAME=redmine000kun -e REDMINE_DB_PASSWORD=rkunpass redmine:6.0.1

 

항목 옵션 설정값
레드마인 컨테이너 이름 —name redmine000ex16
실행 옵션 -dit  
포트번호 설정 -p 8087:3000
데이터베이스 컨테이너 이름 -e REDMINE_DB_MYSQL mysql000ex15
데이터베이스 이름 -e REDMINE_DB_DATABASE redmine000db
데이터베이스 사용자 이름 -e REDMINE_DB_USERNAME redmine000kun
데이터베이스 패스워드 -e REDMINE_DB_PASSWORD rkunpass

 

4. 확인하기

localhost:8087 에 접속하니 잘 뜬다.

 

뒷정리

실습이 끝난 후의 컨테이너, 이미지, 네트워크는 바로 정리하도록 하자.

 

컨테이너

컨테이너 목록 확인 docker ps -a
컨테이너 종료 docker stop 컨테이너_이름
컨테이너 삭제 docker rm 컨테이너_이름

 

이미지

이미지 목록 확인 docker image ls
이미지 삭제 docker image rm 이미지_이름

 

네트워크

네트워크 목록 확인 docker network ls
네트워크 삭제 docker network rm 네트워크_이름

 

볼륨

현재는 볼륨을 사용하지 않았지만, 다음 챕터에서 사용 예정

볼륨 목록 확인 docker volume ls
볼륨 삭제 docker volume rm 볼륨_이름