TIL113. Docker : Docker-compse 문법 및 명령어

ID짱재·2022년 1월 18일
0

Docker

목록 보기
6/6
post-thumbnail
post-custom-banner

📌 이 포스팅에서는 docker-compose 문법 및 명령어에 대해 알아보겠습니다.



🌈 docker-compse 문법

🔥 YAML 문법 기본

🔥 docker-compose 파일 작성법

🔥 docker-compose.yml 예시

🔥 docker-compose 명령어


🤔 YAML 문법 기본

✔️ YAML 문법을 사용할 때 확장자는 .yml 이다.

✔️ 딕셔너리(key와 value)는 콜론(:) 기호를 두고 사용한다. key:value

✔️ 리스트는은 - 기호를 사용하고, 주석은 # 기호를 사용한다.

✔️ 블록 내에선 두칸 들여쓰기 한다.


🤔 docker-compose 파일 작성법

✔️ 파일명은 cocker-compose.yml 로 만든다.

✔️ 'version'은 가장 위에 명시하며, docker-compose.yml 명세서의 버전을 의미한다. docker-compose.yml 버전에 따라 지원하는 docker 엔진 버전도 다르다.

✔️ 'services'는 실행할 컨테이너를 정의하는 곳으로, --name django와 매핑되는 부분이다.

version: '3'
services:
  postgres:
    ....
    ....
  django:
    ....
    ....

✔️ 'image'는 컨테이너에 사용할 이름과 태그를 입력하고, 생략할 경우 latest 버전이 이미지로 사용된다. 또한 해당 이미지가 존재하지 않으면 자동으로 pull을 받아온다.

version: '3'
services:
  django:
    image: django-sample
    ....

✔️ 'build'는 기존 이미지를 사용하는 것이 아닌, 직접 이미지를 build 후 사용할 때 이용한다. 이에 image 속성 대신에 사용하기도 한다. build를 사용할 경우, build에 필요한 별도의 Dockerfile이 필요하다.

version: '3'
services:
  django:
    build:
      context: .
      dockerfile: ./compose/django/Dockerfile-dev
    ....

✔️ 'ports' 옵션은 -p, 'volumes'은 -v 옵션과 같은 기능이다.

version: '3'
services:
  django:
    image: django-sample
    ports: "8000:8000"
    volumes:
      - ./app:/app
    ....

✔️ 'environment'는 컨테이너에서 사용할 환경변수들을 지정할 떄 사용한다.

version: '3'
services:
  django:
    image: django-sample
    ports: "8000:8000"
    environment:
      - MYSQL_ROOT_PASSWORD=somewordpress
    ....

✔️ 'link' 명령어는 다른 컨테이너와 연결하기 위해 사용한다. 연결할 컨테이너 이름:해당 컨테이너에서 참조할 이름 으로 작성된다. 단, docker-compse 파일 안에서는 모든 컨테이너가 연결되기 때문에 요즘은 주로 사용하지 않는다. --link와 같은 역할이다.

✔️ 'depends_on'은 의존성에 대해 명시하기 위한 문법이다. django 컨테이너가 실행되기 전에 mysql이 먼저 실행되어야 한다면 아래 처럼 작성한다.

version: '3'
services:
  mysql:
    ....
    ....
  django:
    depends_on:
      - mysql  # 👈 django가 mysql에 의존하기 때문에 mysql이 먼저 컨테이너화된 후 django 실행
    ....

🤔 docker-compose.yml 예시

✔️ docker-compose로 워드프레스 & Mysql 실행하기

✔️ docker-compose.yml 예시

version: '3.3'
#
services:
  db:
  image: mysql:5.7 # 👈 mysql 5.7 버전 사용
  volumes:
    - db_data:/var/lib/mysql # 👈 db_data는 맨 아래 volumes에서 가져옴
  environment: # 👈 환경변수 설정
    MYSQL_ROOT_PASSWORD: somewordpress
    MYSQL_DATABASE: wordpress
    MYSQL_USER: wordpress
    MYSQL_PASSWORD: wordpress
#    
  wordpress:
    image: wordpress:latest # 👈 wordpress 최신버전
    ports:
      - '60000:80' # 👈 60000번 port를 컨테이너내부 80번 port와 포트포워딩
    restart: always
    environment: # 👈 환경변수 설정
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
#
volumes:
  db_data: {}

🤔 docker-compose 명령어

✔️ 필요한 이미지를 다운 받는다.

$ docker-compose pull [service]

✔️ 필요한 이미지를 build 한다.

$ docker-compose build [service]

✔️ 필요한 이미지를 구동한다. --build 옵션은 강제로 다시 build하고, --force-recreate는 컨테이너를 새로 생성해준다, -d는 데몬 모드로 실행시킨다.

$ docker-compose up [service]

✔️ 현재 실행 중인 서비스 목록을 보여준다.

$ docker-compose ps

✔️ 로그를 확인하는 명령어이고, -f 옵션을 주면 로그를 계속 볼 수 있다.

$ docker-compose logs [service]

✔️ 서비스 내에서 실행 중인 프로세스 목록을 보여준다.

$ docker-compose top

✔️ 해당 서비스를 중지시킨다.

$ docker-compose stop [service]

✔️ stop된 서비스의 컨테이너를 실행시킨다.

$ docker-compose start [service]

✔️ 해당 서비스의 컨테이너 내에서 명령어를 실행한다. -e 옵션을 주면 환경변수를 지정할 수 있다.

$ docker-compose exec {conatiner} [command]

✔️ 해당 서비스에 컨테이너를 하나 더 실행한다. -e 옵션은 환경변수, -p는 포트, --rm은 종료시 삭제 옵션을 줄 수 있다.

$ docker-compose run [service][command]

✔️ stop과 kill을 모두 한 것과 같다. 중지 후 컨테이너를 삭제한다.

$ docker-compose down [service]

profile
Keep Going, Keep Coding!
post-custom-banner

0개의 댓글