개발 ON
  • [Network | Docker] 컨테이너 애플리케이션 구축
    2024년 06월 30일 23시 32분 21초에 업로드 된 글입니다.
    작성자: 이주여이

    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 옵션과 동일한 기능을 더욱 더 쉽게 사용할 수 있다.
    댓글