前言
前面《Docker学习—DockerFile》文中介绍了dockerfile相关的语法,及使用方式;接下来了解docker三剑客之一的 Compose;接下来详细学习。
一、docker-compose介绍
Docker-Compose项目是Docker官方的开源项目,主要使用Python编写;用于定义和运行多容器Docker应用程序的工具。使用Compose,可以使用YAML文件来配置应用程序的服务。然后使用一个命令,从配置创建并启动所有服务。
Compose是一个定位“定义和运行多个Docker容器应用的工具”,其前身是Fig,目前使用的Compose仍然兼容Fig格式的模板文件。
Compose中包含两个重要概念:
- 服务(Service):一个应用的容器,实际可以包含若干个运行相同镜像的容器实例
- 项目(Project):一组相关联的应用容器组成的完整业务单元,在docker-compose.yml文件中定义
Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
二、docker-compose安装
Compose目前已经完全支持Linux、Mac OS和Windows,在安装Compose之前,需要先安装Docker;(本篇主要在window中使用)
- Mac安装:Install Docker for Mac
- Windows安装:Install Docker for Windows
- Linux安装:Install Docker for Centos
安装成功后命令行中输入:docker compose -h
三、docker-compose 命令
安装成功后来看下compose主要包含的命令:
build #生成或重建服务
bundle #从Compose文件生成Docker bundle
config #验证并查看撰写文件
create #创建服务
down #停止并删除容器、网络、镜像和卷
events #从容器接收实时事件
exec #在正在运行的容器中执行命令
help #获取命令帮助
images #显示镜像列表
kill #杀死容器
logs #查看容器的输出
pause #暂停服务
port #打印端口绑定的公共端口
ps #显示容器列表
pull #拉取服务镜像
push #推送服务镜像
restart #重新启动服务
rm #移除停止的容器
run #运行一次性命令
scale #设置服务的容器数
start #启动服务
stop #暂停服务
top #显示正在运行的进程
unpause #取消暂停服务
up #创建并启动容器
version #显示Docker-Compose版本信息
对命令有大概印象后,接下来就需要对重点内容(docker-compose.yml)了解;每个命令具体的使用参数在使用是具体介绍
三、docker-compose.yml编写
docker-compose.yml已有多个版本:如下
首先我们先来看一个官方示例docker-compose.yml内容:
version: "3.8" services: redis: image: redis:alpine ports: - "6379" networks: - frontend deploy: replicas: 2 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure db: image: postgres:9.4 volumes: - db-data:/var/lib/postgresql/data networks: - backend deploy: placement: max_replicas_per_node: 1 constraints: - "node.role==manager" vote: image: dockersamples/examplevotingapp_vote:before ports: - "5000:80" networks: - frontend depends_on: - redis deploy: replicas: 2 update_config: parallelism: 2 restart_policy: condition: on-failure result: image: dockersamples/examplevotingapp_result:before ports: - "5001:80" networks: - backend depends_on: - db deploy: replicas: 1 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure worker: image: dockersamples/examplevotingapp_worker networks: - frontend - backend deploy: mode: replicated replicas: 1 labels: [APP=VOTING] restart_policy: condition: on-failure delay: 10s max_attempts: 3 window: 120s placement: constraints: - "node.role==manager" networks: frontend: backend: volumes: db-data:
根据以上示例格式可以看出docker-compose.yml中主要包含以下内容:
- version: 指定当前docker-compose.yml的版本,版本与Docker Engine版本存在对应关系,如:v3.8对应 Docker Engine 19.03.0+
- services:服务,可以定义业务需要的一些服务,每个服务可包含服务名称、使用镜像、挂载数据卷、使用的网络、依赖服务等信息
- networks:应用的网络,可以定义网络名称、使用的网络类型等
- volumes:数据卷,可以定义数据卷,然后挂载到不同的服务下使用
接着就来看下相关命令的语法及具体含义
通过以上内容发现,services中相关命令是docker相关配置项关联;接下来就来验证通过docker-compose.yml运行应用
四、应用案例
实现效果:基于身份认证时,相关示例代码实现,通过docker-compose启动相关所有服务容器,运行程序。
A、在解决方案目录下添加docker-compose.yml文件:
添加方式:
1、手动添加文件
2、通过vs自动添加:选中需要添加项目右键,如图
添加后如下:
B、修改内容如下:(该docker-compose.yml比较简单)
version: '3.4' services: cz.identityserver: image: ${DOCKER_REGISTRY-}czidentityserver build: context: . dockerfile: cz.IdentityServer/Dockerfile cz.api.order: image: ${DOCKER_REGISTRY-}czapiorder build: context: . dockerfile: cz.Api.Order/Dockerfile cz.api.goods: image: ${DOCKER_REGISTRY-}czapigoods build: context: . dockerfile: cz.Api.Goods/Dockerfile cz.mvcclient: image: ${DOCKER_REGISTRY-}czmvcclient build: context: . dockerfile: cz.MVCClient/Dockerfile
C、执行命令docker-compose up命令:执行完成看到以下输出,则编译启动完成。
D、在docker管理页面中查看如下:
后续:
本篇内容先对docker-compose内容进行了相关介绍,下面将对Swarm、Machine、K8S 进行应用学习。
参考:
https://docs.docker.com/compose/
https://docs.docker.com/compose/compose-file/