본문 바로가기
AI Journey/클라우드

[Docker] 컨테이너 통신: 링크(--link) 옵션을 활용해서 WordPress와 DB 연동하기

by 보눔비스타 2026. 1. 1.

도커를 활용해 가장 기본적인 2-Tier 아키텍처인 웹 서버와 데이터베이스를 구축하고 연동하는 과정을 알아보자.

프론트엔드 역할을 할 WordPress 컨테이너와 백엔드 데이터베이스 역할을 할 MySQL 컨테이너를 생성하고, 이 둘을 연결(Link)하여 블로그 서비스를 띄워본다.

1. 아키텍처 및 개념

우리가 구축할 구조는 클라이언트(브라우저)가 워드프레스 웹 서버에 접속하고, 워드프레스는 내부적으로 MySQL 데이터베이스에 접속하여 데이터를 저장하거나 불러오는 구조다.

컨테이너 환경에서 이 구조를 만들 때 가장 중요한 고려 사항은 상태(State)와 설정(Configuration)의 분리다.

  • 이미지와 데이터: 도커 이미지는 불변(Immutable)이다. 이미지 자체에 비밀번호나 설정값을 하드코딩하면 보안상 위험하며 유연성이 떨어진다.

환경 변수(-e): 따라서 컨테이너를 실행(Run)하는 시점에 -e 옵션을 통해 필요한 환경변수(비밀번호, DB 이름 등)를 주입하는 방식을 사용한다.

 

2. Backend: MySQL 데이터베이스 구축

먼저 데이터를 저장할 데이터베이스 컨테이너를 띄운다.

루트 비밀번호와 초기 데이터베이스 이름을 설정한다.

docker run -d --name db_container \
  -e MYSQL_ROOT_PASSWORD=1234 \
  -e MYSQL_DATABASE=word_db \
  mysql:5.7

 

  • --name db_container: 컨테이너의 이름을 db_container로 지정한다. 이 이름은 나중에 워드프레스 컨테이너가 이 DB를 찾을 때 사용된다. ->네트워크(서버) 주소 역할
  • -e MYSQL_ROOT_PASSWORD=1234: MySQL의 root 계정 비밀번호를 '1234'로 설정한다.
  • -e MYSQL_DATABASE=word_db: 컨테이너 시작 시 'word_db'라는 이름의 데이터베이스를 자동으로 생성한다.
  • mysql:5.7: 사용할 이미지와 태그(버전).

동작 확인

명령어 실행 후 긴 해시값(컨테이너 ID)이 출력된다면 정상적으로 실행된 것이다.

 

3. Frontend: WordPress 웹 서버 구축 및 연동

이제 웹 애플리케이션인 워드프레스를 실행한다. 이 단계의 핵심은 앞서 만든 db_container 컨테이너와 워드프레스 컨테이너를 연결하는 것이다.

docker run -d \
  -e WORDPRESS_DB_HOST=mysql \
  -e WORDPRESS_DB_USER=root \
  -e WORDPRESS_DB_PASSWORD=1234 \
  -e WORDPRESS_DB_NAME=word_db \
  --name word_container \
  --link db_container:mysql \
  -p 80 \
  wordpress:latest

 

 

여기서 --link db_container:mysql 옵션이 가장 중요하다.

 

  • 이 옵션은 word_container 컨테이너의 /etc/hosts 파일에 db_container 컨테이너의 IP 주소를 mysql이라는 alias로 등록한다.
  • 결과: 워드프레스 내부에서 mysql이라는 호스트 이름으로 ping을 날리거나 접속을 시도하면, 자동으로 db_container 컨테이너로 연결된다.
  • 주의점: --link 옵션은 레거시 기능으로, 컨테이너가 재시작되어 IP가 바뀌면 연결이 끊어질 수 있는 등 취약점이 있다. 최신 도커 환경에서는 Docker Bridge Network를 생성하여 연결하는 것이 더 안정적이지만, 간단한 구조 이해를 위해 여기서는 링크를 사용한다.

 

  • -e WORDPRESS_DB_HOST=mysql: DB 접속 호스트를 mysql로 지정한다. 이는 --link 옵션에서 지정한 alias와 일치해야 한다.
  • -e WORDPRESS_DB_...: 접속할 DB 유저, 패스워드, DB명을 설정한다. MySQL 컨테이너 생성 시 설정한 값과 일치해야 한다.
  • -e WORDPRESS_DB_NAME=word_db: 테이블을 만들 데이터베이스를 지정
  • -p 80: 호스트의 (랜덤)할당된 포트를 컨테이너의 80번 포트와 연결한다.

4. 상태 확인 및 검증

컨테이너가 정상적으로 떠 있는지, 그리고 네트워크 연결이 잘 되었는지 확인한다.

4-1. 프로세스 확인 (docker ps)

docker ps

 

 

 

  • word_container: 0.0.0.0:32771->80/tcp → 호스트의 32771 포트로 접속하면 워드프레스(80)로 연결된다.
  • db_container: 3306/tcp → 데이터베이스가 정상 구동 중이다.

4-2. 네트워크 연결 테스트 (curl)

워드프레스 컨테이너 안에서 MySQL 컨테이너로 통신이 되는지 확인한다.

docker exec word_container curl mysql:3306 --silent

 

 

이 명령어는 word_container 컨테이너 내부에서 mysql이라는 호스트명의 3306 포트로 요청을 보낸다. 에러 없이 종료되거나 바이너리 응답이 있다면 네트워크 연결이 정상이라는 뜻이다.

 

4-3. 데이터베이스 내부 확인

실제로 DB가 생성되었는지 MySQL 컨테이너 내부로 진입해 확인해 본다.

 

# 1. 컨테이너 내부 쉘 진입
docker exec -it db_container bash

# 2. MySQL 접속
bash-4.2# mysql -u root -p
Enter password: (1234 입력)

# 3. 데이터베이스 목록 확인
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| word_db            |  <-- 생성 요청한 DB
...
+--------------------+

# 4. 테이블 확인
mysql> use word_db;
mysql> show tables;
Empty set (0.00 sec)

 

초기 상태이므로 word_db는 존재하지만, 아직 워드프레스 설치 마법사를 진행하지 않았기 때문에 테이블은 비어 있는 상태(Empty set)다. (정상)

 

5. 서비스 접속 (브라우저)

마지막으로 호스트 머신의 브라우저를 열어 실제 서비스에 접속한다.

  • 접속 주소: http://localhost:[도커가 할당한 포트]

브라우저에 워드프레스 언어 선택 화면이나 설치 마법사가 뜬다면 성공이다.

이 화면이 뜬다는 것은 웹 서버가 작동 중이며, 데이터베이스 연결 설정이 올바르다는 것을 의미한다.

만약 DB 연결 정보가 틀렸다면 워드프레스는 "Error establishing a database connection" 에러를 뱉는다.