본문 바로가기

DevOps/Docker

<Docker> 도커 컨테이너의 연동 사용법 : Network

1. 소개

* 소개

 - 이번 글에서는 여러 개의 도커 컨테이너를 연동시키는 방법에 대해 알아보도록 하자. 이를 위해 워드프레스를 구축하는 예제를 통해 배워볼 것이다. 

 

 - 워드프레스는 워드프레스 프로그램 외에도 아파치나 데이터베이스, PHP 런타임 등을 필요로 한다. 그러므로 이번 장에서 배울 컨테이너 끼리의 연동을 배우기 적합하다.

 

* 워드프레스

 - 이번 실습에서는 워드프레스 공식 이미지를 사용하며, 이 이미지 안에는 워드프레스 프로그램 본체와 아파치, PHP 런타임이 포함되어 있다. 이 컨테이너와 MySQL 컨테이너를 DB로 활용하도록 하자.

 - 워드프레스는 블로그 생성 도구와 같은 것으로, 웹 사이트 작성자가 작성한 내용을 데이터베이스에 저장하고, 웹 사이트 열람자의 요청에 따라 웹 페이지를 보여준다. 이를 위해 워드프레스 프로그램이 MySQL에 저장된 데이터를 읽고 쓸 수 있어야 하므로 두 컨테이너가 연결돼 있어야 한다.

 

 - 이를 위해 가상 네트워크를 만들고 이 네트워크에 두 개의 컨테이너를 소속시켜 연결해야 한다.

 

docker network create <네트워크 이름>
docker network rm <네트워크 이름>

 

 - 위의 명령어로 네트워크를 생성하거나 삭제할 수 있다.

 - 다음 표는 Docker의 네트워크 관련 하위 커맨드에 대한 설명이다.

 

하위 커맨드 내용 생략 가능 여부 주요 옵션
connect 컨테이너를 도커 네트워크에 연결 X 거의 사용 안함
disconnect 컨테이너의 도커 네트워크 연결을 해제 X 거의 사용 안함
create 도커 네트워크 생성 X 거의 사용 안함
inspect 도커 네트워크의 상세 정보 출력 X 거의 사용 안함
ls 도커 네트워크 목록 출력 X 거의 사용 안함
prune 현재 컨테이너가 접속하지 않은 네트워크 모두 삭제 X 거의 사용 안함
rm 지정한 네트워크 삭제 X 거의 사용 안함

 

2. 실습

 - 워드프레스 컨테이너와 MySQL 컨테이너를 생성하고 실행할 때는 MySQL 컨테이너를 먼저 생성해야 하며, 네트워크 생성을 잊으면 안 된다.

 


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

 

docker network create wordpress000net1
docker network ls

 

 - 위의 명령어를 통해 wordpress000net1이라는 이름의 네트워크를 생성한다. 다음은 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

 

 - 상당히 긴 커맨드이지만, 하나씩 살펴보자. docker run 명령어를 사용하여 mysql000ex11이라는 이름의 컨테이너를 실행한다. --net 옵션을 통해 wordpress000net1 네트워크에 컨테이너를 연결했다.


 - 이후 -e 옵션을 통해 환경 변수를 설정한다. 루트 패스워드는 myrootpass, 데이터베이스 이름은 wordpress000db, 사용자 이름은 wordpress000kun, 패스워드는 wkunpass로 설정한다.

 

 - MySQL 이미지를 사용하여 컨테이너를 생성하고, 세 가지 인자를 전달한다. --character-set-server=utf8mb4: 문자 인코딩으로 UTF8을 사용, --collation-server=utf8mb4_unicode_ci: 정렬 순서로 UTF8을 따름 --default-authentication-plugin=mysql_native_password: 인증 방식을 이전 방식(native)으로 변경


 - 다음으로 워드프레스 컨테이너를 생성하고 실행한다.

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

 

 - --net 옵션으로 동일한 네트워크에 속하도록 하며, -p 옵션으로 8085 포트를 컨테이너의 80 포트에 연결하여 브라우저에서 접근할 수 있게 한다.

 

 - 환경 변수는 MySQL에 설정한 것과 같지만, DB_HOST는 컨테이너 이름을 사용하여 네트워크 내부에서 연결한다. (같은 네트워크에서는 컨테이너 이름으로도 접근이 가능하기 때문).


 - 컨테이너가 정상적으로 실행되었는지 확인하기 위해 다음 명령어를 실행한다.

 

docker ps

 

 - ps  명령어로 STATUS를 확인해보면 둘 다 Up으로 출력되는 것을 볼 수 잇을 것이다. 그리고 http://localhost:8085로 접속하면 워드프레스 초기화면이 출력된다.

 

 - 실행이 끝나면, 컨테이너부터 이미지와 네트워크를 정리하도록 하자.

 

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

 

 

 


참고

 

 해당 포스팅은 그림과 실습으로 배우는 도커&쿠버네티스를 읽고 개인적으로 필요한 내용을 추가 및 정리한 글입니다.

 

 

 

그림과 실습으로 배우는 도커 & 쿠버네티스 - YES24

컨테이너나 도커를 도통 이해하기 어려운 분들을 위한 본격 도커 입문서!이 책은 컨테이너 기술이 어렵게 느껴지는 엔지니어나 백엔드 기술에 자신이 없는 분들을 위한 도커 입문서다. 자세한

www.yes24.com