标签:vol red 形式 title var 复数 图片 查看 版本
本文主要谈谈关于单机 docker 在部署多个依赖的容器的时候如何把敲命令转换成配置文件形式!
docker compose
简单的了解一个概念,容器编排:
指定容器以什么顺序,什么配置,这么运行,就是容器编排。而 docker compose 就是这也一个容器编排工具,适用于单机 docker!
需要知道,docker compose 并未集成到 docker 中,需要手动下载:
找到 Linux 的安装方法安装好即可,其实就是一个命令脚本!
# 下载 curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 修改权限 chmod +x /usr/local/bin/docker-compose # 建立软链接 ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 查看 docker-compose --version
如果 github 下载慢可以使用国内的地址:
http://get.daocloud.io/
下载:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
关于 docker compose 最重要的就是 docker-compose.yml 文件,该文件定义了容器得运行方式。
其主要关键字包含:services,networks,volumes
这里以安装 wordpress 博客为例:
version: "3" # 容器 services: # 数据库容器 wordpress-db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: wordpress volumes: - wordpress-db-data:/var/lib/mysql networks: - wordpress-bridge # web 服务容器 wordpress-web: image: wordpress ports: - 8000:80 environment: WORDPRESS_DB_HOST: wordpress-db WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: 123456 WORDPRESS_DB_NAME: wordpress networks: - wordpress-bridge # 存储卷 volumes: wordpress-db-data: # 网络 networks: wordpress-bridge: driver: bridge
说明:
1. 在旧版本中,version 可能会有 2 这些情况,建议我们的都用 3,兼容性更强,注意需要引号。
2. 注意关键字的单数和复数的使用,如果是复数,说明该值是列表,那么值前面就需要横线 -。
3. 配置中的环境变量都是来源于该镜像的官方文档。
4. 为了项目分开,我们一般都会选择不通的项目创建不同的单独的网络环境用于区分。
5. 顶级的 volumes 和 networks 其实都类似于声明的作用。
当然还有一些其它的关键字,但是一般很少用,可以自己去了解,类似 depends_on 这种。
启动:
docker-compose -f docker-compose.yml up
结果如图:
使用 -f 指定配置文件,up 启动,但是是前台启动,意味着 ctrl + c 就能停止容器,适用于调试阶段。最后加个 -d 参数就可以后台运行。
访问测试:
除此之外,该命令的使用方法其实和 docker 类似,可以通过 help 查看用法:
docker-compose -f docker-compose.yml --help
结果如图:
其中主要的包含:ps(查看定义的所有容器),stop(停止所有定义的容器),start,up,down(停止并删除),当然也可以使用 rm 删除。
docker compose 负载均衡
项目还是以之前的 Flask redis 为例:
配置 docker-compose.yml 如下:
version: "3" # 容器 services: redis-demo: image: redis networks: - flask-bridge flask-demo: build: context: . dockerfile: Dockerfile environment: REDIS_HOST: redis-demo networks: - flask-bridge loadblance-demo: image: dockercloud/haproxy links: - flask-demo ports: - 8000:80 volumes: - /var/run/docker.sock:/var/run/docker.sock networks: - flask-bridge # 网络 networks: flask-bridge: driver: bridge
值得注意的是,我们这里 flask 并未直接指定镜像,而是使用 Dockerfile 构建的镜像。
这里也使用了一个新的容器:haproxy
此时运行容器:
docker-compose -f docker-compose.yml up
启动之后查看生成的镜像:
可以发现名字是拼接形成的,一个是目录的名字,一个是配置中指定名称。
同样的查看新增的网络:
也是如此,都不是我们直接在文件中配置的,都是经过拼接而来。
当然,这并不能满足标题提到的负载均衡,毕竟 flask 默认只运行了一个容器,此时我们停止容器再度重新运行:
docker-compose -f docker-compose.yml up --scale flask-demo=3 -d
通过 up 后面的 --scale 参数指定配置文件中的某个容器运行多少个实例。
查看容器运行情况:
此时访问测试:
再访问:
这也就会发现会在三个容器之间不通的切换,以此来实现了负载均衡。
标签:vol red 形式 title var 复数 图片 查看 版本
原文地址:https://www.cnblogs.com/Dy1an/p/12371406.html