$ docker run -v {host_path}:{container_path} <docker_image>
/templates
를 입력해주면 된다.$ docker run -v "$(pwd):/templates" -p 80:5000 wellshs/docker-memo:version2
$ docker run -v "/Users/jeongdaegeun/Desktop/my_refer/스파르타/docker/templates:/templates" -p 80:5000 wjdeorms27/docker-practice:2.0.0
$(pwd)
를 사용하게 되면 내가 아래에 작성했던 내용이 전부 자동으로 들어오게 된다. network
를 통해서 docker container끼리 통신
을 하게 만들 수 있어요$ docker network create {네트워크이름}
$ docker run -d -p 27017:27017 --network {네트워크이름} --network-alias mongo mongo
dig mongo
라는 명령어를 통해 연결이 잘 되었는지 확인할 수 있다.$ docker network create memo
$ docker run -d -p 27017:27017 --network memo --network-alias mongo mongo
client = MongoClient('mongo', 27017) # localhost -> mongo로 변경
$ docker build -t wjdeorms27/docker-practice:3.0.0 .
$ docker run -p 80:5000 --network memo wjdeorms27/docker-practice:3.0.0
$ docker run -i -m 10m python:3.8
$ docker run -i --cpus=0.5 python:3.8
$ docker stats
편리하게 실행
하기 위해서 만들어둔 도구YAML 파일
을 통해 container를 실행하는데 필요한 옵션을 정의할 수 있다.YAML 파일
을 생성해주면 된다.YAML
: YAML Ain't Markup Language
version: "3.9"
services:
flask: # flask를 사용함
build:
context: . # 이미지가 빌드될 때의 위치는 도커 컴포즈 파일이 있는 위치
ports:
- "5000:5000"
docker-compose.yaml
파일이 있는 곳에서 실행해야 함!$ docker-compose up
$ docker-compose up -d <<< 백그라운드 실행
$ docker-compose down <<< 백그라운드 실행 시 작동 종료
db
가 없기 때문이다. 이제 docker-compose로 mongodb를 연결해보자. 기본적으로 같은 network를 사용
한다.docker-compose.yaml
파일 수정version: "3.9"
services:
flask:
build:
context: .
ports:
- "5000:5000"
mongo:
image: mongo:latest
ports:
- "27017:27017"
version: "3.9"
services:
flask:
build:
context: .
volumes:
- ./templates:/templates
ports:
- "5000:5000"
mongo:
image: mongo:latest
volumes:
- mongo:/data/db/
ports:
- "27017:27017"
volumes:
mongo:
$ docker-compose down
$ docker-compose up -d
$ docker ps -a
$ docker images
docker-compose down
을 하게 되면 자동으로 삭제되어 나오지 않는다. $ docker network ls
$ docker volume ls
$ docker rm container_id
$ docker rmi image_id
$ docker network rm network_id
$ docker volume rm volume id
$ docker system prune <<< 다 삭제하지만, 사용하거나 사용가능성이 있으면 남김
$ docker system prune -a <<< 얘는 진짜 다 삭제
자주 변경이 되는 파일들이 아래 쪽에 위치
해야 한다. ADD requirements.txt .
와 RUN pip install -r requirements.txt
는 빌드를 할 때 시간이 많이 걸리는 코드들이다. 얘네가 아래에 있으면 이미지를 여러 번 생성할 때에도 어떤 것이 깔려있는지 확인을 바로 하지 못해 시간이 더 걸릴 수 있다. cached
데이터를 통해 변경이 없다면 해당 부분은 바로 넘어가 시간이 많이 단축되게 된다.FROM python:3.8
ADD requirements.txt .
RUN pip install -r requirements.txt
ADD templates ./templates/
ADD app.py .
CMD ["python", "app.py"]
/venv
ADD . .
과 같은 command를 사용할 경우, 의도하지 않은 파일이 image가 커질 수 있다. Docker image의 크기를 줄이는 것의 장점
여태껏 사용한 base image는 python:3.8인데, 300m가 넘는다.
다양한 종류의 tag가 존재하는데 대표적으로
alpine
buster, jessie, stretch
slim
실행에 필요한 환경만 만들어둔 image
이미지가 기본이미지에 비해서는 작음 (python:3.8 기준 41.11MB)
보통 python 실행환경에서 가장 많이 쓰이는 이미지
FROM python:3.8-slim
ADD requirements.txt .
RUN pip install -r requirements.txt
ADD templates templates
ADD app.py .
CMD ["python", "app.py"]
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
ADD templates templates
ADD app.py .
CMD ["python", "app.py"]