특정 컨테이너에만 도커 작성


161

나는이 docker-compose.yml여러 컨테이너를 포함한다. 그중 3 개는 내 앱 (클라이언트, 서버 및 데이터베이스)을위한 것이고 나머지는 다양한 개발 도구 (예 : psql, npm, manage.py 등)를위한 것입니다. 내가 할 때 docker-compose up그들 모두가 시작되었지만 세 가지 주요 시작 만 원합니다. 내가 지정한 링크로 인해 세 개만으로 시작할 수 docker-compose up client있지만 출력은 하나의 컨테이너에서만 발생합니다. 따라서 다음 중 하나를 수행하는 방법이 있습니까?

  1. docker-compose에게 시작하여 어떤 컨테이너를 시작해야하는지 알려주십시오. docker-compose up
  2. 연결된 모든 컨테이너에서 출력을 얻습니다. docker-compose up client

1
문서에 따르면 : docker-compose up [options] [SERVICE...]나열하려는 서비스의 하위 집합을 시작할 수 있습니다.
Jesse Chisholm

답변:


257

다음을 사용하여 컨테이너를 시작할 수 있습니다.

$ docker-compose up -d client

백그라운드에서 컨테이너를 실행하고 출력을 사용할 수 있습니다.

$ docker-compose logs

시작된 모든 컨테이너로 구성됩니다.


11
완전한. stdout에
반영된

Depency 컨테이너가 이미 실행 중이고 다시 시작하지 않으려는 경우 종속 컨테이너를 시작할 수 있습니까?
majTheHero

43

docker-compose 파일에 정의 된 특정 서비스를 시작합니다. 예를 들어 docker-compose.yml이있는 경우

sudo docker-compose start db  

다음과 같은 작성 파일이 제공됩니다.

version: '3.3'

services:
   db:
     image: mysql:5.7
     ports:
       - "3306:3306"
     volumes:
       - ./db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: yourPassword
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: yourPassword

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "80:80"
     volumes:
       - ./l3html:/var/www/html
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: yourPassword
volumes:
    db_data:
    l3html:

때로는 전체 제품군을 시작하기 전에 mySQL 만 시작하고 싶을 때도 있습니다 (때로는 데이터베이스를 채우려는 경우도 있음).


9
sudo전에 docker-compose ...? 필요하지 않습니까?
Jochem Schulenklopper

1
docker 그룹에 사용자가 없으면 예일 것입니다.
delpo

내가 sudo docker-compose up db 대신 사용하면 차이점은 무엇입니까 sudo docker-compose start db
Luk Aron

3
@LukAron- start컨테이너가 이미 존재하고 시작한다고 가정하고 up필요한 경우 이미지를 가져와 필요한 경우 컨테이너를 만든 다음 컨테이너를 시작합니다.
Jesse Chisholm

10

아, 이것만으로 :

$ docker-compose up client server database

4

좋은 해결책 중 하나는 다음과 같이 원하는 서비스 만 실행하는 것입니다.

docker-compose up --build $(<services.txt)

services.txt 파일은 다음과 같습니다.

services1 services2, etc

의존성 (depends_on) 인 경우 관련 서비스를 함께 실행해야합니다.

예를 들어 --build는 선택 사항입니다.


0

docker-composev1.5 부터는 플래그를 사용하여 여러 docker-compose.yml파일-f전달할 수 있습니다 . 이를 통해 개발자 도구를 별도의 도구로 분할 docker-compose.yml한 다음 주문형 만 포함 할 수 있습니다.

# start and attach to all your essential services
docker-compose up

# execute a defined command in docker-compose.dev.yml
docker-compose -f docker-compose.dev.yml run npm update

# if your command depends_on a service you need to include both configs
docker-compose -f docker-compose.yml -f docker-compose.dev.yml run npm update

이에 대한 자세한 내용은 docker / compose # 1896을 참조하십시오 .

훨씬 더 편리하게 ( docker / compose # 7548 ) 이 기능을 추가하기 위해 풀 요청을 만들었지 만 compose 파일 사양을 변경해야하므로 이제 compose-spec / compose-spec # 에서 논의됩니다 . 87 .


-1

당신은 보통 이것을하고 싶지 않습니다. Docker Compose를 사용하면 앱 을 구성 하는 서비스 를 정의 할 수 있습니다. 및 단지 관리 명령입니다. 컨테이너가 필요하지 않습니다. 를 사용하여 데이터베이스 테이블을 작성 해야하는 경우 다음과 같이하면됩니다.npmmanage.pymanage.py

docker-compose run client python manage.py create_db

Heroku가 사용하는 일회성 dynos라고 생각하십시오.

이러한 관리 명령을 별도의 컨테이너로 처리해야하고 Docker Compose를 사용하려면 별도의 .yml파일을 작성하고 다음 명령으로 Docker Compose를 시작할 수 있습니다 .

docker-compose up -f my_custom_docker_compose.yml

15
많은 사람들 이 이것을 원합니다.
kojiro

8
@ msrd0 당신은 보통 이것을하고 싶지 않습니까? 사람들이 스스로 결정하게하십시오!
Kris

1
이유를 설명하지 않고 공감할 수없는 규칙이 SO에 있어야합니다. 이것이 (또는 적어도 첫 번째 부분) 가장 의미가 있기 때문에 가능한 모든 관리 명령에 대한 추가 컨테이너를 갖는 것은 매우 이상합니다.
thclark
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.