해당 글은
Wanted 프리온보딩 챌린지 8월 "도커 이미지 제작부터 클라우드 배포까지"를 수강한 내용을 토대로 정리한 글입니다.
지난주에 우리는 Docker란 무엇인가?
Docker의 기본적인 개념과 아키텍처를 알고, Docker Client(CLI)의 명령어를 통하여 이미지를 만들어보고 컨테이너를 실행하는 테스트를 진행하였다.
지난 번에 Docker Hub에서 httpd를 가져와서 컨테이너로 실행했었다.
Docker 아키텍처를 다시 한 번 복기해보자.
지난 시간에 클라이언트에서 docker pull 명령어를 사용하여 Registry(Docker Hub)에서 이미지를 가져오고, 가져온 이미지를 빌드하여 컨테이너화하였다.
이번에는 Docker Hub에 이미지를 등록하려면 어떻게 해야하는 지 알아보려고 한다.
먼저 이미지 태그를 설정해야는데, Docker Hub에 이미지를 등록하려면 다음과 같은 규칙을 준수해야한다.
[Docker Hub 사용자명]/이미지명:[태그명]
이미지 태그 설정은 다음과 같은 방법으로 가능하다.
이미지를 빌드하기 전이라면 다음 명령어를 사용하면 된다.
docker build -t hamwoojo/my-httpd
빌드 후에 이미지 태그를 설정하고 싶다면 다음 명령어를 사용하면 된다.
docker image tag hamwoojo/my-httpd
만약 Docker Hub에 가입하지 않았다면 회원가입을 먼저 진행해야 한다.
Docker Hub Container Image Library | App Containerization
Deliver your business through Docker Hub Package and publish apps and plugins as containers in Docker Hub for easy download and deployment by millions of Docker users worldwide.
hub.docker.com
회원 가입을 했다면 CLI에서 Docker Hub로 로그인을 하면 된다.
docker login
로그아웃도 가능하다.
docker logout
Docker Hub에 이미지를 올려보자.
docker push hamwoojo/my-httpd:latest
Docker Hub Repository에 가면 이미지가 잘 올라가있는지 확인 가능하다.
도커 네트워크 드라이버(Docker Network Driver)
도커 네트워크 드라이버는 여러 드라이버가 존재하며, 핵심 네트워크 기능을 제공합니다.
다음 명령어를 쳐서 도커 네트워크 목록을 확인할 수 있다.
docker network ls
다음과 같이 네트워크 드라이버를 확인할 수 있다. 각각에 대해 알아보자.
네트워크 드라이버(Network Drivers)
- bridge : 기본 네트워크 드라이버, 동일한 도커 호스트에서 컨테이너 간의 통신을 도와준다.
- host : 호스트의 네트워크를 직접 사용한다.
- overlay : 서로 다른 도커 호스트의 컨테이너 간 통신을 도와준다.
- none : 컨테이너를 호스트 및 다른 컨테이너로부터 완전히 격리한다.
해당 명령어를 활용하여 네트워크의 상세 정보를 볼 수 있다.
docker network inspect [Network ID or NAME]
docker network inspect bridge 명령어를 쳐보았다.
json으로 데이터가 표시되는데 중간에 Containers를 보면 연결된 컨테이너들에 대한 정보를 확인할 수 있다.
이번 실습에서는 워드프레스(WordPress) 컨테이너를 생성하고, 해당 네트워크를 생성해보려고 한다.
워드프레스(WordPress)란?
웹 사이트 및 블로그를 만들고 관리하는 데에 사용되는 무료 오픈소스 콘텐츠 관리 시스템(CMS)이다.
워드프레스는 PHP 로 작성된 오픈 소스 콘텐츠 관리 시스템으로, 기본적으로 MySQL을 데이터베이스 관리 시스템으로 사용하며, 중요한 기능과 데이터를 MySQL에 의존하고있다.
Blog Tool, Publishing Platform, and CMS - WordPress.org 한국어
아름다운 웹사이트, 블로그, 또는 앱을 쉽게 만드는 데 사용할 수 있는 오픈 소스 소프트웨어
ko.wordpress.org
따라서 워드프레스를 사용하기 위해서는 MySQL과 워드프레스가 필요하다.
MySQL과 워드프레스를 이미지로 가져와 컨테이너를 생성하고 실행해보자.
먼저 네트워크를 생성한다.
docker network create wordpress_net
docker run 시 mysql이 없다면 해당 이미지를 pull 해온다.
--name 이름을 지정한다.
-v 내 호스트 볼륨과 마운트할 컨테이 볼륨을 지정한다.
-e 는 환경 설정(environment)을 의미한다
--network 네트워크를 생성한 네트워크로 지정한다.
docker \
run \
--name "db" \
-v "$(pwd)/db_data:/var/lib/mysql" \
-e "MYSQL_ROOT_PASSWORD=root_pass" \
-e "MYSQL_DATABASE=wordpress" \
-e "MYSQL_USER=docker_pro" \
-e "MYSQL_PASSWORD=docker_pro_pass" \
--network wordpress_net \
mysql:latest
-p 옵션으로 포트포워딩을 한다.
docker \
run \
--name app \
-v "$(pwd)/app_data:/var/www/html" \
-e "WORDPRESS_DB_HOST=db" \
-e "WORDPRESS_DB_NAME=wordpress" \
-e "WORDPRESS_DB_USER=docker_pro" \
-e "WORDPRESS_DB_PASSWORD=docker_pro_pass" \
-e "WORDPRESS_DEBUG=1" \
-p 8000:80 \
--network wordpress_net \
wordpress:latest
http://localhost:8000에 접속해보자.
다음과 같이 화면이 나오면 제대로 실행되고 있는 것이다.
만약 이렇게 하나 하나씩 docker run을 해야한다면 매우 귀찮을 것이다.
지금은 두 개를 실행해서 괜찮지만 마이크로서비스로 이루어져있다고 가정해보자.
50개의 모듈이 있다고 가정해보면, 하나씩 실행하면서 관리하려면 관리하기도 힘들고, 관리비용도 상승할 것이다.
이러한 단점을 docker compose를 활용하면 어느정도 해결할 수 있다.
도커 컴포즈(docker compose)란?
- 도커 컨테이너를 일괄적으로 정의하고 제어하는 도구
- 설정 파일을 도커 CLI로 번역하는 역할
도커 컴포즈를 사용하면 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 제어할 수 있다.
도커 컴포즈는 yaml(YAML Ain't Markup Language) 형식으로 정의 파일을 작성한다.
정의 파일은 docker-compose.yml이라는 이름을 사용해야 하며, 이름을 다른 걸로 사용하려면 -f 명령어를 사용하여
파일명을 지정해야한다.
위에서 docker run을 두 번 실행해서 워드프레스를 실행했는데,
도커 컴포즈를 사용하면 하나의 파일, 하나의 명령어로 해결 가능하다.
다음은 위에서 실습한 워드프레스를 도커 컴포즈 정의 파일(docker-compose.yml)을 작성한 것이다.
하나씩 알아보자.
version: "3.0"
services:
db:
image: mysql:latest
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_pass
MYSQL_DATABASE: wordpress
MYSQL_USER: docker_pro
MYSQL_PASSWORD: docker_pro_pass
app:
depends_on:
- db
image: wordpress:latest
volumes:
- ./app_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: docker_pro
WORDPRESS_DB_PASSWORD: docker_pro_pass
- version : 도커 컴포즈의 버전
- services : 컨테이너의 집합
- image : 사용할 이미지
- volumes : 마운트(볼륨)을 설정
- restart : 컨테이너 종료 시 재시작 여부
- no : 재시작하지 않음
- always : 항상 재시작
- on-failure : 프로세스가 0 외의 상태로 종료됐다면 재시작
- unless-stopped : 종료 시 재시작하지 않음, 그 외에는 재시작 - environment : 환경 설정
- depends on : 서비스 간의 종속성 정의
- 컨테이너들 간의 실행 순서를 정의할 수 있다.
- 워드프레스는 MySQL에 의존적이므로 MySQL없이 사용할 수 없다. 따라서 MySQL을 먼저 실행해야한다. - ports : 포트포워딩 설정
도커 컴포즈를 실행해보자.
docker-compose -f docker-compose.yml up --build
http://localhost:8000/
에 접속해보면 워드프레스가 잘 실행되는 걸 확인할 수 있다.
-d 옵션을 주면 백그라운드에서 실행가능하다.
중지를 하기 위해서는 두 개의 명령어가 실행이 가능하다.
두 명령어 다 현재 실행중인 컨테이너를 중지하는데 사용한다.
차이점은 stop 명령어는 중지된 컨테이너가 컴포즈 환경과 관련된 네트워크, 볼륨등과 함께 그대로 존재한다.
docker compose stop
반면에 down 명령어는 컨테이너를 중지하고, 관련된 모든 리소스를 제거한다.
down 명령어는 컴포즈 파일에 정의한 서비스 들과 함께 네트워크, 볼륨, 컨테이너들을 모두 제거한다.
관련된 모든 데이터가 삭제된다고 볼 수 있다.
docker compose down
'Study > On-boarding' 카테고리의 다른 글
Wanted 프리온보딩 챌린지 백엔드 도커 - 1 (0) | 2023.08.02 |
---|