Docker Compose를 활용해 컨테이너 관리하기
Docker Compose를 사용하는 이유
Docker Compose란?
여러 개의 Docker 컨테이너들을 하나의 서비스로 정의하고 구성해 하나의 묶음으로 관리할 수 있게 도와주는 툴.
Docker Compose를 사용하는 이유
여러 개의 컨테이너를 관리하는 데 용이
복잡한 명령어로 실행시키던 걸 간소화 시킬 수 있음
[실습] Docker Compose 전체 흐름 느껴보기 (Nginx 설치 및 실행)
Docker CLI로 컨테이너를 실행시킬 때
docker run --name webserver -d -p 80:80 nginx
Docker Compose로 컨테이너를 실행시킬 때
compose.yml 파일 작성하기.
services:
my-web-server:
container_name: webserver
image: nginx
ports:
- 80:80
services: my-web-sever
: Docekr Compose에서 하나의 컨테이너를 서비스(service)라고 부른다. 이 옵션은 서비스에 이름을 붙이는 기능이다.
container_name: webserver
컨테이너를 띄울 때 붙이는 별칭이다. CLI에서 --name web-werver
역할과 동일하다.
image: nginx
컨테이너를 실행시킬 때 어떤 이미지를 사용할 지 정의하는 명령어이다. docker run [이미지명]
와 동일한 역할이다.
ports
: 포트 매핑은 어떻게 할 지를 설정하는 옵션이다. CLI에서 -p 80:80
역할과 동일하다.
compose 파일 실행시키기
docker compose up -d
compose 실행 현황 보기
docker compose ps
compose로 실행된 컨테이너 삭제
docker compose down
자주 사용하는 Docker Compose CLI 명령어
compose 파일 작성
services:
websever:
container_name: webserver
image: nginx
ports:
- 80:80
compose.yml에서 정의한 컨테이너 실행
docker compose up # 포그라운드에서 실행
docker compose up -d # 백그라운드에서 실행
-d
: 백그라운드에서 실행
Docker Compose로 실행시킨 컨테이너 확인하기
# compose.yml에 정의된 컨테이너 중 실행 중인 컨테이너만 보여준다.
docker compose ps
# compose.yml에 정의된 모든 컨테이너를 보여준다.
docker compose ps -a
Docker Compose 로그 확인하기
# compose.yml에 정의된 모든 컨테이너의 로그를 모아서 출력한다.
docker compose logs
컨테이너를 실행하기 전에 이미지 재빌드하기
docker compose up --build # 포그라운드에서 실행
docker compose up --build -d # 백그라운드에서 실행
compose.yml
에서 정의한 이미지 파일에서 코드가 변경 됐을 경우, 이미지를 다시 빌드해서 컨테이너를 실행시켜야 코드 변경된 부분이 적용된다. 그러므로 이럴 때에는 --build
옵션을 추가해서 사용해야 한다.
참고: docker compose up
vs docker compose up --build
-- docker compose up
: 이미지가 없을 때만 빌드해서 컨테이너를 실행시킨다. 이미지가 이미 존재하는 경우 이미지를 빌드하지 않고 컨테이너를 실행시킨다.
-- docker compose up --build
: 이미지가 있건 없건 무조건 빌드를 다시해서 컨테이너를 실행시킨다.
이미지 다운받기 / 업데이트하기
docker compose pull
compose.yml
에서 정의된 이미지를 다운 받거나 업데이트 한다.
로컬 환경에 이미지가 없다면 이미지를 다운 받는다.
로컬 환경에 이미 이미지가 있는데, Dockerhub의 이미지와 다른 이미지일 경우 이미지를 업데이트 한다.
Docker Compose에서 이용한 컨테이너 종료하기
docker compose down
[실습] Docker Compose로 Redis 실행시키기
compose.yml
services:
my-cache-server:
image: redis
ports:
- 6379:6379
compose 파일 실행 및 확인
docker compose up -d
docker compose ps
docker logs [컨테이너 ID 또는 컨테이너명]
docker exec -it [컨테이너 ID 또는 컨테이너명] bash
redis-cli
127.0.0.1:6379> set 1 jscode
127.0.0.1:6379> get 1
docker compose down
[실습] Docker Compose로 MySQL 실행시키기
compose.yml
services:
my-db:
image: mysql
environment: # -e MYSQL_ROOT_PASSWORD=password 역할
MYSQL_ROOT_PASSWORD: pwd1234
volumes:# v {호스트 경로}:/var/lib/mysql 역할
- ./mysql_data:/var/lib/mysql
ports:
- 3306:3306
environment: ...
:CLI에서 -e MYSQL_ROOT_PASSWORD=password 역할과 동일하다.
volumes: ...
:CLI에서 -v {호스트 경로}:/var/lib/mysql 역할과 동일하다.
compose 파일 실행 및 확인
docker compose up -d
docker compose ps
docker compose down
[실습] Docker Compose로 백엔드(Spring Boot) 실행시키기
AppController
@RestController
public class AppController {
@GetMapping("/")
public String home() {
return "Hello, World!";
}
}
Dockerfile
FROM openjdk:17-jdk
COPY build/libs/*SNAPSHOT.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
Spring Boot 프로젝트 빌드
./gradlew clean build
compose.yml
services:
my-server:
#compose.yml이 존재하는 디렉토리(.)에 있는 Dockerfile로 이미지를 생성
build: .
ports:
- 8080:8080
build: .
:compose.yml이 존재하는 디렉토리(.)에 있는
Dockerfile로 이미지를 생성해 컨테이너를 띄우겠다는 의미이다.
compose 파일 실행 및 확인
docker compose up -d --build
docker compose ps
docker compose down
[실습] Docker Compose로 백엔드(Nest.js) 실행시키기
Next.js 프로젝트 만들기
# Nest CLI 설치
npm i -g @nestjs/cli
# nest new {프로젝트명}
nest new my-server
Dockerfile
FROM node
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
EXPOSE 3000
ENTRYPOINT [ "node", "dist/main.js" ]
.dockerignore
node_modules
compose.yml
services:
my-server:
build: .
ports:
- 3000:3000
compose 파일 실행 및 확인
docker compose up -d --build
docker compose ps
docker compose down
[실습] Docker Compose로 프론트엔드(Next.js) 실행시키기
Next.js 프로젝트 만들기
npx create-next-app@latest
Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
EXPOSE 3000
ENTRYPOINT [ "npm", "run", "start" ]
.dockerignore
node_modules
compose.yml
services:
my-web-server:
build: .
ports:
- 80:3000
compose 파일 실행 및 확인
docker compose up -d --build
docker compose ps
docker compose down
[실습] Docker Compose로 프론트엔드(HTML, CSS, Nginx) 실행시키기
HTML, CSS 파일 만들기
index.html
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>My Web Page</h1>
</body>
</html>
style.css
* {
color: blue;
}
Dockerfile
FROM nginx
COPY ./ /usr/share/nginx/html
compose.yml
services:
my-web-server:
build: .
ports:
- 80:80
compose 파일 실행 및 확인
docker compose up -d --build
docker compose ps
docker compose down
댓글을 작성해보세요.