Docker-compose
任务编排介绍
场景:
我们在工作中未来完成业务目标,首先把业务拆分成多个子任务,然后对这些子任务进行顺序组合,当子任务按照方案执行完毕后,就完成了业务目标
任务编排,就是对多个子任务执行顺序进行确定的过程
常见的任务编排工具:
单机版:
- docker compose
集群版:
- Docker swarm Docker
- Mesos Apache
- Kubernetes(k8s)Google
docker compose是什么
compose是定义和运行多容器docker应用程序的工具。通过编写,您可以使用YAML文件来配置应用程序服务。然后,然后使用单个命令创建并启动配置中的所用服务。
docker compose在linux下需要自己安装,在windows和ios下都是自带的
docker compose的特点,本质:docker 工具
对象:应用服务
配置:YAML格式配置文件
命令:检点
执行:定义和运行容器
docker compose的配置文件
docker-compose.yml
文件后缀是yml
文件内容遵循ymal格式
docker compose的安装
查看官方文档,这里写的很详细,我就搬下来了
1.下载github上的docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2.将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose
3.升级
如果要从Compose 1.2或更早版本进行升级,请在升级Compose之后删除或迁移现有容器。这是因为从1.3版开始,Compose使用Docker标签来跟踪容器,并且需要重新创建容器以添加标签。
如果Compose检测到创建的没有标签的容器,它将拒绝运行,这样您就不会最终获得两组标签。如果要继续使用现有容器(例如,因为它们具有要保留的数据量),则可以使用Compose 1.5.x通过以下命令迁移它们:
docker-compose migrate-to-labels
另外,如果您不担心保留它们,可以将其删除。撰写只是创建新的。
docker container rm -f -v myapp_web_1 myapp_db_1 ...
4.卸载
如果使用curl以下命令进行安装,则要卸载Docker Compose :
sudo rm /usr/local/bin/docker-compose
如果使用pip以下命令进行安装,则要卸载Docker Compose :
pip uninstall docker-compose
这里我说一下,如果没有过不墙的话,就使用过内的站点进行下载docker-compose
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
检测版本,测试是否安装成功
docker-compose --version
[root@hwf ~]# docker-compose --version
docker-compose version 1.24.0, build 0aa59064
docker-compose常用指令
image
指定镜像名称或者镜像id,如果该镜像在本地不存在,compose会尝试pull下来
示例: java
build
指定Dockerfile文件的路径。可以是一个路径
示例:
build: /.dir
build:
centext: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
command
覆盖容器启动后默认执行的命令
示例:
command:bundle exec thin -p 3000
ports
暴露端口信息,使用宿主机端口:容器端口的格式,或者仅仅指定容器的端口(此时宿主机将会随机指定端口),类似于docker run -p ,
示例:
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
expose
暴露端口,只将端口暴露给连接的服务,而不暴露给宿主机
expose:
- "3000"
- "8000"
volumes
卷挂载路径设置。可以设置宿主机路径或加上访问模式,
示例:
volumes:
#Just specify a path and let the engine create a volume
- /var/lib/mysql
# Specify an absolute path mapping
- /opt/data:/var/lib/mysql
# Path on the host,relative to the compose file
- ./cache:/tmp/cache
# User-relative path
- ~/configs:/etc/configs/:ro
# Named volume
- datavolume:/var/lib/mysql
volumes_from
从另一个服务或者容器挂载卷。可以指定只读或者可读写,如果访问模式没有指定,则默认是可读写。示例:
volumes_from:
- service_name
- service_name:ro
- container:container_name
environment
设置环境变量。可以使用数组或者字典两种方式。只有一个key的环境变量可以运行compose的机器上找到对应有助于加密的或者特殊主机的值。
示例:
environment:
- RACE_ENV:=development
- SHOW:=true
- SESSION_SECRET
env_file
从文件中获取环境变量,可以为单独的文件路径或列表。如果通过docker-compose -f file指定了模板文件,则env_file中路径会基于模板文件路径。如果有变量名称与environment指令冲突,则以environment为准
示例:
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- .opt.secrets.env
extends
继承另一个服务,基于已有的服务进行扩展。
net
设置网络模式:示例
net:“bridge"
net: "host"
net: "none"
net: "container:[service name or container name/id]"
dns
配置dns服务器,可以是一个值,也可以是 一个列表。
是咧:
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
dns_search
配置DNS的搜索域,可以是一个值,也可以是一个列表,示例:
dns_search: example.com
dns_search:
- dc1.example.com
- dc2.example.com
docker-compose模板学习
version: "3.3"
services:
nginx:[起容器名称]
image: nignx:xx[镜像名称,没有默认去仓库拉去]
ports:[和run里的-p是一个意思]
- "80:80"
links:[帮助nginx容器链接到下面的app容器,这里要做nignx的反向代理,默认调用app容器的ID地址]
- app
volumes:
- "./nginx.conf.d/:/etc/nginx/conf.d/"
app:[起容器名称,这个也是应用端]
image: luban/app[镜像名称,没有默认去仓库拉去]
安装好docker-compose,去dockerfile的目录下就可以去编写x.yml文件了,也就是说这个文件放的位置要和你应容器目录是平级的
cd /opt/dockerfile/kk/
这个文件名字是定死的
[root@hwf kk]# vim docker-compose.yml
实验二:使用docker-compose编排微服务
编排微服务
1.在根目录下创建文件夹/app
2.在app目录下新建docker-compose.yml文件和三个文件夹,eureka,user,order
3.在eureka,user,order三个文件夹下分别构建eureka镜像,user镜像,order镜像,以构建eureka服务镜像为例,在eureka文件夹下新建dockerfile文件并且将eureka服务的可运行jar包上传到该目录
启动的话docker-compose up

评论