일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 카프카 성능
- firebase
- 자연어처리 #konlpy #형태소분석
- Scouter
- Core/Context
- Slack Limit
- 카프카
- 슬랙
- Slack Rate Limit
- 스카우터
- Rate Limit
- 이미지 푸시
- 알림무시
- FCM
- kafka
- bag of words
- n-gram
- Spark
- 슬랙 파일업로드
- 팀 발달 모델
- Slack File Upload
- 스케일 큐브
- Tuckman
- 머신러닝
- 코어/컨텍스트
- 슬랙 파일업로드 제한
- 파이어베이스
- 웹보안
- Scale Cube
- 해킹
- Today
- Total
플랫폼 개발팀 기술 블로그
Docker : Docker Compose 편 본문
지난 도커파일 편에서 원하는 기능이 담긴 이미지를 손쉽게 만들 수 있는 도커파일의 작성방법과 이미지 생성, 컨테이너 생성 실습을 진행 했었다. 이번 Docker Compose(이하 도커 컴포즈) 편 에서는 도커 컴포즈의 개요와 YAML파일의 작성 및 실습을 진행 해보도록 하겠다.
Docker Compose 개요
웹서버 기능을 하는 어플리케이션이 있다고 가정 해보자 여기에는 DB와 Web Server가 필요하고 이것을 각각의 컨테이너로 나누었다. 제대로 동작 하는지 확인 해보기 위해서는 각 컨테이너들을 실행 시켜야 하는데 docker run 명령어를 이용하여 컨테이너를 생성하려면 두 번의 run 명령어 입력이 필요하다.
컨테이너를 가끔 생성하는 경우라면 괜찮겠지만 컨테이너의 생성빈도가 높고 실행 시켜야하는 컨테이너가 지금보다 더 늘어난다면 상당히 번거로운 작업이 된다. 이런 경우 여러개의 컨테이너를 한번에 실행 시키고 관리 할 수 있다면 효율적일 것이다. 도커 컴포즈는 위와 같이 여러 컨테이너를 한번에 관리 할 때 아주 유용하다. YAML(확장자 *.yml) 파일을 이용하여 어떠한 이미지를 사용하여 어떤 컨테이너를 어떻게 실행 시킬 것인지 기술해주면 도커는 해당 내용대로 컨테이너를 순차적으로 실행 시킨다.
Docker Compose YAML 파일 작성
먼저 한 어플리케이션의 구성요소인 MariaDB, Apache를 일반적으로 컨테이너화 할 경우 보통은 아래와 같이 run 명령어를 사용하여 이미지를 내려받고 컨테이너를 실행 시킬 것이다.
[root@localhost testuser]# docker run \
--name mdb \
-e MYSQL_ROOT_PASSWORD='1234' \
-d mariadb:latest
da6943f279767932259d28dfd6d0f92cb3c90499569c3907a6e08594e58b8b54
[root@localhost testuser]# docker run \
--name web \
-it \
-p 80:80 \
--link mdb:mdb docker_img
* Restarting OpenBSD Secure Shell server sshd
root@2ae7ab2da8df:/#
위 두개의 run 명령어를 YAML 파일로 작성해보자. (※주의 : 탭 인식 못하므로 스페이스 두칸으로 구분)
version: '3'
services:
mdb:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: 1234
web:
build: ./dockerfile
image: apache_df:web
ports:
- "80:80"
links:
- mdb:mdb
version : YAML파일 포멧의 버전을 의미하고 여기서는 3버전을 사용하였다.
services : 생성될 컨테이너의 정보를 담고 있다. services 바로 아래에 서비스명을 기술 할 수 있으며 위에 기술 된 mdb, web이 서비스명이 된다.
image : docker images 명령어를 실행하면 노출되는 repository명이다.
environment : docker run 명령어 옵션 -e와 같으며 위에 기술한 MYSQL_ROOT_PASSWORD와 같이 컨테이너 생성 시 들어갈 환경 변수를 지정 해줄 수 있다.
build : 지정된 경로 내에 존재하는 도커파일을 실행하여 이미지로 만들고 그 이미지로 컨테이너를 생성한다.
ports : docker run 명령어 옵션 -p와 같으며 해당 컨테이너 내에서 오픈 할 포트번호를 지정 할 수 있다.
links : docker run 명령어 옵션 --link와 같으며 연결할 서비스명을 입력하여 해당 서비스로 접근 할 수 있다.
Docker Compose 실행
YAML 파일 작성이 완료 되었으면 도커 컴포즈 파일을 docker-compose.yml이라는 이름으로 저장해준다. 필자는 /home/testuser/docom 경로에 저장하였다. 도커 컴포즈 실행 전 실습을 위해 이전에 만들었던 컨테이너들을 모두 지워주도록 하자.
# docker rm -f $(docker ps -a -q)
2ae7ab2da8df
da6943f27976
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
이어서 도커 컴포즈를 다운로드 받는다.
# sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 617 0 617 0 0 98 0 --:--:-- 0:00:06 --:--:-- 163
100 15.4M 100 15.4M 0 0 754k 0 0:00:20 0:00:20 --:--:-- 1840k
# sudo chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# docker-compose --version
docker-compose version 1.24.0, build 0aa59064
다운로드가 완료 되었으면 위에 작성한 YAML파일을 기반으로 도커 컴포즈를 실행 시켜보자.
Apache2는 미리 기술해둔 dockerfile을 통해 image를 생성하였다. 그리고 해당 이미지를 통해 docom_web_1 이라는 컨테이너를 생성한 것을 확인하였다.
# pwd
/home/testuser/docom
# docker-compose up -d
Creating network "docom_default" with the default driver
Building web
Step 1/6 : FROM ubuntu:14.04
---> 5dbc3f318ea5
Step 2/6 : MAINTAINER pamtrak06 <pamtrak06@gmail.com>
---> Using cache
---> 9c561b8834f8
Step 3/6 : RUN apt-get update && apt-get install -y apache2 apache2-threaded-dev
---> Using cache
---> 09fa1cec80dc
Step 4/6 : RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
---> Using cache
---> ff1eee1b0bdb
Step 5/6 : CMD apachectl -D FOREGROUND
---> Using cache
---> e8563809e2c6
Step 6/6 : EXPOSE 80
---> Using cache
---> d307433464d8
Successfully built d307433464d8
WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating docom_mdb_1 ... done
Creating docom_web_1 ... done
docker ps -a 명령을 통해 컨테이너가 제대로 생성 되었는지 다시 한번 확인 해보고 이번 편을 마치도록 하겠다.
[root@localhost docom]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
044eba02fb3c apache_df:web "apachectl -D FORE..." 11 seconds ago Up 10 seconds 0.0.0.0:80->80/tcp docom_web_1
ede97239d9bc mariadb:latest "docker-entrypoint..." 11 seconds ago Up 11 seconds 3306/tcp docom_mdb_1
컨테이너가 잘 생성되었다.
이번 Docker : Docker Compose 편 에서는 여러개의 컨테이너를 도커 컴포즈를 이용하여 하나로 묶는 개념으로 다소 복잡할 수 있는 분산된 컨테이너를 효과적으로 관리할 수 있도록 YAML파일을 기술하고 실습해보았다. 특히 Dockerfile을 같이 활용하여 사용 할 경우 언제 어느 환경에서도 즉시 컨테이너를 생성하고 관리 할 수 있게 되었다.
Docker : Docker Compose 편
끝.
'Article' 카테고리의 다른 글
Scouter Slack Plugin 알림 설정하기 (2) | 2020.06.03 |
---|---|
Google AMP 개요 편 (0) | 2019.05.30 |
자연어처리 - 데이터 정제 (0) | 2019.03.22 |
REST API 디자인 가이드 적용기 (1) | 2019.03.08 |
자연어처리 - Bag of words, n-gram (0) | 2019.03.08 |