Docker Compose를 설치하면 여러 컨테이너의 정의와 실행이 쉽게 가능합니다.
1.Docker Compose를 설치합니다.
# EPEL 에서 설치
[root @ dlp ~] # yum --enablerepo = epel -y install python2-pip
[root @ dlp ~] # pip install docker-compose
2.예를 들어, Apache httpd를 실행하는 컨테이너와 MariaDB를 실행하는 컨테이너를 동시에 실행하는 경우의 설정입니다.
# httpd를 실행하는 컨테이너를 정의
[root @ dlp ~] # vi Dockerfile
FROM centos
MAINTAINER ServerWorld <admin@srv.world>
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80
CMD [ "/ usr / sbin / apachectl", "-D", "FOREGROUND"]
# 응용 프로그램의 구성을 정의
[root @ dlp ~] # vi docker-compose.yml
version : '3'
services :
db :
image : mariadb
volumes :
- / var / lib / docker / disk01 : / var / lib / mysql
environment :
MYSQL_ROOT_PASSWORD : password
MYSQL_USER : centos
MYSQL_PASSWORD : password
MYSQL_DATABASE : centos_db
ports :
- "3306 : 3306 "
web :
build :.
ports :
-"80:80 "
volumes :
- / var / lib / docker / disk02 : / var / www / html
# SELinux 활성화되면 Enforcing 이외로 설정
[root @ dlp ~] # setenforce 0
# 응용 프로그램을 빌드 / 실행
[root @ dlp ~] # docker-compose up -d
Building web
Step 1/6 : FROM centos
Trying to pull repository docker.io/library/centos ...
latest : Pulling from docker.io/library/centos
256b176beaff : Download complete
.....
.....
Creating root_web_1 ...
Creating root_db_1 ...
Creating root_web_1 ... done
Creating root_db_1 ... done
[root @ dlp ~] # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06ece319c627 mariadb "docker-entrypoint ..."20 seconds ago Up 18 seconds 0.0.0.0:3306->3306/tcp root_db_1
1f3796c137f3 root_web "/ usr / sbin / apachec ..."20 seconds ago Up 18 seconds 0.0.0.0:80->80/tcp root_web_1
# 액세스 확인
[root @ dlp ~] # mysql -h 127.0.0.1 -u root -p -e "show variables like 'hostname';"
Enter password :
+ --------------- + -------------- +
| Variable_name | Value |
+ --------- ------ + -------------- +
| hostname | 06ece319c627 |
+ --------------- + ------ -------- +
[root @ dlp ~] # mysql -h 127.0.0.1 -u centos -p -e "show databases;"
Enter password :
+ -------------------- +
| Database |
+ -------------------- +
| centos_db |
| information_schema |
+ -------------------- +
[root @ dlp ~] # echo "Hello Docker Compose World"> /var/lib/docker/disk02/index.html
[root @ dlp ~] # curl localhost
Hello Docker Compose World
3. Docker Compose 기타 기본적인 작업입니다.
# 응용 프로그램을 구성하는 컨테이너의 상태 확인
[root @ dlp ~] # docker-compose ps
Name Command State Ports
---------------------------------------------- ------------------------------
root_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
root_web_1 / usr / sbin / apachectl -D FOR ... Up 0.0.0.0:80->80/tcp
# 응용 프로그램을 구성하는 컨테이너의 로그 확인
[root @ dlp ~] # docker-compose logs
Attaching to root_db_1, root_web_1
web_1 | Passing arguments to httpd using apachectl is no longer supported.
web_1 | You can only start / stop / restart httpd using this script.
.....
.....
db_1 | 2018-08-28 2:35:54 0 [Note] Added new Master_info ''to hash table
db_1 | 2018-08-28 2:35:54 0 [Note] mysqld : ready for connections.
db_1 | Version : '10 .3.9-MariaDB- 1 : 10.3.9 + maria ~ bionic 'socket :'/var/run/mysqld/mysqld.sock 'port : 3306 mariadb.org binary distribution
# 응용 프로그램을 구성 컨테이너에서 명령 실행
# 컨테이너 이름은 [docker-compose.yml에서 지정한 명칭
[root @ dlp ~] # docker-compose exec db / bin / bash
root @ 06ece319c627 : / #
# 응용 프로그램을 종료하고 구성 컨테이너를 모두 정지
[root @ dlp ~] # docker-compose stop
Stopping root_web_1 ... done
Stopping root_db_1 ... done
# 응용 프로그램에 정의 된 서비스를 개별적으로 시작
# 종속성을 설정하는 경우는 의존 컨테이너도 동시에 시작
[root @ dlp ~] # docker-compose up -d web
Stopping root_db_1 ...
Stopping root_web_1 ...
Stopping root_db_1 ... done
Stopping root_web_1 ... done
[root @ dlp ~] # docker-compose ps
Name Command State Ports
---------------------------------------------- ----------------
root_db_1 docker-entrypoint.sh mysqld Exit 0
root_web_1 / usr / sbin / apachectl -D FOR ... Exit 137
# 응용 프로그램에 대한 컨테이너를 모두 삭제
# 실행중인 컨테이너를 삭제하지
[root @ dlp ~] # docker-compose rm
Going to remove root_db_1, root_web_1
Are you sure? [yN] y
Removing root_db_1 ... done
Removing root_web_1 ... done