도커 파일 메모리 저장을 위한 두가지 방법
1. named volume
--name 옵션은 컨테이너 이름주는 옵션
-p 옵션은 로컬호스트 27017 을 컨테이너의 27017호스트에 연결하는 옵션
-d 백그라운드에서 실행시키는 옵션
docker volume create memo
도커 메모리를 memo라는 이름의 네임드볼륨에 저장하기
docker volume inspect memo 커맨드를 통해서 named volume에 대한 정보를 더 알 수 있음. 예를들면 어디에 저장되어 있는지 등등
docker run -d -p 27017:27017: -v memo:/data/db mongo
-v 옵션으로 네임드 볼륨에 연결 / memo라는 네임드볼륨을 data/db 라는 폴더랑 연결하고 이미지 이름을 넣으면됨.
Docker bind mount란?
내가 원하는 volume을 docker container 내의 volume에 연결하는 기능
docker run -v {host_path}:{container_path} <docker_image>
docker run -v "$(pwd)/templates:/templates" -p 80:5000 ecec1023/docker-memo:version2
pwd = 경로
docker run -v \Users\ecec1\prac\docker\memo-app\templates -p 80:5000 -d ecec1023/docker-memo:version2
도커 네트워크 문법
docker network create test
도커 네트워크 생성
docker run -d -p 24017:24017 --network test --network-alias mongo mongo
도커 네트워크 연결해서 컨테이너 실행하기
--network-alias mongo 는 앞으로 mongodb에 연결하고 싶을 때 네트워크에서 mongo라는 이름을 쓰면 연결해주겠다는 뜻임.
docker run -it --network test nicolaka/netshoot
nicolaka/netshoot 이라는 이미지를 가져와서 테스트 해보는 명령어
dig mongo를 커맨드를 쳐보면 몽고 네트워크 연결된 경로를 파악할 수 있음.
도커컨테이너의 리소스 사용량 제한
1. 할당된 메모리의 제한을 둔다(해당 메모리를 초과하면 자동으로 꺼짐)
docker run -ti python:3.8
-->> docker run -ti -m 10m python:3.8 (10g를 쓰면 10기가바이트를 할당)
Docker-compose(bind mount와 named volume 모두 지원)
실행명령어 : docker-compose up /
docker-compose up -d(백그라운드실행) / docker-compose down(실행취소)
세팅 내용
version: "3.9"
services:
flask:
build:
context: .
ports:
- 5000:5000
mongo:
image: mongo:latest
ports:
- 27017:27017
mongo db는 named volume을 써서 데이터 유지 / template도 이전처럼 templates폴더의 index.html에 자동연결
세팅내용
version: "3.9"
services:
flask:
build:
context: .
volumes: --->>> volumes 라는 필드가 있어서 아래처럼 연결하면 bind mount가 되고,
- ./templates:/templates
ports:
- "5000:5000"
mongo:
image: mongo:latest
volumes:
- mongo:/data/db/
ports:
- "27017:27017"
volumes: --->>> 위의 services아래가 아닌 volumes 라는 필드를 앞으로 들여쓰기해서 mongo를 적 어주면 새로운 named volume 생성
mongo:
사용하지 않는 리소스들 정리하기 순서
1. 리소스들 확인 명령
docker ps -a
docker images
docker network ls
docker volume ls
docker system prune(모든 도커 리소스들 다 빨리 적용하는 명령어)
docker system prune -a (이미지는 다시 사용하는 경우도 있어서 이미지도 더 세게 삭제하는 명령어)
--- container와 image의 경우에는 disk 용량을 많이 사용하므로 주기적으로 삭제하면 좋음 ---
도커 이미지 꿀팁들
1. 도커 이미지의 빌드속도를 빠르게 하는 것
- docker layer cache 사용
도커명령어 하나가 실행될 때마다 레이어가 생기는 방식으로 이미지를 빌드
docker build . 명령어에서 CACHED 뜨는 부분.
Dockerfile 에서 제일 많이 바뀌는 부분을 제일 아래로 보내야함.
바뀌는 것들이 위에 있으면 아래에 있는 친구들은 layer caching이 안 됨.
도커 이미지의 사이즈를 줄이기
.dockerignore 파일 추가하기 (도커 빌드 사이즈가 커지면 하는 걸 추천)
/venv 등등 추가 ( ADD . . 이런식으로 모든 파일 추가하게 될 때)
작은 base image 사용해서 도커이미지 축소하기
여태껏 사용한 base image는 python:3.8
다양한 종류의 tag가 존재하는데 대표적으로
alpine
buster, jessie, stretch
slim
FROM python:3.8-slim AS builder --->>> 빌드할 때 사용하겠다.
ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt
FROM python:3.8-slim-buster --->>> 실제로 실행할 때 사용하겠다.
COPY --from=builder/usr/local/lib/python3.8/site-packages /usr/local/lib/python3.8/site-packages
--->>> 카피는 requirements.txt 의 pip install 하면 깔리는 위치의 라이브러리들을 가져와서 쓸 수 있게 하는 방법
ADD templates templates
ADD app.py .
CMD ["python", "app.py"]
docker run -ti test:latest /bin/bash 실행해서 requirements.txt 가 빠져서 실행되는지 체크 가능
요약
1.named volume 을 통해 db 연동
2.bind mount를 통해 개발환경에서 좀더 편하게 내가 원하는 폴더들을 컨테이너에서 사용할 수 있게 만듦
3. docker network 여러개의 컨테이너가 실행되는 환경에서 서로 통신이 필요할 때 세팅하는 법
4. 도커 컨테이너의 리소스가 과하게 사용되는 것을 제한하는 방법
5. 도커 리소스를 편하게 관리하기 위해 docker-compose.yaml을 통해서 도커 리소스를 실행
6. 사용하지 않는 도커 리소스 정리하는 법 배움
7. 도커를 빠르게 빌드하고, 작게 빌드하는 꿀팁들을 배움
source venv/bin/activate (virtual venv 활성화 명령어)