- 도커 컴포즈란?
- 여러 컨테이너 일괄적으로 정의하고 실행할 수 있는 툴
- 하나의 서비스를 운영하기 위해서는 여러개의 애플리케이션이 동작해야 함.
- 컨테이너화 된 애플리케이션들을 통합 관리할 수 있음.
- 도커 컴포즈 실행 방법
- 도커를 실행할 때 추가한 옵션들을 docker command가 아닌, YAML형태로 만들음 (port, bolumes, name ..)
- docker compose에게 요청하여 도커명령어로 해석하여 docker container 운영
- 도커 컴포즈 명령어
- docker compse ps : 도커 컴포즈를 통해 실행한 컨테이너 실행 상태 확인 및 삭제/제거/로그 확인 가능
- 여러 컨테이너 일괄적으로 정의하고 실행할 수 있는 툴
- 도커 컴포즈로 컨테이너를 실행할 수 있나요?
- 문법에 맞춰 도커 컴포즈가 이해할수있는 YAML파일을 만들어서 전달함.
- 참고 링크 : https://github.com/docker/awesome-compose/tree/master/official-documentation-samples/wordpress/#quickstart-compose-and-wordpress
- 아래 YAML를 docker command 실행문으로 변경
docker run
--name wordpress
-v wp_data:/var/www/html
-p 80:80
--restart=always
-e WORDPRESS_DB_HOST=db
WORDPRESS_DB_USER=wordpress
WORDPRESS_DB_PASSWORD=wordpress
WORDPRESS_DB_NAME=wordpress
wordpress:latest
- 아래 YAML를 docker command 실행문으로 변경
- YAML파일 문법
version compose 버전. 버전에 따라 지원 문법이 다름.
version: "2"services 컴포즈를 이용해서 실행할 컨테이너 옵션을 정의
service:
webserver:
image : nginx
db:
image: redisbuild 컨테이너 빌드
weeapp:
build: .image compose를 통해 실행할 이미지를 지정
weeapp:
image: centos:7command 컨테이너에서 실행될 명령어 지정
app:
image: node:12-alaine
command: sh -c "yarn install && yarn run dev"port 컨테이너가 공개하는 포틀르 나열
webapp:
image: httpd:latest\
port:
- 80
- 8443:443link 다른 컨테이너와 연계할 때 연계할 컨테이너 지정.
webserver:
image:wordpress:latest
link:
db:mysqlexpose 포트를 링크로 연계된 컨테이너에게만 공개할 포트
webapp:
build: .volumes 컨테이너에 볼륨 마운트
webapp:
image: httpd
volumes:
- /var/www/htmlenvironment 컨테이너에 적용할 환경변수를 정의
database:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSROD: passrestart 컨테이너 종료될 때 적용할 restart 정책
- no: 재시작 되지 않음
- always:컨테이너를 수동으로 끄기 전까지 항상 재시작.
- on-failure: 오류가 있을 시에 재시작.
database:
image: mysql:5.7
restart: alwaysdepends_on 컨테이너 간의 종속성을 정의. 정의한 컨테이너가 먼저 동작되어야 한다.
services:
web:
image: wordpress:latest
depends_on:
- db
db:
image: mysql
ㄴ db가 먼저 실행되어야 web이 실행됨을 의미함 - 도커 컴포즈로 동작시키는 웹 서버
1단계 서비스 디렉토리 생성 2단계 docker-compose.yml 생성 3단계 docker-compose 명령어 $ mkdir webserver
$ cd webserver$ cat > docker-compose.yml
version: '3'
services:
web:
image: httpd:latest
ports:
- "80:80"
links:
- mysql:db
command: apachectl -DFOREGROUND
mysql:
image: mysql:latest
command:mysqld
environment:
MYSQL_ROOT_PASSWORD: pass$ docker-compose up -d
$ docker-compose ps
$ docker-compose scale mysql=2
$ docker-compose ps
$ docker-compose down
docker-conpose ps 의 경우,
docker-compose file을 기준으로 실행된 docker container 목록만 확인 가능. - docker-compose 명령어
docker-compose <command>
config yaml파일의 문법 확인 up 컨테이너 생성/시작 ps 컨테이너 목록 표시 logs 컨테이너 로그 출력 run 컨테이너 실행 start 컨테이너 시작 stop 컨테이너 정지 restart 컨테이너 재시작 pause 컨테이너 일시 정지 unpause 컨테이너 재개 port 공개 포트 번호 표시 config 구성 확인 kill 실행 중인 컨테이너 강제 정지 rm 컨테이너 삭제 down 리소스 삭제
- 빌드에서 운영 방법
- 방문 횟수를 카운트하는 python 컨테이너 빌드와 운영
1단계
서비스 디렉토리 생성2단계
빌드를 위한 dockerfile 생성3단계
docker-compose.yml 명령어4단계
docker-compose 명령어$ mkdir composetest
$ cd composetest$ cat > Dockerfile
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add –no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install –requirements.txt
EXPOSE 5000
COPY
CMD [“flask”, “run”]$ cat > docker-compose.yml
version: “3”
services:
web:
build: .
ports:
- “5000:5000”:
redis:
image: “redis:alpine”$ docker-compose up -d
- 방문 횟수를 카운트하는 python 컨테이너 빌드와 운영
'쿠버네티스 > docker' 카테고리의 다른 글
Docker Install on VM (Ubuntu 22.04) (0) | 2024.05.10 |
---|---|
9-2. 빌드에서 운영까지 (0) | 2024.05.10 |
8-2. 컨테이너간 통신(네트워크) (0) | 2024.05.07 |
8-1. 컨테이너간 통신(네트워크) (1) | 2024.05.03 |
7-2.Docker Container Storage (0) | 2024.05.03 |