docker-compose教程
一、docker-compose介绍
Docker Compose是一个用来定义和运行多个复杂应用的Docker编排工具。例如,一个使用Docker容器的微服务项目,通常由多个容器应用组成。那么部署时如何快速启动各个微服务呢,一个个手动启动?假如有上百个微服务呢,显然不现实,那么使用Docker Compose编排工具便可快速启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
二、docker-compose简介及基础概念
docker-compose项目是docker官方的开源项目, 负责实现对docker容器集群的快速编排。
docker-compose将所管理的容器分为三层, 分别是工程(project),服务(service)以及容器(containner)
docker-compose运行目录下的所有文件(docker-compose.yml文件、extends文件或环境变量等)组成一个工程,如无特殊指定,工程名即为当前目录名。
一个工程当中,可以包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。
一个服务中可以包括多个容器实例,docker-compose并没有解决负载均衡的问题。因此需要借助其他工具实现服务发现及负载均衡,比如consul。
docker-compose的工程配置文件默认为docker-compose.yml。可以通过环境变量COMPOSE_FILE -f 参数自定义配置文件,其自定义多个有依赖关系的服务及每个人服务运行的容器。
三、为什么要使用docker-compose
我们知道,一个单独的容器项目,我们很容易可以使用一个Dockerfile模板文件。在工作中,经常会碰到需要多个容器相互配合的微服务项目来完成某项任务的情况,例如要实现一个web项目,除了web服务容器本身,往往还需要再加上后端的数据库服务容器,负载均衡容器等基础服务,还有多个微服务项目需要启动,单独手动启动肯定会相当繁琐,那么docker-compose就应运而生了。
compose允许用户通过一个单独docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project),然后操作这个项目(project)即可对所有容器进行高效操作了。
docker-compose项目由pypthon编写,调用docker服务提供的API来对容器进行管理,因此, 只要所操作的平台支持docker-API,就可以在其上利用conpose来进行编排管理。
简单来说:就是来管理多个容器的,定义启动顺序的,合理编排,方便管理。
四、安装docker-compose
1.安装docker-compose
#下载docker-compose文件
curl -Lhttps://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m`-o /usr/local/bin/docker-compose
#将文件复制到/usr/local/bin环境变量下面
mv docker-compose /usr/local/bin
#给他一个执行权限
chmod +x /usr/local/bin/docker-compose
#查看是否安装成功
docker-compose -version
2.卸载docker-compose
# 卸载docker-compose
rm /usr/local/bin/docker-compose
五、使用docker-compose编排springboot项目
1.创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose
2.编写docker-compose.yml文件
version:"3"services:redis:image: redis:alpine
ports:-"6379"networks:- frontend
deploy:replicas:2update_config:parallelism:2delay: 10s
restart_policy:condition: on-failure
db:image: postgres:9.4volumes:- db-data:/var/lib/postgresql/data
networks:- backend
deploy:placement:constraints:[node.role == manager]vote:image: dockersamples/examplevotingapp_vote:before
ports:-5000:80networks:- frontend
depends_on:- redis
deploy:replicas:2update_config:parallelism:2restart_policy:condition: on-failure
result:image: dockersamples/examplevotingapp_result:before
ports:-5001:80networks:- backend
depends_on:- db
deploy:replicas:1update_config:parallelism:2delay: 10s
restart_policy:condition: on-failure
worker:image: dockersamples/examplevotingapp_worker
networks:- frontend
- backend
deploy:mode: replicated
replicas:1labels:[APP=VOTING]restart_policy:condition: on-failure
delay: 10s
max_attempts:3window: 120s
placement:constraints:[node.role == manager]visualizer:image: dockersamples/visualizer:stable
ports:-"8080:8080"stop_grace_period: 1m30s
volumes:-"/var/run/docker.sock:/var/run/docker.sock"deploy:placement:constraints:[node.role == manager]networks:frontend:backend:volumes:
db-data:
可以看到,在docker-compose.yml文件中我们可以在services目录下定义多个容器服务,当启动我们的docker-compose时,services下的服务会依次启动。
3.启动docker-compose
docker-compose -f docker-compose.yaml up -d //-f调用文件。-d:开启守护进程
六、docker-compose.yml文件配置常用字段及说明
字段说明build指定Dockerfile文件名(要指定的Dockerfile文件需要在build标签的子级标签中用dockefile标签指定)dockerfile构建镜像上下文路径context可以是dockerfile路径,或者时执行git仓库的url地址images指定镜像(已存在)command执行命令,会覆盖容器启动后默认执行的命令(会覆盖dockefile中的CMD指令)container_name指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量。deploy指定部署和运行服务相关配置,只能在swarm模式使用environment添加环境变量networks加入网络,引用顶级networks下条目network-mode设置容器的网络模式ports暴露容器端口,与-p相同,但是端口不能低于60volumes挂载一个宿主机目录或命令卷到容器,命令卷要在顶级volumes定义卷名称volumes_from从另一个服务或容器挂载卷,可选参数:ro和rw(仅版本‘2’支持)hostname在容器内设置内核参数links连接诶到另一个容器,- 服务名称[ : ]privileged用来给容器root权限,注意是不安全的,truerestart重启策略,定义是否重启容器1、no,默认策略,在容器退出时不重启容器2、on-failure,在容器非正常退出时(退出状态非0),才会重启容器3、on-failure:3 在容器非正常退出时,重启容器,最多重启3次4、always,在容器退出时总是重启容器,5、unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。depends_on此标签用于解决容器的依赖,启动先后问题。如启动应用容器,需要先启动数据库容器。php:depends_on:- apache- mysql
七、Docker-compose常用命令
运行这些命令需要结合docker-compose一起使用。
且必须要在含有docker-compose.yml文件的目录中才可以使用,不然报错。
命令说明build重新构建服务ps列出容器up创建和启动容器exec在容器里面执行命令scale指定一个服务容器启动数量top显示正在运行的容器进程logs查看服务容器的输出down删除容器、网络、数据卷和镜像stop/start/restart停止/启动/重启服务
版权归原作者 初夏0811 所有, 如有侵权,请联系我们删除。