-
[Docker][따배도] 9. 빌드에서 운영까지Docker 2024. 4. 16. 15:04
이 포스팅은 따배도 유투브 시리즈를 기반으로 작성되어있습니다.
Docker Compose
여러 컨테이너를 일괄적으로 정의하고 실행할 수 있는 툴
- 하나의 서비스를 운영하기 위해서는 여러개의 어플리케이션이 동작해야 함
- 컨테이너화 된 애플리케이션들을 통합 관리할 수 있음
YAML 파일을 docker-compose에게 전달하면 작성된대로 실행해 줌
Docker Compose로 컨테이너 실행하기
Docker Compose yaml 문
version compose 버전
버전에 따른 지원 문법이 다름
- version: “2”link 다른 컨테이너와 연계할 때 연계할 컨테이너 지정
webserver:
image: wordpress
link:
db:mysqlservices 컴포즈를 이용해 실행할 컨테이너 옵션을 정의
service:
webserver:
image: nginx
db:
image: redisexpose 포트를 링크로 연계된 컨테이너에게만 공개할 포트
webapp:
expose:
- 3306
- 33060bulid 컨테이너 빌드
webapp:
build: .volumes 컨테이너 볼륨을 마운트
webapp:
image: httpd
volumes:
- /var/www/htmlimage compose를 통해 실행할 이미지를 지정
webapp:
image: centos: 7environment 컨테이너에 적용할 환경변수를 정의
database:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: passcommand 컨테이너에서 실행될 명령어 지정
app:
image: node:12-alpine
command: sh -c “yarn install && yarn run dev”restart 컨테이너가 종료될 때 적용할 restart 정책
no: 재시작 되지 않음
always: 컨테이너를 수동으로 끄기 전까지 항상 재시작
on-failure: 오류가 있을 시에 재시작
database:
image: mysql:5.7
restart: alwaysport 컨테이너가 공개하는 포트를 나열
webapp:
image: httpd:latest
port:
- 80 or - 8443:443depends_on 컨테이너 간의 종속성을 정의
정의한 컨테이너가 먼저 동작되어야 함
services:
web:
image: wordpress:latest
depends_on:
- db
dp:
image: mysqlDocker Compose로 컨테이너 실행
- Docker Compose로 동작시키는 웹서버
1 서비스 디렉토리 생성 2 docker-compose.yml 생성 3 docker-compose 명령어 docker-compose 명령어
docker-compose <command>
up 컨테이너 생성/시작 pause 컨테이너 일시 정지 ps 컨테이너 목록 표시 unpause 컨테이너 재개 logs 컨테이너 로그 출력 port 공개 포트 번호 표시 run 컨테이너 실행 config 구성 확인 start 컨테이너 시작 kill 실행 중인 컨테이너 강제 정지 stop 컨테이너 정지 rm 컨테이너 삭제 restart 컨테이너 재시작 down 리소스 삭제 빌드에서 운영까지
컨테이너 빌드부터 배포까지
1 서비스 디렉토리 생성 2 빌드를 위한 dockerfile 생성 3 docker-compose.yaml 생성 4 docker-compose 명령어 실습
도커 컴포즈 설치하기
docker docs에 OS별 설치 방법을 따라 진행
docker desktop는 docker-compose를 포함하고 있어 설치 생략
컨테이너 빌드에서 운영까지
도커 공식에서 제공하는 예제를 따름
$ mkdir composetest $ cd composetest
app.py
import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times.\\n'.format(count)
requirements.txt
flask redis
Dockerfile
# syntax=docker/dockerfile:1 FROM python:3.10-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 -r requirements.txt EXPOSE 5000 COPY . . CMD ["flask", "run", "--debug"]
docker-compose.yaml
services: web: build: . ports: - "8000:5000" redis: image: "redis:alpine"
$ docker-compose up $ docker images $ docker-compose down $ vi docker-compose.yaml $ docker-compose up -d $ docker-compose watch $ vi app.py $ docker-compose down --volumes
1, 2 파일 생성
이동3 app.py 생성 4 requirements.txt 생성 5 Dockerfile 생성 6 docker-compose.yaml 생성
의도한 대로 동작하는것을 확인7 컨테이너 생성 및 시작
의도한대로 동작함을 확인(방문한 횟수만큼 카운트 업)8 생성된 이미지들 확인 9 리소스 제거 10 docker-compose.yaml 수정 11 백그라운드로 실행
동작확인12 파일에 변경 사항 생길 시 자동으로 반영되도록 watch 켜기 13 app.py 수정
업데이트가 감지됨을 확인
서비스에 반영됨을 확인14 볼륨까지 내리기 MYSQL 데이터베이스를 사용하는 wordpress 운영하기
도커 공식에서 제공하는 예제를 따름
$ mkdir my_wordpress $ cd my_wordpress
docker-compose.yaml
services: db: # We use a mariadb image which supports both amd64 & arm64 architecture image: mariadb:10.6.4-focal # If you really want to use MySQL, uncomment the following line #image: mysql:8.0.27 command: '--default-authentication-plugin=mysql_native_password' volumes: - db_data:/var/lib/mysql restart: always environment: - MYSQL_ROOT_PASSWORD=somewordpress - MYSQL_DATABASE=wordpress - MYSQL_USER=wordpress - MYSQL_PASSWORD=wordpress expose: - 3306 - 33060 wordpress: image: wordpress:latest volumes: - wp_data:/var/www/html ports: - 80:80 restart: always environment: - WORDPRESS_DB_HOST=db - WORDPRESS_DB_USER=wordpress - WORDPRESS_DB_PASSWORD=wordpress - WORDPRESS_DB_NAME=wordpress volumes: db_data: wp_data:
$ docker-compose up -d
1 my_wordpress 폴더 생성 및 이동 2, 3 docker-compose.yaml 작성
컨테이너 생성 및 실행
80포트에서 실행 확인
볼륨 마운트 확인4 실행 종료 및 볼륨 삭제 'Docker' 카테고리의 다른 글
[Docker][따배도] 8. 컨테이너간 통신 (1) 2024.04.12 [Docker][따배도] 7. Docker Container Storage (1) 2024.04.02 [Docker][따배도] 6. 컨테이너 리소스 관리하기 (1) 2024.03.26 [Docker][따배도] 5. 컨테이너 사용하기 (0) 2024.03.19 [Docker][따배도] 4. Docker Registry (0) 2024.03.12