docker-compose讲解

docker-compose简介

docker-compose项目是Docker官方的开源项目,负责实现对单机容器的快速编排,docker-compose将所管理的容器分为三层,分别是工程(project)、服务(service)以及容器(container)。
 
当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且重复的操作容易出错,这个时候推荐使用docker 单机编排工具docker-compose,docker-compose 是docker容器的一种单机编排服务、是一个可以批量管理多个容器的单机编排工具,另外可以解决容器之间的依赖关系,比如启动一个nginx前端服务的时候会调用后端的tomcat,那就得先启动tomcat,但是启动tomcat容器还需要依赖数据库,那就还得先启动数据库,docker-compose就可以解决这样的嵌套依赖关系,其完全可以替代docker run对容器进行创建、启动和停止。
 
 

docker-compose安装

目前有v1和v2两个版本,v1使用python开发、v2是后出的基于go开发的版本、有些命令与v1不兼容,目前主要是使用的v1版本  :https://github.com/docker/compose

Ubuntu apt: 

apt install docker-compose

centos 7.x yum :

yum install epel-release
yum install docker-compose
 
二进制:
wget https://github.com/docker/compose/releases/download/1.xy.z/docker-compose-Linux-x86_64
cp docker-compose-Linux-x86_64 /usr/bin/docker-compose
chmod a+x /usr/bin/docker-compose
docker-compose version
 

docker-compose命令介绍

命令选项,需要在docker-compose.yml文件目录执行,带#的不常用
#build #构建或重新构建服务、在修改Dockerfile后,可以通过docker-compose build重新构建镜像并重建服务
#bundle #从当前docker compose文件生成一个以当前目录为名称的从Compose文件生成一个分布式应用程序捆绑包(DAB)、已废弃
config -q #验证docker-compose.yml文件,没有错误不输出任何信息

#create #创建服务,但是容器不启动

down #停止并删除资源,默认会删除容器和网络
#events #从容器接收实时事件,可以指定json日志格式,如# docker-compose events --json
#exec #基于service进入指定容器执行命令
# docker-compose ps --services
# docker exec -it nginx-web1 sh
help #显示帮助细信息
images #列出本地镜像  注:docker-compose构建的镜像
 

kill #强制终止运行中的容器 需要通过 --service删除

logs #基于service查看容器的日志   # docker-compose logs --tail="10" -f nginx-server
#pause #暂停服务
# docker-compose ps --service
# docker-compose pause nginx-server
#port #基于service查看容器的端口绑定信息
# docker-compose port --protocol=tcp nginx-server 80
ps #列出容器信息
pull #拉取镜像
#push #上传镜像
#restart #重启服务
rm #删除已经停止的服务
#run #一次性运行容器,等于docker run --rm
scale #设置指定服务运行的容器个数    # docker-compose scale nginx-server=2 #动态伸缩每个service的副本数,不能指定容器名和端口映射
 
start #启动服务   # docker-compose start nginx-server
stop #停止服务   # docker-compose stop nginx-server
top #显示容器运行状态 # docker-compose top
unpause #取消暂定状态中的server # docker-compose unpause nginx-server
up #创建并启动容器,通常配合-d参数在后台运行容器 # docker-compose up -d
version #显示docker-compose版本信息 
 
 
注:使用docker-compose创建容器,在docker-compose.yaml文件如果没有指定网络,都会自己建,地址段不困定。要想使用docker默认网桥需要自己指定

 

 

案例:基于docker-compose实现对nginx+tomcat web服务的单机编排 

version: '3.8'
services:
nginx-server:
image: nginx:1.22.0-alpine
container_name: nginx-web1
# network_mode: bridge #网络1,使用docker安装后的默认网桥
expose:
- 80
- 443
ports:
- "80:80"
- "443:443"
networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有两块网卡
- front
- backend
links:
- tomcat-server

tomcat-server:
image: tomcat:7.0.93-alpine
# image: registry.cn-hangzhou.aliyuncs.com/zhangshijie/tomcat-myapp:v1
container_name: tomcat-app1
##network_mode: bridge #网络1,使用docker安装后的默认网桥
#expose:
# - 8080
#ports:
# - "8080:8080"
networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有一块网卡
- backend
links:
- mysql-server

mysql-server:
image: mysql:5.6.48
container_name: mysql-container
# network_mode: bridge #网络1,使用docker安装后的默认网桥
volumes:
- /data/mysql:/var/lib/mysql
#- /etc/mysql/conf/my.cnf:/etc/my.cnf:ro
environment:
- "MYSQL_ROOT_PASSWORD=12345678"
- "TZ=Asia/Shanghai"
expose:
- 3306
ports:
- "3306:3306"
networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有一块网卡
- backend

networks:
front: #自定义前端服务网络,需要docker-compose创建
driver: bridge
backend: #自定义后端服务的网络,要docker-compose创建
driver: bridge
default: #使用已经存在的docker0默认172.17.0.1/16的网络

 

进入nginx容器编辑 /usr/share/nginx/html/index/heml文件,使用192.168.84.135访问

 

如果需要通过nginx访问Tomcat需要配置nginx

首先进入nginx验证能否连通Tomcat:curl tomcat-server:8080/myapp/index.jsp   # tomcat-server是docker-compose.ymal文件中的 tomcat-server

 

进入/etc/nginx/conf.d/default.conf文件中添加选项

 

重新加载: nginx -s reload

192.168.84.135/myapp/访问

 

 

 
posted @ 2022-11-12 19:56  耿筱诺  阅读(1245)  评论(0编辑  收藏  举报