2020-11-4 도커 강의정리 도커컴포즈
도커 컴포즈
- 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구
const express = require('express');
const redis = require('redis');
const PORT = 8080;
// create redis client
const client = redis.createClient({
host: "redis-server",
port: 6379
})
//APP
const app = express();
// 숫자가 0부터 시작
client.set("number", 0);
app.get('/', (req,res) => {
client("number", (err, number) => {
client.set("number", parseInt(number)+1);
res.send("숫자가 1씩 증가. 숫자: " + number);
});
});
app.listen(PORT);
console.log("Server is running")
- redis createClient에서 host부분이 도커환경일때와 도커환경이 아닐때가 다르다.
- 일반환경 : https://redis-server.com
- 도커환경 : “redis-server”
주의사항
- 도커를 사용하지 않는곳에서는 레디스 서버가 작동하는 곳에서 host옵션을 url형식으로 넣는다. 하지만 도커 컴포즈를 사용할때는 host옵션을 docker-compose.yml에 명시한 컨테이너 이름으로 넣으면 된다.
Docker 컨테이너간 통신할때 발생하는 에러
-
레디스 클라이언트가 동작하려면 레디스 컨테이너가 먼저 동작해야한다.
$docker run redis
$docker run node-test
Server is running
events.js:292
throw er; // Unhandled 'error' event
^
Error: Redis connection to redis-server:6379 failed - getaddrinfo ENOTFOUND redis-server
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26)
Emitted 'error' event on RedisClient instance at:
at RedisClient.on_error (/usr/src/app/node_modules/redis/index.js:341:14)
at Socket.<anonymous> (/usr/src/app/node_modules/redis/index.js:222:14)
at Socket.emit (events.js:315:20)
at emitErrorNT (internal/streams/destroy.js:92:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
errno: 'ENOTFOUND',
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'redis-server'
}
- redis-client와 server 연결이 실패했다. 서로 다른 컨테이너에서 설정을 하지 않으면 서로 접근할 수 없다.
- 컨테이너간 네트워크를 쉽게해주기 위해 Docker compose를 사용한다.
docker-compose.yml 작성하기
- YAML : Ain’t Markup language의 약자.
-
version: "3" services: redis-server: image: "redis" node-app: build: . ports: - "5000:8000"
-
version : 도커 컴포즈 버전
-
services : 이곳에 실행하려는 컨테이너들을 정의
-
redis-server, node-app => 컨테이너들의 이름 정의
-
build : 현재 디렉토리에 있는 도커파일 사용(.) 도커파일이 어디에 있는지 정의
-
ports : 포트매핑 => 로컬포트:컨테이너포트
-
docker-compose up 명령어를 입력하면 실행된다. 파일수정 후 다시 실행하려면 docker-compose up –build
-
docker-compose down : 중지명령어
- docker-compose -d up : detached모드로 백그라운드에서 실행
docker-compose up vs docker-compose up –build
- docker-compose up : 이미지가 없을때 이미지를 빌드하고 컨테이너 시작
- docker-compose up –build : 이미지가 있던 없든 이미지를 빌드하고 컨테이너 시작
Written on November 4, 2020