Framework and Tool/Docker
Container application example
ocwokocw
2023. 6. 10. 23:35
출처: 시작하세요! 도커/쿠버네티스 - 컨테이너 애플리케이션 구축
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 화면을 만나볼 수 있다.