docker-compose는 docker-cli와 관련하여 많은 명령을 작성해야합니다.
docker-compose를 사용하면 여러 컨테이너를 동시에 쉽게 시작하고 특정 형태의 네트워킹과 함께 자동으로 연결할 수 있습니다.
docker-compose의 목적은 docker cli로 작동하지만 여러 명령을 훨씬 빨리 발행하는 것입니다.
docker-compose를 사용하려면 이전에 실행중인 명령을 docker-compose.yml
파일 로 인코딩해야 합니다.
당신은 그것들을 yaml 파일에 붙여 넣기 만하는 것이 아니라 특별한 문법이 있습니다.
일단 생성되면, docker-compose cli에 파일을 공급해야하며 파일을 구문 분석하고 지정한 올바른 구성으로 모든 다른 컨테이너를 작성하는 것은 cli에 달려 있습니다.
예를 들어, 하나는 redis-server
두 번째는 node-app
있고 다른 것을 사용하여 만든 컨테이너는 별도의 컨테이너를 갖 습니다.Dockerfile
현재 디렉토리에서를 .
또한 해당 컨테이너를 만든 후 컨테이너에서 로컬 시스템으로 일부 포트를 매핑하여 내부에서 실행중인 모든 항목에 액세스합니다.
따라서 docker-compose.yml
파일의 경우 첫 번째 줄을 다음과 같이 시작하려고합니다.
version: '3'
Docker docker-compose
에게 사용하려는 버전을 알려줍니다 . 그 후에 다음을 추가해야합니다.
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
들여 쓰기가 매우 중요합니다. 또한 하나의 서비스에 대해서는 이미지를 잡고 있지만 다른 서비스에 대해서는docker-compose
대해서는 현재 디렉토리 내부를 살펴보고 두 번째 컨테이너에 사용될 이미지를 빌드하도록 지시하고 있습니다.
그런 다음이 컨테이너에서 열려는 다른 모든 포트를 지정하려고합니다.
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
ports:
-
대시, yaml 파일의 대시는 배열을 지정하는 방법입니다. 이 예제에서는 다음 과 같이 8081
로컬 컴퓨터 8081
에서 컨테이너 로 매핑 합니다 .
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
ports:
- "8081:8081"
따라서 첫 번째 포트는 로컬 시스템이고 다른 포트는 컨테이너의 포트입니다. 혼동을 피하기 위해 두 포트를 구별 할 수도 있습니다.
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
ports:
- "4001:8081"
이와 docker-compose.yml
같은 파일 을 개발 하면 본질적으로 동일한 네트워크에서 이러한 컨테이너를 생성하고 원하는 방식으로 서로 통신하고 원하는만큼 정보를 교환 할 수있는 무료 액세스 권한을 갖게됩니다.
두 컨테이너를 사용하여 만들 때 docker-compose
포트 선언이 필요하지 않습니다.
이제 내 예제에서는 Nodejs 앱에서 다음과 같은 코드 구성을 수행해야합니다.
const express = require('express');
const redis = require('redis');
const app = express();
const client = redis.createClient({
host: 'redis-server'
});
위의 예제를 사용하여 사용자가 수행해야 할 특정 구성이있을 수 있음을 docker-compose.yml
하여 프로젝트와 관련된 파일 해야 할 수도 있습니다.
이제 Nodejs 앱으로 작업하고 redis를 사용하고 있다면 Nodejs가 사용하는 기본 포트를 알고 있으므로 다음을 추가하겠습니다.
const express = require('express');
const redis = require('redis');
const app = express();
const client = redis.createClient({
host: 'redis-server',
port: 6379
});
Docker는 Node 앱이 redis-server
해당 연결을 찾고 실행중인 컨테이너로 리디렉션한다는 것을 알 것입니다.
내내 Dockerfile
유일한 것은 다음과 같습니다.
FROM node:alpine
WORKDIR '/app'
COPY /package.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
따라서 docker run myimage
파일 내부의 모든 컨테이너 또는 서비스 인스턴스를 만들기 위해 실행하기 전에 대신 실행할 수 있으며 docker-compose up
Docker는 현재 작업 디렉토리를 찾고 이미지를 찾기 때문에 이미지를 지정할 필요가 없습니다.docker-compose.yml
거기에 파일.
전에 docker-compose.yml
, 우리는 두 개의 별도의 명령을 처리했다 docker build .
하고 docker run myimage
, 그러나에 docker-compose
세계 당신은 당신이 쓰는 이미지를 재 구축하려는 경우 docker-compose up --build
. Docker에게 컨테이너를 다시 시작하되 다시 빌드하여 최신 변경 사항을 얻도록 지시합니다.
따라서 docker-compose
여러 컨테이너로 작업하기가 더 쉽습니다. 다음에이 컨테이너 그룹을 백그라운드에서 시작해야 할 수 docker-compose up -d
있고 중지 할 수 있습니다 docker-compose down
.