📌 이 포스팅에서는 docker-compose 문법 및 명령어에 대해 알아보겠습니다.
🔥 YAML 문법 기본
🔥 docker-compose 파일 작성법
🔥 docker-compose.yml 예시
🔥 docker-compose 명령어
✔️ YAML 문법을 사용할 때 확장자는 .yml 이다.
✔️ 딕셔너리(key와 value)는 콜론(:) 기호를 두고 사용한다. key:value
✔️ 리스트는은 - 기호를 사용하고, 주석은 # 기호를 사용한다.
✔️ 블록 내에선 두칸 들여쓰기 한다.
✔️ 파일명은 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로 워드프레스 & 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 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]