docker-composeDocker 시작하기 - 작성


비고

Compose는 다중 컨테이너 Docker 응용 프로그램을 정의하고 실행하기위한 도구입니다. 작성을 사용하면 작성 파일을 사용하여 응용 프로그램의 서비스를 구성 할 수 있습니다. 그런 다음 단일 명령을 사용하여 구성에서 모든 서비스를 작성하고 시작하십시오. Compose의 모든 기능에 대한 자세한 내용은 기능 목록을 참조하십시오.

작성 사용은 기본적으로 3 단계 프로세스입니다.

  1. Dockerfile 사용하여 앱 환경을 정의하여 어디에서나 재생할 수 있습니다.
  2. docker-compose.yml 에서 앱을 구성하는 서비스를 정의하여 격리 된 환경에서 함께 실행할 수있게하십시오.
  3. 마지막으로 docker-compose up 실행하면 Compose가 전체 앱을 시작하고 실행합니다.

간단한 응용 프로그램 만들기

이 예제는 공식 문서에서 나온 것입니다. redis를 백엔드로 사용하는 파이썬 애플리케이션이 있다고 가정 해보십시오. Dockerfile 을 작성한 후 다음과 같이 docker-compose.yml 파일을 작성하십시오.

version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    depends_on:
     - redis
  redis:
    image: redis
 

그런 다음 docker-compose up 실행하면 전체 응용 프로그램에 python app 및 redis가 포함됩니다.


  • version: '2' 는 도커 작성 파일 구문의 버전 입니다.
  • services: 실행할 서비스를 설명하는 섹션입니다.
  • web:redis: 시작될 서비스의 이름이고, 그 내용 은 도커가 해당 서비스의 컨테이너를 시작하는 방법을 설명합니다.
  • depends_on 은 웹의 redis에 대한 종속성을 의미하므로 docker-compose는 먼저 redis 컨테이너를 시작한 다음 웹 컨테이너를 시작합니다. 그럼에도 불구하고 web 컨테이너를 시작하기 전에 redis 컨테이너가 준비 될 때까지 docker-compose 가 대기하지 않습니다. 이를 위해서는 응용 프로그램 서버의 시작을 지연시키는 스크립트 또는 redis 컨테이너가 요청을 수행 할 수있을 때까지 스크립트를 사용해야합니다.

볼륨 및 네트워크 섹션도 추가 할 수 있습니다. 볼륨 섹션을 사용하면 도커 작성 서비스 섹션과 별도로 살 수있는 연결이 끊어진 볼륨을 사용할 수 있습니다. 네트워크 섹션에서도 비슷한 결과가 나타납니다.

서비스의 redis 섹션은 다음과 같이 조정해야합니다.

redis:
  image: redis
  volumes:
    - redis-data:/code
  networks:
    -back-tier 
 

다음, docker의 하단에 다음 섹션을 추가하여 버전 2 파일을 작성하십시오.

volumes:
  # Named volume
  redis-data: 
    driver: local
networks:
  back-tier:
    driver: bridge
 

redis-data 는 서비스 섹션에서 액세스 가능한 레이블을 제공합니다. driver:local 은 볼륨을 로컬 파일 시스템으로 설정합니다.

back-tier 는 서비스 섹션에서 브릿지로 액세스 할 수 있도록 네트워크 섹션 레이블을 설정합니다.

도커 Compose hello world

아주 기본적인 docker-compose.yml 은 다음과 같습니다 :

version: '2'
services:
  hello_world:
    image: ubuntu
    command: [/bin/echo, 'Hello world']
 

이 파일은 ubuntu:latest 에서 초기화 된 hello_world 서비스를 만들고 있습니다 ubuntu:latest 이미지이며, 실행될 때 echo 'Hello world' 가 실행됩니다.

folder 디렉토리에있는 경우 (그리고이 docker-compose.yml 파일이 포함 된 경우) docker-compose.yml docker-compose up 수행하면

Creating folder_hello_world_1
Attaching to folder_hello_world_1
hello_world_1 | Hello world
folder_hello_world_1 exited with code 0
 

이것은 우분투 이미지에서 컨테이너를 생성하고 docker-compose.yml 에 지정된 명령을 실행했습니다.

Docker-Compose 는 폴더 이름을 프로젝트 이름으로 사용하여 컨테이너와 네트워크를 접두사로 사용합니다. 다른 프로젝트 이름을 설정하려면 docker-compose --project-name NAME {up|down|...} 호출하거나 docker-compose.yml 옆에 .env 라는 파일을 docker-compose.yml 하고 COMPOSE_PROJECT_NAME=name 을 그것. 도커가 이런 종류의 이름으로 이상하게 bahaves를 구성하기 때문에 하이픈 (-)으로 긴 프로젝트 이름을 피하는 것이 좋습니다.

참고 : docker-compose를 사용하면 단일 호스트에서 여러 개의 고정 컨테이너를 실행할 수 있습니다. 둘 이상의 노드에서 여러 컨테이너를 실행하려면 swarm / kubernetes와 같은 솔루션을 참조하십시오.

Docker 설치 Compose

  1. Docker Engine을 설치하십시오 .

Permission denied 오류가 발생하면 아래의 두 명령 앞에 sudo -i 를 실행 한 다음 종료하십시오.

  1. 도커를 당기십시오 /usr/local/bin/docker-compose .
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
 

원하는 버전과 일치하도록 버전 1.7.1 을 변경할 수 있습니다. https://github.com/docker/compose/releases 에서 버전을 사용해보십시오.

  1. 바이너리에 실행 권한을 적용합니다.
chmod +x /usr/local/bin/docker-compose
 
  1. 설치를 테스트하십시오.
docker-compose --version
 

예상되는 도커 - 1.7.1 버전 작성, 0a9ab35 빌드

설치

OS X 또는 Windows에서 Docker를 실행하는 경우 Docker-compose가 Windows 용 Docker 또는 Docker Toolbox 설치에 포함되어야합니다.

Linux의 경우 GitHub 릴리스 페이지에서 바로 최신 바이너리를 다운로드 할 수 있습니다. https://github.com/docker/compose/releases

다음 명령을 사용하여 특정 릴리스를 설치할 수 있습니다.

curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
 

자세한 내용은 설명서 페이지 를 참조 하십시오.

도커가있는 Ruby on Rails

docker for rails app를 사용하고 데이터베이스를 사용하려면 docker 컨테이너의 모든 데이터가 파괴된다는 사실을 알아야합니다 (데이터 보관을 위해 컨테이너를 특별히 구성하지 않은 경우) 때때로, 컨테이너와 함께 도커 컨테이너를 만들어야합니다. 응용 프로그램을 만들고 데이터베이스가있는 이전 컨테이너에 연결합니다.

레일 응용 프로그램의 예로, 간단한 응용 프로그램을 사용했습니다. 다음 명령을 사용하여 만들 수 있습니다.

rails new compose-app --database=postgresql
 

물론 레일, 루비 등을 미리 설치해야합니다.

그런 다음 프로젝트에 Dockerfile을 만들고이 데이터를 Dockerfile로 설정하십시오.

FROM ruby:2.3.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /compose-app
WORKDIR /compose-app
ADD Gemfile /compose-app/Gemfile
ADD Gemfile.lock /compose-app/Gemfile.lock
RUN bundle install
ADD . /compose-app
 

다음 단계 - 데이터와 함께 docker-compose.yml을 만듭니다.

version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -e development -p 80 -b '0.0.0.0'
    volumes:
      - .:/compose-app
    ports:
      - "80:80"
    depends_on:
      - db
 

80 포트 (-p 80)를 다른 포트로 대체 할 수 있습니다.

database.yml config의 개발 섹션을 다음과 같이 변경해야합니다.

development: &default
  adapter: postgresql
  encoding: unicode
  database: postgres
  pool: 5
  username: postgres
  password:
  host: db
 

이제 명령을 사용하여 이미지를 빌드 할 수 있습니다.

docker-compose build
 

(프로젝트 디렉토리에서 이것을 실행하십시오)

그리고 모두에서 시작하십시오 :

docker-compose up
 

모든 것이 올바르게 수행되면 콘솔에서 레일로부터 로그를 볼 수 있습니다.

콘솔을 닫으십시오. 그것은 효과가있을 것입니다.

데이터베이스가없는 레일즈 애플리케이션이있는 컨테이너 만 삭제하려면 프로젝트 디렉토리에서 다음을 실행해야합니다.

docker-compose stop web
docker-compose build web
docker-compose up -d --no-deps web
 

레일 앱이 포함 된 새 컨테이너가 만들어져 실행됩니다.

도커 작성 서비스에서 명령 실행

docker-compose run service-name command

예를 들어 web 서비스에서 rake db:create 를 실행하려면 다음 명령을 사용합니다.

docker-compose run web rake db:create