Docker那些事儿之编排工具docker-compose
前面已经讲解过docker的一些基础使用,镜像创建的操作过程,如果大量容器需要同时部署,一个一个容器进行服务器上的部署,估计要疯掉,在使用上我们需要找到更好更便捷的使用方式,今天要讲解的容器编排工具docker-compose就是其中之一
简介
Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。
docker-compose作为容器编排工具,专门用于处理多容器部署问题,当然,目前对于系统运维有更好的处理方式,比如k8s,由于笔者并不是系统运维人员,所以不会涉及这么深入,本文也只是浅显的介绍下docker-compose,记录下自己的使用过程
特征
单个主机上的多个隔离环境
compose使用项目名称将环境彼此隔离。每次我们使用docker-compose创建多个容器时,其会自动帮我们将彼此环境进行隔离,非常有用
- 在开发主机上,创建单个环境的多个副本,例如当您要为项目的每个功能分支运行稳定副本时
- 在CI服务器上,为了防止构建相互干扰,可以将项目名称设置为唯一的构建号
- 在共享主机或开发主机上,以防止可能使用相同服务名称的不同项目相互干扰
这里可以使用-p
参数来设置此次compose启动的项目名,可以自行安装测试下
仅重新创建已更改的容器
compose会缓存用于创建容器的配置。当重新启动未更改的服务时,compose将重新使用现有容器。重用容器意味着您可以非常快速地更改环境。比如当我们使用compose启动一组容器时,如果我们更新了其中一个容器所使用的镜像,当我们执行更新容器命令时,docker-compose不会更新所有容器,只会更新那个改变了镜像的容器
共享文件和项目配置
compose支持在compose文件中定义变量。您可以使用这些变量为不同环境或不同用户自定义组合,参考官方文档:
https://docs.docker.com/compose/extends/
使用步骤
- 定义您的应用程序环境,Dockerfile以便可以在任何地方进行复制
- 定义构成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行
- Run docker-compose up和Compose启动并运行整个应用程序
安装
首先需要安装docker环境,然后再安装docker-compose,笔者是在centos7环境下安装的
1.安装依赖环境
sudo yum install epel-release
sudo yum install -y python-pip
2.安装docker-compose
sudo pip install docker-compose
使用示例
以我自己的网站为例,目前个人网站部署在阿里云服务器上,以使用docker-compose进行部署,目前环境如下:
- nginx前置机
- solo博客服务
- 数据库mysql
关于博客系统的部分,本人已部署过ghost,wordpress,太复杂感觉不适合我,目前选择了轻量级博客solo,后期有更适合的可能会进行替换
虽然只有一台云服务器,本人还是部署了集群服务,虽然没什么用,只是想多实践下,nginx单节点,solo双节点,mysql单节点,目前个人博客环境就是这样
配置文件
创建docker-compose.yml文件,vim操作修改如下,其中有些地方解释下:
在配置文件中,将需要保存的文件映射到宿主机上,即你自己的服务器真实目录或文件上,方便下次进行迁移或者容器出现无法恢复的问题时重新部署,其中需要注意的是,如果没有进行网络相关配置,且没有将端口与主机进行映射,则其会自行创建网络,使得这组容器可以相互访问,但是外界不能访问,宿主机也不行。这里将nginx容器进行了端口映射,这组容器只能通过这两个端口进行访问
nginx的配置文件中,如果配置了upstream,这里对应的server写solo_1:8080即可,对应配置文件,你可以把这里理解成这组容器中这个域名对应solo_1容器服务,至于nginx的配置文件部分,就不贴出来了,没有太多复杂的部分,自行找资料进行配置
version: '2'
services:
solo_db:
image: mysql:latest
container_name: solo_db
volumes:
- /var/solomysql/data:/var/lib/mysql # 将数据库文件映射到本地服务器便于迁移
restart: always
expose:
- 3306
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_USER: root
MYSQL_PASSWORD: so
MYSQL_DATABASE: so
solo_1:
depends_on:
- solo_db
image: b3log/solo:v3.6.3
container_name: solo_1
volumes: # 日志配置文件和皮肤映射便于我配置修改,添加皮肤
- /root/solodata/log4j.properties:/opt/solo/WEB-INF/classes/log4j.properties
- /root/solodata/skins/:/opt/solo/skins/
links:
- solo_db
expose:
- 8080
restart: always
environment:
RUNTIME_DB: MYSQL
JDBC_USERNAME: so
JDBC_PASSWORD: so
JDBC_DRIVER: com.mysql.jdbc.Driver
JDBC_URL: jdbc:mysql://solo_db:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
command: --listen_port=8080 --server_port=80 --server_scheme=https --server_host=www.gclearning.cn
solo_2:
depends_on:
- solo_db
image: b3log/solo:v3.6.3
container_name: solo_2
volumes:
- /root/solodata/log4j.properties:/opt/solo/WEB-INF/classes/log4j.properties
- /root/solodata/skins/:/opt/solo/skins/
links:
- solo_db
expose:
- 8080
restart: always
environment:
RUNTIME_DB: MYSQL
JDBC_USERNAME: so
JDBC_PASSWORD: so
JDBC_DRIVER: com.mysql.jdbc.Driver
JDBC_URL: jdbc:mysql://solo_db:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
command: --listen_port=8080 --server_port=80 --server_scheme=https --server_host=www.gclearning.cn
solonginx:
image: docker.io/nginx:1.0 # 我自己将官方nginx镜像时区修改了下重新打包的镜像,用官方镜像也可,日志部分时间相差8个时区
container_name: solonginx
links:
- solo_1
- solo_2
ports:
- 80:80
- 443:443
volumes: # nginx配置文件,静态资源,证书等目录映射到宿主机上,可根据需要自行配置
- /root/solonginx/nginxconfig/nginx.conf:/etc/nginx/nginx.conf
- /root/solonginx/nginxconfig/conf.d:/etc/nginx/conf.d
- /root/solonginx/log/:/var/log/nginx/
- /root/solonginx/nginxconfig/cert/:/etc/nginx/cert/
- /root/solonginx/nginxconfig/www/:/var/www/
运行容器组
在你所创建的docker-compose目录下,执行如下命令,即可启动一组容器
docker-compose up -d
docker-compose ps
查看容器状态,处于up状态,则表示容器创建成功,如下:
如果我们修改了nginx配置,只需要对其中的nginx容器进行重启即可,执行如下命令:
docker-compose restart solonginx
总结
docker-compose为我们同时操作一组容器提供了便捷的方式,多个服务之间需要进行编排,端口,网络,硬件配置等在我们定义好了之后可以方便我们进行部署,迁移,如果之后出现了无法恢复的问题,我们可以将落地的数据进行迁移,瞬间启动一组环境来对外提供服务,极大的解放了运维人员的生产力,也不用再为安装一堆依赖环境而头疼,也不用再记录各个服务之间的关系,配置等而忧虑
在学习与使用docker的过程中,越来越感觉到这种技术对运维的重要性(虽然我不是运维),开发人员当然也需要去了解其使用,会让你看到一个更开阔的技术领域
以上内容如有问题欢迎指出,笔者验证后将及时修正,谢谢
Docker那些事儿之编排工具docker-compose的更多相关文章
- Docker系列10—容器编排工具Docker Compose详解
本文收录在容器技术学习系列文章总目录 1.Docker Compose 概述 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用Compose文件来配置 ...
- 使用容器编排工具docker swarm安装clickhouse多机集群
1.首先需要安装docker最新版,docker 目前自带swarm容器编排工具 2.选中一台机器作为master,执行命令sudo docker swarm init [options] 3,再需 ...
- Docker编排工具Docker Compose的使用
一.安装docker compose 官网推荐方式之一: sudo curl -L "https://github.com/docker/compose/releases/download/ ...
- 单机编排之Docker Compose
当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且容器出错,这个时候推荐使用docker 单机编排工具docker compose,Docker Compose 是docker容器的一种 ...
- Docker系列08—搭建使用私有docker registry
本文收录在容器技术学习系列文章总目录 1.了解Docker Registry 1.1 介绍 registry 用于保存docker 镜像,包括镜像的层次结构和元数据. 启动容器时,docker dae ...
- Docker Compose编排工具部署lnmp实践及理论(详细)
目录 一.理论概述 编排 部署 Compose原理 二.使用docker compose 部署lnmp 三.测试 四.总结 一.理论概述 Docker Compose是一个定义及运行多个Docker容 ...
- 走进docker-swarm 带大家快速掌握docker自带编排工具
什么是Docker Swarm? 对比Docker 前面我们介绍过Docker可以理解成是一个我们的服务的独立运行的容器,那么在实际工作中,我们的系统可能是一个微服务应用,系统中根据业务拆分成多个模块 ...
- Docker入门(三)使用Docker Compose
Compose介绍 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排.Compose 是一个用户定义和运行多个容器的 Docker 应用程序.在 ...
- docker--docker compose 编排工具
11 docker compose 编排工具 11.1 docker compose 介绍 根据前面所学的知识可知,想要使用Docker部署应用,就要先在应用中编写Dockerfile 文件来构建镜像 ...
随机推荐
- ROW_NUMBER()函数使用详解
原文地址:https://blog.csdn.net/qq_30908543/article/details/74108348 注:mysql貌似不适用,本人测试未成功,mysql实现方式可参考:ht ...
- JavaScript图形实例:图形的扇形变换和环形变换
1.1 扇形变换 将如图1所示的上边长方形的图形变换为下边的扇形图形的变换称为扇形变换. 设长方形图形中任一点P1(X1,Y1)变换为扇形图形上的点P2(X2,Y2),长方形的长为X,扇形圆心坐标为 ...
- 《C语言程序设计》课程教学目录
<C语言程序设计>课程教学目录 不要去精确定义单个论题,应将一整套问题组织成体系.--黎曼(1826-1866)德国著名数学家 教学过程 2018年秋季学期 C语言程序设计I-第一周教学 ...
- 生命不息,奔跑不止,持之以恒,勇攀高峰——JasonCeng的跑步打卡
生命不息,奔跑不止,持之以恒,勇攀高峰!JasonCeng的跑步打卡博文,持续更新,培养好习惯,一起变成更优秀的自己! 2019-12-20-5.05km Avg-speed(均速): 5'56'' ...
- MacOs 10.14.3 Matlab2018b 解决“找不到已安装的编译器 'Xcode Clang++'。错误使用mex,未找到合适的编译器”问题
这是目前网上state of the art 的解决方案: 最开始用的是matlab2017,结果爆了这么一个问题“找不到已安装的编译器 'Xcode Clang++'.错误使用mex,未找到合适的编 ...
- Python24之递归和迭代
一.递归的含义及一些用途 递归就是函数通过return语句实现自己调用自己的过程,基本上所有的程序语言都有递归算法,常有人说(’一般程序员使用迭代,天才程序员使用递归‘),汉诺塔游戏.谢尔宾斯基三角形 ...
- 剑指offer61:序列化二叉树
1 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存.序列化可以基于先 ...
- MySQL索引工作原理
为什么需要索引(Why is it needed)?当数据保存在磁盘类存储介质上时,它是作为数据块存放.这些数据块是被当作一个整体来访问的,这样可以保证操作的原子性.硬盘数据块存储结构类似于链表,都包 ...
- Python学习路线2019升级版(课程大纲+视频教程+网盘资源下载)
2019最新Python全栈+人工智能学习路线升级版 全面涵盖前端.后端.爬虫.数据挖掘.人工智能等课程(课程大纲+视频教程+网盘资源下载)! 学习路线四大亮点: 1.人工智能三大主流框架全覆盖 2. ...
- 微软商店一直安装不上Intel Media SDK DFP
具体表现为一直安装失败,但是下载进度条一直在,无法去除. 此方法来自 https://answers.microsoft.com/en-us/windows/forum/all/error-code- ...