Docker

여러 개의 컨테이너를 연동해 실행하기

Debin 2022. 8. 17.
반응형

이번 포스팅에서는 여러 개의 컨테이너를 다루는 연습 소재로서 워드프레스 사이트를 구축해볼 것이다.

데이터베이스로는 MySQL을 사용하며, 컨테이너는 워드프레스 공식 이미지를 사용할 것이다.

워드프레스 공식이미지는 워드프레스 프로그램 본체와 아파치, PHP 런타임을 함께 포함하고 있어서 매우 편리하다.

워드프레스 컨테이너와 MySQL 컨테이너가 있으면 워드 프레스를 사용할 수 있다.

 

단순하게 컨테이너를 두 개 만들기만 해서는 두 컨테이너가 연결되지 않는다.

따라서 가상 네트워크를 만들고 이 네트워크에 두 개의 컨테이너를 소속시켜 두 컨테이너를 연결한다.

실습에서 사용할 간단한 네트워크 커맨드를 확인하고 가자.

 

  • 가상 네트워크 생성: docker network create 네트워크 이름
  • 가상 네트워크 삭제: docker network rm 네트워크 이름
  • 가상 네트워크 목록 출력: docker network ls

책에서는 많은 커맨드를 친절하게 설명해주고 있다. 일단은 실습에서 사용하는 커맨드만 설명할 것이고

이외의 커맨드는 책을 참고하면 되겠다.

컨테이너 연동 실습 시작

먼저 가상 네트워크를 생성하자.

docker network create wordpress000net1

그럼 이제 MySQL 컨테이너를 생성하고 실행해보자. 커맨드가 많이 복잡하다.

docker run --name mysql000ex2 -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=utf8m4b_unicode_ci 
--default-authentication-plugin=mysql_native_password

치는데 꽤나 고생했다. 이제 옵션에 대해 알아보자.

 

  • --net=가상 네트워크이름: 컨테이너를 연결할 도커 네트워크를 설정하는 역할.
  • -e MYSQL_ROOT_PASSWORD=루트 패스워드: MySQL에서 사용할 루트 패스워드를 환경변수로 설정하는 역할.
  • -e MYSQL_DATABASE=DB 이름: MySQL에서 생성할 데이터베이스 이름.
  • -e MYSQL_USER=유저 이름: MySQL에서 사용할 유저의 이름.
  • -e MYSQL_PASSWORD=패스워드: MySQL 유저가 사용할 유저 패스워드.

이번에는 사용된 인자에 대해 알아보자.

 

  • --character-set-server=utf8mb4: 문자 인코딩으로 UTF-8을 사용한다. 한글 사용을 위해서 추가한 인자다.
  • --collation-server=utf8m4b_unicode_ci: 정렬 순서로 UTF-8을 따른다.
  • --default-authentication-plugin=mysql_native_password: 인증 방식을 예전 방식을 따른다.

마지막 인자는 무슨 말일까?

MySQL5에서 MySQL8로 넘어오면서 외부 소프트웨어가 MySQL에 접속하는 인증 방식을 바꾸었다.

이 인증방식을 지원하지 않는 소프트웨어가 많은데 워드프레스도 그 중 하나다.

다시 말해 워드프레스는 MySQL 8.0에 저속할 수 없다.

따라서 여기서 접속에 문제가 없도록 인증 방식을 과거 방식을 사용한다. 그러기 위해 추가한 인자다.

 

이제 워드프레스 컨테이너를 생성해보자.

docker run --name wordpress000ex1 -dit --network=wordpress000net1 -p 8085:80 
-e WORDPRESS_DB_HOST=mysql000ex2 -e MYSQL_DB_NAME=wordpress000db -e WORDPRESS_DB_USER=wordpress000kun
-e WORDPRESS_DB_PASSWORD=wkunpass wordpress

마찬 가지로 옵션을 확인해보자. 

 

  • -e WORDPRESS_DB_HOST=mysql000ex2: 사용할 데이터베이스 컨테이너 이름.
  • MYSQL_DB_NAME=wordpress000db: 사용할 데이터베이스 이름.
  • -e WORDPRESS_DB_USER: 사용할 데이터베이스 유저의 이름.
  • -e WORDPRESS_DB_PASSWORD: 사용할 데이터베이스 유저의 비밀번호.

트러블 슈팅

계속 docker start mysql000ex2을 해도 컨테이너가 실행되지 않았다. 그래서 무슨일인지 살펴보기 위해 로그를 찍었다.

docker logs mysql000ex2

그랬더니 아래와 같은 로그를 확인했다.

알고보니 인자에 오타가 있었던 것..!!!

--collation-server=utf8m4b_unicode_ci -> --collation-server=utf8mb4_unicode_ci

이렇게 수정을 해서 다시 컨테이너를 생성했다. 오류 해결!! docker logs 컨테이너 이름 커맨드를 잘 기억해두자.

 

그러면 성공화면이 잘 뜬다! 가상 네트워크를 만들어 컨테이너 연결해보았다.

 

이상으로 포스팅을 마치겠습니다. 감사합니다.

 

참고 자료

그림과 실습으로 배우는 도커 & 쿠버네티스(5단원)

 
반응형

댓글