Network/Docker

[Network | Docker] 컨테이너 애플리케이션 구축

이주여이 2024. 6. 30. 23:32

1. MYSQL 이미지 다운로드 및 컨테이너 생성

$ docker run -d \
$ --name wordpressdb \
$ -e MYSQL_ROOT_PASSWORD=${pwd } \
$ -e MYSQL_DATABASE=wordpress \
$ mysql:5.7

mysql 이미지를 가져와 데이터베이스 컨테이너를 생성한다.

  • --name - 컨테이너 이름
  • ${pwd } - 자기가 원하는 비밀번호를 입력한다.
  • MYSQL_DATABASE - 컨테이너 생성 시 만들어질 데이터베이스 이름
  • mysql:5.7 - mysql 버전

2. 1. Wordpress 이미지 다운로드 및 컨테이너 생성

$ docker run -d \
$ -e WORDPRESS_DB_HOST=mysql \
$ -e WORDPRESS_DB_USER=root \
$ -e WORDPRESS_DB_PASSWORD=${pwd } \
$ --name wordpress \
$ --link wordpress:mysql \
$ -p 80 \
$ wordpress

wordpress 이미지를 가져와 웹 서버 컨테이너를 생성한다.

  • -d - mysql, wordpress와 같이 백그라운드에서 실행되어야 하는 컨테이너 생성 시 붙이는 옵션으로 컨테이너 실행 시 터미널을 차지하지 않고 프로세스가 계속 실행된다.
  • -e - 컨테이너 내부의 환경변수를 설정하는 옵션으로 컨테이너화된 애플리케이션의 환경변수에서 값을 가져와 쓸 수 있다.(예를들어 ‘WORDPRESS_DB_PASSWORD=1234’는 환경변수의 값을 1234로 지정한다는 뜻 …)
  • WORDPRESS_DB_HOST - wordpress가 연결한 데이터베이스 호스트
  • WORDPRESS_DB_USER - 데이터베이스 사용자명
  • WORDPRESS_DB_PASSWORD - 데이터베이스 비밀번호
  • --link mysql:mysql - 위에서 만든 mysql 컨테이너를 mysql이라는 별칭으로 링크한다.(같은 호스트 내에 있는 컨테이너들끼리 통신할 수 있는 방법)
  • -p 80 - 호스트 포트 중 하나와 컨테이너의 80 포트와 연결된다.

‘docker ps -a’를 통해 확인하면 아래와 같이 출력된다.

CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS          PORTS                                                                          NAMES
2753eeb5d79d   wordpress               "docker-entrypoint.s…"   12 minutes ago   Up 12 minutes   0.0.0.0:32768->80/tcp, :::32768->80/tcp                                        wordpress
2d5d3961e73b   mysql:5.7               "docker-entrypoint.s…"   17 minutes ago   Up 17 minutes   3306/tcp, 33060/tcp                                                            mysql

3. 웹 브라우저에서 확인하기

$ docker port wordpress
80/tcp -> 0.0.0.0:32768
80/tcp -> [::]:32768

위에서 생성한 wordpress에 바인딩된 포트만 확인하고 싶다면 docker port ${컨테이너명 } 을 통해 확인할 수 있다. 내 컨테이너는 호스트의 32768 포트와 연결됐기 때문에 url에 192.168.56.103:32768 을 입력하면 워드프레스 설치 화면이 정상적으로 나타난다.

 

4. 개념 설명

📌 -d

  • mysql, wordpress와 같이 백그라운드에서 실행되어야 하는 컨테이너 생성 시 붙이는 옵션으로 컨테이너 실행 시 터미널을 차지하지 않고 프로세스가 계속 실행된다.
  • mysql과 같이 백그라운드 실행으로 생성한 컨테이너는 기본적으로 컨테이너 내부에 들어갈 수 없다. 하지만 exec 명령어를 사용하면 컨테이너 내부의 셸을 사용할 수 있다.
    $ docker exec -it mysql bin/bash bash-4.2
    $ echo $MYSQL_ROOT_PASSWORD
    $ ${password }

📌 --link

$ --link wordpressdb:mysql
  • 내부 ip를 알 필요없이 컨테이너의 별명(alias)으로 접근하도록 설정할 수 있다.
  • wordpressdb 컨테이너를 mysql이라는 이름으로 설정함으로써 워드프레스 웹 서버 컨테이너는 wordpressdb의 IP를 몰라도 mysql이라는 호스트명으로 접근이 가능하다. ⭐
  • --link에 입력된 컨테이너가 실행 중이 아니거나 존재하지 않다면 --link를 적용한 컨테이너 또한 실행시킬 수 없다.
  • 현재 deprecated된 옵션이며 추후 삭제될 수 있다.
  • 도커 브리지(bridge) 네트워크를 사용하면 --link 옵션과 동일한 기능을 더욱 더 쉽게 사용할 수 있다.