도커의 기본적인 최소한의 명령어를 Google Cloud VM에서 사용하는 방법에 관하여 알아보자. 어떤 환경에서 도커 이미지를 사용하느냐에 따라 코드가 조금 달라질 뿐 (e.g. "gcr.io..") 전반적인 명령어 사용법은 거의 같다.
애플리케이션과 그에 필요한 모든 것(e.g.환경설정, 라이브러리, 시스템 툴, 등) 을 패키징하여 어느 환경이든 개발, 배포 및 구동을 쉽게 하도록 도와주는 툴.
1) Dockerfile만을 이용한 대표적인 이미지 빌드 방식.
docker build -f <도커파일 이름> -t <원하는 도커 이미지 이름> .
FROM python:3.7-slim
# Set the working directory inside the container.
WORKDIR /app
# Install system dependencies
RUN apt-get update
RUN apt install...
RUN apt-get install -y cmake
# Install Pipenv.
RUN pip install pipenv
# Copy Pipfile and Pipfile.lock
COPY.. /app/Backend/
RUN .....
# Document that the service listens on port 8000.
EXPOSE 8000
# Set the working directory to where manage.py is located
# WORKDIR /app/Backend/..
# Collect static files
RUN cd /app/Backend/..&& pipenv run python manage.py collectstatic --noinput
# Set a default port in case one isn't provided
# ENV PORT=8000
# Start the application. Ensure that the application is accessible from outside the container.
CMD cd /app/Backend/..&& pipenv run gunicorn ..wsgi:application --bind 0.0.0.0:$PORT
2) docker-compose.yml 을 만들어 아래의 예시와 같이 어떤 서비스를 어떻게 빌드할 지 코드를 짠 후 아래의 명령어를 입력한다. 다수의 컨테이너를 만들경우 추천.
docker-compose build <docker-compose.yml의 services 중 하나>
version: '3'
services:
django:
build:
context: .
dockerfile: Dockerfile
image: ......
expose:
- "8000"
ports:
- "8000:8000"
volumes:
# mount 'tryon_..' from this project to '/app/..' inside the container. The work directory of container is defined Dockerfile.
- tryon_static_volume:/app/..
- tryon_media_volume:/app/..
# environment:
# - PYTHONPATH=/app/Backend
# - DJANGO_SETTINGS_MODULE=project.project.settings
nginx:
build:
context: .
dockerfile: Dockerfile-nginx
image: .....
ports:
- "80:80"
- "443:443"
volumes:
- ...static_volume:/usr/share/nginx/html/static
- ...media_volume:/usr/share/nginx/html/media
....
volumes:
tryon_static_volume:
tryon_media_volume:
위의 docker-compose.yml의 경우 'Volumes'를 설정해야 컨테이너의 파일 시스템을 별개의 컨테이너 및 로컬 호스트 간에 공유할 수 있다.
docker tag <위에서 만든 이미지 이름> "gcr.io/<"project ID">/<"태그하고자 하는 도커 이미지 이름">:<"이미지 식별 버전">
docker pull gcr.io/<"project ID">/<"도커 이미지 이름">:<"이미지 식별 버전">
1) Dockerfile 만을 이용하여 빌드된 이미지일 경우
docker run -d --name <"원하는 도커 컨테이너 이름"> gcr.io/<"project ID">/<"도커 이미지 이름">:<"이미지 식별 버전">
2) docker-compose.yml, Dockerfile을 이용하여 만들어진 이미지일 경우
docker-compose up -d
OR
docker-compose up <docker-compose.yml에 짜여진 서비스 이름> -d
docker-compose up --build -d
docker stop < 컨테이너 이름>
docker-compose down
docker logs <container_id_or_name>
docker ps
docker ps -a
docker exec -it <container_name_or_id> /bin/sh