여러가지 방법들이 있지만 우선 이렇게만 알고 있으면 이해하기 편하다.
도커는 컨테이너 레이어와 이미지 레이어로 나눠져있는것을 볼 수 있다.
이미지를 빌드하고 이미지 레이어를 보면 5개의 또 다른 레이어로 나눠져 있다.
이미지를 예를 들면
Layer 1: 우분투 베이스
Layer 2: apt 패키지로 필수 프로세스 다운로드
...
Layer 5:
까지 쌓여져 있는 구조이다.
만약에 새로운 이미지가 필요할때 소스코드를 바꿔서 빌드를 하고 싶다면
레이어 1 ~ 3 까지는 유지하고 4부터만 변경해주면 되는 이점을 가질 수 있다.
컨테이너를 실행시킨다면 이미지 레이어는 읽기 전용이므로 변경을 할 수 없다.
호스트의 디렉토리를 컨테이너의 특정 경로에 마운트한다.
docekr run -d \
--name nginx \
-v /opt/html:/usr/share/nginx/html \
nginx
호스트의 /opt/html 디렉토리를 Nginx의 웹 루트 디렉토리로 마운트
바탕화면에 html 이라는 폴더에 index.html 라는 파일을 생성한다.
<h1>Hello world!</h1>
index.html은 위와 같은 코드가 적혀져 있다.
그리고
docekr run -d \
--name nginx \
-p 80:80 \
-v /$(pwd)/html:/usr/share/nginx/html \
nginx
// $(pwd)는 현재 호스트의 워킹 디렉토리 경로
명령어를 실행!
호스트의 80포트와 컨테이너의 80포트를 연결한 nginx에 -v
명령어 이후의 파일을 컨테이너의 경로로 마운트 한다 라는 뜻의 명령어이다.
그 후
curl localhost
명령어를 통해 리스폰스를 확인하거나
웹 브라우저에 localhost로 접속해보자
잘 된다
특정 컨테이너의 볼륨 마운트를 공유할 수 있다.
docker run -d \
--name my-volume \
-it \
-v /$(pwd)/html:/usr/share/nginx/html \
ubuntu:focal
// my-volume 컨테이너의 볼륨을 공유
docker run -d \
--name nginx \
--volumes-from my-volume \
-p 80:80 \
nginx
--volumes-from
명령어를 사용한다.
위 명령어를 차례로 실행시킨 뒤 docker inspect를 사용해 nginx 컨테이너의 Mounts 정보를 확인하면 데이터의 소스와 목적지가 나와있다
ubuntu 볼륨 컨테이너를 거쳐서 왔지만 Source는 호스트경로가 있다.
도커가 제공하는 볼륨 관리 기능을 활용하여 데이터를 보존
기본적으로 /var/lib/docker/volumes/${volume-name}/_data
에 데이터가 저장된다
// db 도커 볼륨 생성
docker volume create --name db
// 도커의 db 볼륨을 nginx의 웹 루트 디렉토리로 마운트
docker run -d \
-e MYSQL_DATABASE=simon \
-e MYSQL_ROOT_PASSWORD=simon \
-v db:/var/lib/mysql \
-p 3306:3306 \
mysql:5.7
mysql 컨테이너를 띄울때 두가지 환경변수를 무조건 지정해줘야 하는데 MYSQL_DATABASE
: 최초로 생성될 데이터베이스의 이름
MYSQL_ROOT_PASSWORD
: 루트 계정 비밀번호
-e
명령어로 같이 지정해준다.
/var/lib/mysql
: mysql이 데이터를 쌓는 경로
볼륨 연결 설정에 :ro
(read only) 옵션을 통해 읽기 전용 마운트 옵션을 설정할 수 있다.
// 호스트 볼륨을 nginx의 웹 루트 디렉토리로 읽기 전용 마운트
docker run -d \
-v $(pwd)/html:/usr/share/nginx/html:ro \
nginx
도커 컨테이너에 bash로 명령어 상의 경로로 접속후 파일을 생성하려고 시도하면 위와 같은 경고가 뜬다.
끝