본문 바로가기
Framework and Tool/Docker

Container application example

by ocwokocw 2023. 6. 10.

출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 애플리케이션 구축

Container 구성

일반적으로 Service를 제공한다고 하면 여러 모듈로 구성되는 경우가 많다. 웹 어플리케이션을 아무리 간단한 형태라도 Web 과 DB 는 기본적으로 구성하는 경우가 많다.

DB와 Web을 하나의 Container에 넣을 수도 있지만 각각 다른 Container로 관리하면 독립성이 보장되고 Version 관리가 쉬워지는 등 이점이 많다.


Wordpress + DB Container 생성

wordpress를 들어본적이 있는지 모르겠다. wordpress는 널리 사용되는 웹사이트 제작도구이다. 이에 DB를 연동하여 블로그서비스를 구축해보자.

~ % docker run -d --name wordpressdb \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
arm64v8/mysql:8

~ % docker run -d \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=password \
--name wordpress --link wordpressdb:mysql -p 80 wordpress

mysql:5.7 image로 생성해도 되는데 M1 이라면 docker: no matching manifest for linux/arm64/v8 in the manifest list entries. 라는 에러를 만날 수 있다. 이런 경우 arm64v8/mysql:8 이미지를 사용해주면된다.

이전의 docker run에 비해 많은 옵션이 추가되었다.

  • -d: container를 background로 실행시킨다. attach mode인 -it와 대비되는 옵션이라고 할 수 있다. -d option으로 실행하면 내부에서 프로그램이 터미널을 차지하는 foreground로 실행되어 사용자 입력을 받지 않는다. 만약 container에서 foreground로 프로그램이 실행되지 않으면 container는 곧바로 종료된다.
  • -e: 환경 변수를 설정한다.
  • --link: A에서 B로 접근하는 가장 간단한 방법은 Docker가 할당한 NAT IP를 사용하는것이지만 container 생성마다 매번 다르게 할당되기 때문에 이를 이용할 수 없다. --link option을 사용하면 alias 기반으로 접근할 수 있다. 위의 예제에서 사용된 wordpressdb:mysql 와 같이 값을 설정하면 wordpressdb container를 mysql이라는 이름으로 설정하여 wordpress container에서는 mysql 이라는 host 명으로 접근할 수 있게된다.

wordpress 에서 -p option을 사용하여 host의 80 port와 바인딩을 했는데 docker port [container name] 명령어를 이용하면 바인딩이 잘 되었는지 확인할 수 있다.

~ % docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                   NAMES
522c0517e17d   wordpress         "docker-entrypoint.s…"   12 seconds ago   Up 10 seconds   0.0.0.0:64267->80/tcp   wordpress
830312d28a78   arm64v8/mysql:8   "docker-entrypoint.s…"   34 seconds ago   Up 33 seconds   3306/tcp, 33060/tcp     wordpressdb

~ % docker port wordpress
80/tcp -> 0.0.0.0:64267

위의 예제에서는 host의 64267 port와 wordpress container의 80 port가 바인딩되었다. localhost:64267로 접근하면 wordpress installation 화면을 만나볼 수 있다.

'Framework and Tool > Docker' 카테고리의 다른 글

Docker network  (0) 2023.06.12
Docker volume  (0) 2023.06.11
Container port  (0) 2023.06.10
Container 생성 및 삭제  (0) 2023.06.03
Image와 Container  (0) 2023.05.31

댓글