[컴] docker-compose

docker compose / docker-compose commands

docker-compose

docker-compose 로 할 수 있는 것ref.1

  • 서비스들의 start, stop, rebuild
  • 동작중인 서비스들의 status 를 볼 수 있다.
  • 동작중인 서비스들의 log output 의 stream
  • 서비스에 대해서 one-off command 를 실행할 수 있다.

help

docker-compose help up 을 이용해서 사용법을 알 수 있다.

docker-compose help up

compose.yml

기본적으로 compose.yml 을 이용한다. 다만 backward compatibility 를 위해서 docker-compose.yml 도 지원한다.

# compose.yml
version: '3.8'

# x- 로 시작하는 값은 무시된다.
x-rep_env: &rep_env
  networks:
    - mybridge


services:
    crond:
        # extension fields 값 사용
        <<: *rep_env
        image: crontest
        volumes:
            - ./15min:/etc/periodic/15min
        hostname: cronhost
    myblog:
        # ref.2 참고
        # build 에는 Dockerfile path, image 는 tagname 을 적으면 된다.
        build: .
        image: my-jekyll:1.0.0
        volumes:
            - d:\a\prog\ruby\jekyll\docker\my-test-blog\:/home/jekyll/my-test-blog2
        ports:
            - "8000:8000"
        # 아래처럼 접근할 수 있다. 이때 주의할 점은 "(쌍따옴표)를 붙이지 말아야 한다.
        # 붙이면 'cronhost' docker 의 hostname 이 아니라 그냥 string 으로 인식하니 주의하자.
        environment:
            - CROND_SERVER_URL=http://cronhost:8000/test
        # docker 의 logging file 을 rotate 시켜준다.
        logging:
            driver: 'json-file'
            options:
                max-size: '10m'
                max-file: '10'

    downloadbox:
        #
        # docker login 이 된 상황에서 docker hub 에서 image 를 가져온다.
        image: centos:centos8
        #
        # 아래 설정으로 interactive 한 bash 를 실행할 수 있다. 그래서 bash 를 실행한 후 exit 하지 않고 계속 input 을 기다리게 된다.
        stdin_open: true # docker run -i
        tty: true        # docker run -t
        volumes:
            - d:\a\prog\docker\mylocal_dir:/var/mylocal_dir
        entrypoint:
            - bin/bash
networks:
  mybridge:
  

-d option 은 detach 를 의미한다. 그래서 container 를 background 로 띄운다.

docker-compose up -d

compose file 의 top-level elements

실행, 종료

docker-compose.ymlcompose.yml 가 있는 곳에서 실행하면 된다.

docker-compose up
docker-compose down

docker compose down 을 하면 container 도 같이 사라진다. docker ps -a 를 해보면 사라진 것을 확인할 수 있다.

test tips

만약 Dockerfile 이 build 후에 계속 run 하게 하고 싶다면, 간단히 tail -f /dev/null 을 해주면 된다. 저렇게 running 인 상황에서 container 에 붙어서 bash 를 실행하면 된다.

  • docker exec -it <container_id | container names> bash

version: '3.8'
services:
  build_php:
    build:
      context: .
      dockerfile: ./Dockerfile.wasi-builder
    entrypoint:
      - tail
      - -f
      - /dev/null

테스트용 docker network:

명령어들(commands)

아래 link 에서 왼쪽 list 를 보면 명령어들을 확인할 수 있다.

  • Overview of docker-compose CLI | Docker Documentation
  • docker compose | Docker Documentation : 이제 docker compose 로도 실행할 수 있다.
  • docker compose logs : docker compose 관련 error log 를 확인할 수 있다.
  • docker compose run <service> --rm bash : 지정한 service 에 대한 container 를 생성해서 bash 를 실행
  • docker compose ps : docker compose up 으로 실행된 container를 보여준다. 추후에 docker compose run 으로 실행된 container는 보이지 않는 듯 하다.

변수 정의 .env

.env file 에 변수를 정의해서 docker-compose.yml 에서 사용할 수 있다. docker-compose.yml 내부에서는 사용할 수 없다.

docker swarm

docker-compose.yml 을 docker swarm 으로 cluster 에 배포할 수 있다.

stack 이름을 mystack1 이라 하면, 아래처럼 하면 된다.

docker stack deploy -c docker-compose.yml mystack1

그러면 자동으로 service 에 해당하는 container 들이 생성되고, network 도 만든다. swarm 안에 만들어진 사항은 docker swarm 명령으로 확인할 수 있다.

docker logging

See Also

  1. 쿠…sal: [컴] Dockerfile 내의 VOLUME command 와 -v 의 차이
  2. How to Simplify Docker Compose Files With YAML Anchors and Extensions – CloudSavvy IT : yaml 의 anchor 사용법, '<<', '&variable_name' 등의 사용법
  3. Docker orchestration with Swarm and Compose - IONOS : docker compose 를 docker swarm network 에 deploy
  4. 쿠…sal: [컴] docker commands
  5. 쿠…sal: [컴] docker compose 에서 container_name 과 hostname 의 차이

Reference

  1. Overview of Docker Compose | Docker Documentation
  2. build, Compose file version 3 reference
  3. Interactive shell using Docker Compose - Stack Overflow

댓글 없음:

댓글 쓰기