[Docker & GC VM] 기본 사용법

Infinity-blue·2023년 10월 24일
0

도커의 기본적인 최소한의 명령어를 Google Cloud VM에서 사용하는 방법에 관하여 알아보자. 어떤 환경에서 도커 이미지를 사용하느냐에 따라 코드가 조금 달라질 뿐 (e.g. "gcr.io..") 전반적인 명령어 사용법은 거의 같다.

도커란?

애플리케이션과 그에 필요한 모든 것(e.g.환경설정, 라이브러리, 시스템 툴, 등) 을 패키징하여 어느 환경이든 개발, 배포 및 구동을 쉽게 하도록 도와주는 툴.

Docker 실행하기(아래의 2가지 방법 모두 Dockerfile은 필수)

1. 도커 이미지 만들기 ("."는 현재 위치한 디렉토리 위치에서 도커파일을 찾게 한다.)

1) Dockerfile만을 이용한 대표적인 이미지 빌드 방식.

docker build -f <도커파일 이름> -t <원하는 도커 이미지 이름> .
  • Dockerfile 예시(예시 백엔드는 장고):
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  하나>
  • docker-compose.yml 예시:
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'를 설정해야 컨테이너의 파일 시스템을 별개의 컨테이너 및 로컬 호스트 간에 공유할 수 있다.

2. 도커 이미지 태그하기

docker tag <위에서 만든 이미지 이름> "gcr.io/<"project ID">/<"태그하고자 하는 도커 이미지 이름">:<"이미지 식별 버전">

3. VM에 SSH 접속.

4. Google cloud의 Container registry에 있는 도커 이미지를 가져온다.

docker pull gcr.io/<"project ID">/<"도커 이미지 이름">:<"이미지 식별 버전">

5. 도커 이미지 실행시키기.

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 

6. 실행되고 있는 도커 컨테이너 중단.

docker stop < 컨테이너 이름> 
docker-compose down


그 외 Docker 명령어

6. 컨테이너 로그 확인

docker logs <container_id_or_name>

7. 현재 돌아가고 있는 컨테이너 프로세스 리스트의 상태 출력

docker ps 

8. 오류로 인해 돌아가지 않는 컨테이너 리스트 출력

docker ps -a

7. 컨데이터에 접속하기.

docker exec -it <container_name_or_id> /bin/sh

0개의 댓글