docker build -t app ./
명령어를 입력하면 dockerfile이라는 명세파일을 기반으로 빌드가 진행됨
레이어 구조의 장점 : 추후에 레이어상의 변경이 있을 때 필요한 레이어만 변경이 가능하기 때문에 유지보수에 용이하다. 뿐만 아니라 여러 버전이 생성되더라도 용량을 줄일 수 있다.
이미지 레이어 vs 컨테이너 레이어
이미지 레이어는 읽기 전용
컨테이너 레이어는 읽기 쓰기 가능
컨테이너가 종료되면 컨테이너 레이어도 함께 삭제 (임지 저장소 개념)
호스트의 디렉토리를 컨테이너의 특정 경로에 마운트한다.
docker run \
-d \
-v $(pwd)/html:/usr/share/nginx/html \
-p 80:80 \
nginx
pwd : 현재 디렉토리 경로
컨테이너 안에서 생성한 파일이 호스트의 디렉토리에도 동일하게 생성됨
docker run \
-d \
-it \
-v $(pwd)/html:/usr/share/nginx/html \
--name web-volume \
ubuntu:focal
docker run \
-d \
--name fastcampus-nginx \
--volumes-from web-volume \
-p 80:80 \
nginx
docker run \
-d \
--name fastcampus-nginx2 \
--volumes-from web-volume \
-p 8080:80 \
nginx
도커가 제공하는 볼륨 관리 기능을 활용하여 데이터를 보존하는 방법
기본적으로 /var/lib/docker/volumnes/${volume-name}/_data 에 데이터가 저장됨
docker volume create --name db
docker volume ls
docker run \
-d \
--name fastcampus-mysql \
-e MYSQL_DATABASE=fastcampus \
-e MYSQL_ROOT_PASSWORD=fastcampus \
-v db:/var/lib/mysql \
-p 3306:3306 \
mysql:5.7
볼륨 연결 설정에서 :ro 옵션을 통해 읽기 전용 마운트 옵션을 설정할 수 있다.
touch: cannot touch '/usr/share/nginx/html/test': Read-only file system
ro 옵션을 사용하면 파일을 생성하는 명령어가 작동하지 않는다.