docker-compose 튜토리얼
Docker 시작하기 - 작성
수색…
비고
Compose는 다중 컨테이너 Docker 응용 프로그램을 정의하고 실행하기위한 도구입니다. 작성을 사용하면 작성 파일을 사용하여 응용 프로그램의 서비스를 구성 할 수 있습니다. 그런 다음 단일 명령을 사용하여 구성에서 모든 서비스를 작성하고 시작하십시오. Compose의 모든 기능에 대한 자세한 내용은 기능 목록을 참조하십시오.
작성 사용은 기본적으로 3 단계 프로세스입니다.
-
Dockerfile
사용하여 앱 환경을 정의하여 어디에서나 재생할 수 있습니다. -
docker-compose.yml
에서 앱을 구성하는 서비스를 정의하여 격리 된 환경에서 함께 실행할 수있게하십시오. - 마지막으로
docker-compose up
실행하면 Compose가 전체 앱을 시작하고 실행합니다.
설치
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
간단한 응용 프로그램 만들기
이 예제는 공식 문서에서 나온 것입니다. 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
는 서비스 섹션에서 브릿지로 액세스 할 수 있도록 네트워크 섹션 레이블을 설정합니다.
도커 작성 서비스에서 명령 실행
docker-compose run service-name command
예를 들어 web
서비스에서 rake db:create
를 실행하려면 다음 명령을 사용합니다.
docker-compose run web rake db:create
Docker 설치 Compose
Permission denied
오류가 발생하면 아래의 두 명령 앞에sudo -i
를 실행 한 다음 종료하십시오.
- 도커를 당기십시오
/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 에서 버전을 사용해보십시오.
- 바이너리에 실행 권한을 적용합니다.
chmod +x /usr/local/bin/docker-compose
- 설치를 테스트하십시오.
docker-compose --version
예상되는 도커 - 1.7.1 버전 작성, 0a9ab35 빌드
도커 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와 같은 솔루션을 참조하십시오.
도커가있는 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
레일 앱이 포함 된 새 컨테이너가 만들어져 실행됩니다.