Environment & Database (2) - Docker

2021. 5. 16. 17:34[AI]/Data Engineering

New Stuff

Key Points

  • Docker
    • Docker Commands
    • Docker Compose

Learned Stuff

[Docker]

  • 어플리케이션 환경에 구애받지 않고 소프트웨어 컨테이너 안에 배치시켜 작업 및 배포하는 플랫폼

 

사용 이유

  1. 환경 표준화
  2. 리소스 격리성

 

Docker Commands

  • Docker 프로그램을 실행한 상태에서 코드 작성할 것

 

Docker Image

  • Code 작성 시 "{}"는 없애기
# 레지스토리에서 이미지 or 레지스토리 가져오기
$ docker image pull {이미지 이름} : {TAG} 

# 이미지 리스트 출력
$ docker image ls

# 특정 이미지 삭제
$ docker image rm {이미지 이름}

# 이미지 전체 삭제
docker rmi $(docker images -a -q)

 

Docker Container & Docker Container Run

# 받아온 이미지를 컨테이너로 실행 
$ docker container run [OPTIONS] {이미지 이름} [COMMAND] [ARG]

# 컨테이너 리스트 출력
$ docker container ps -a

# 특정 컨테이너 삭제
$ docker container rm {컨테이너 이름 or 컨테이너 ID}

# 컨테이너 전체 삭제
# stop된 container 만 삭제 가능
$ docker rm $(docker ps -a -q)

# 특정 컨테이너 stop 시키기
$ docker container stop {컨테이너 이름}

# 컨테이너 전체 stop 시키기
$ docker stop $(docker ps -a -q)

 

Docker Compose

  • 'YAML' 혹은 'YML' 파일로 Requirements 을 작성해 한번에 많은 컨테이너를 실행시키고 관리하는 방법

 

.YAML / .YML 파일 작성 예시

version: "3.7" # docker compose version

services:
  {Database 이름}:
    image: {이미지 이름:TAG}
    container_name: {컨테이너 이름}
    environment:
      - # 환경 변수 지정
    volumes:
      - {/host/path}:{/container/path}

  {container 이름 임의 지정}:
    image: {이미지 이름:TAG}
    container_name: {컨테이너 이름}
    ports:
      - "5050:80" # host 주소가 5050 일 때, container의 80 포트로 연결하겠다는 의미
    environment:
      - # 환경 변수 지정 
    depends_on:
      - {Database 이름} # database 관련 container 가 실행되면 해당 container를 실행하겠다는 의미
    volumes:
      - {/host/path}:{/container/path}

 

Docker Compose Commands

# 모든 서비스 컨테이너 실행
$ docker-compose up

# 모든 서비스 컨테이너 정지 & 삭제
$ docker-compose down

# 모든 서비스 컨테이너 목록 보기
$ docker-compose ps
728x90