Intro
지금까지 알아 본 것을 정리해서 컨테이너를 새로운 버전으로 업데이트하는 과정을 살펴 보겠다.
그리고 YAML 방식의 설정파일을 이용한 Docker Compose 툴에 대해 가볍게 알아보자.
1. 컨테이너 업데이트
도커에서 컨테이너를 업데이트하려면 새로운 버전의 이미지를 다운로드(pull) 받고,
기존 컨테이너를 삭제(stop, rm)한 후 새 이미지를 기반으로 새 컨테이너를 실행(run)하면 된다.
컨테이너를 삭제한다는 것은 컨테이너에서 생성한 파일이 사라진다는 뜻이다.
DB로 예를 들면 데이터가 모두 사라지는 것이고, 웹이라면 사용자가 업로드한 이미지가 모두 사라진다는 것이다.
이러한 상황을 방지하기 위해 컨테이너 삭제 시 유지해야 하는 데이터는 외부 스토리지에 저장해야 한다.
BEST는 AWS S3 같은 클라우드 서비스를 이용하는 것이고, 그 외에는 데이터 볼륨(Data Volumes)을 컨테이너에 추가해서 사용해야 한다.
데이터 볼륨을 사용하면 해당 디렉토리는 컨테이너와 별도로 저장되고, 컨테이너를 삭제해도 데이터가 지워지지 않는다.
데이터 볼륨 사용 방법
데이터 볼륨을 사용하는 방법은 여러 가지가 있지만 여기서는 호스트의 디렉토리를 마운트해서 사용하는 방법에 대해 알아보자.
- 마운트(Mount): 호스트의 파일 시스템 경로를 컨테이너 내부에 연결하는 것. 호스트 머신의 디렉토리나 파일을 도커 컨테이너 내부에서 사용하거나 읽을 수 있게 된다.
# before
docker run -d -p 3307:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
mysql:8.0
# after
docker run -d -p 3307:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
#호스트의 /my/own/datadir 디렉토리를 컨테이너의 /var/lib/mysql 디렉토리로 마운트
-v /my/own/datadir:/var/lib/mysql \ # <- volume mount
mysql:8.0
run 명령어의 -v 옵션을 사용했다.
- -v: 호스트와 컨테이너의 디렉토리 연결(마운트)
MySQL은 /var/lib/mysql 디렉토리에 모든 DB 정보가 담기므로 호스트의 특정 디렉토리를 연결하였다.
이제 데이터베이스 파일은 호스트의 /my/own/datadir 디렉토리에 저장되고, 컨테이너를 삭제해도 데이터는 사라지지 않는다.
만약 최신 버전의 MySQL 이미지를 다운 받고 다시 컨테이너를 실행할 때 동일한 디렉토리를 마운트 한다면 그대로 데이터를 사용할 수 있다.
2. Docker Compose
지금까지 도커를 커맨드라인에서 명령어로 작업했다.
간단한 작업만 해왔기에 명령이 길지 않지만, 컨테이너 조합이 많아지고 여러 설정이 추가되면 명령어가 복잡해진다.
도커는 복잡한 설정을 쉽게 관리하기 위해 YAML 방식의 설정 파일을 이용한 Docker Compose라는 툴을 제공한다.
기능이 많고 복잡한 툴이지만 여기서는 가볍게 다루겠다.
1) 설치
Docker for Mac 또는 Docker for Windows를 설치했다면 자동으로 설치된다.
리눅스의 경우 다음 명령어를 입력하여 설치할 수 있다.
curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# test
docker-compose version
2) WordPress 만들기
기존에 명령어로 생성했던 WordPress를 Compose를 이용해 만들어 보겠다.
- 빈 디렉토리 생성
- docker-compose.yml 파일 생성 후 아래 설정 입력
version: '2'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wp_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
wp_data:
docker-compose up
아주 쉽게 WordPress가 만들어 졌다.
명령어를 설정 파일로 바꾼 거에 불가하지만, 가독성과 편리성이 향상되었다.
참고: https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html
'log.info' 카테고리의 다른 글
[Docker] 이미지, 컨테이너 요약 (0) | 2024.06.13 |
---|---|
[Docker] 이미지 만들기 (0) | 2024.05.29 |
[Docker] 컨테이너 실행 및 도커 기본 명령어 (0) | 2024.05.28 |
[Docker] 설치 (0) | 2024.05.28 |
[Docker] Docker란? (0) | 2024.05.28 |