写给后端的Docker初级入门教程:实现高效率自动化部署

在上一篇文章面向后端的Docker初级入门教程:DockerFile 命令详解 中,咱们比较详细的讲解了docker镜像构建脚本DockerFile的使用和命令,DockerFile的出现让构建Docker镜像的过程更加直观和高效,可是,和我以前大多数文章中所提到的那句疑问同样。python

难道这些就是所有吗?mysql

固然不是linux

本篇文章是Docker初级入门教程的第五篇,在前四篇,基础篇 概念篇 实战篇 以及DockerFile那篇,咱们从Docker是什么,到使用DockerFile构建本身的镜像,一步一步走来,我相信完整看完这些教程的人已经对Docker有了一个比较好的了解,并能够处理一部分现实中遇到的实际问题,可是仍然还有许多问题有着更好的解决方式,本篇文章呢,我将为你们介绍一个docker自动化部署神器,docker-compose,它可使咱们将传统的那些繁琐的docker操做指令作到自动化完成,并能够控制多个容器,实现多个容器的批量启动。git

不说废话,直接看东西。github

docker-compose解决了什么样的问题?

若是你们以前了解过微服务架构的话,对docker-compose的自动化部署绝对是相见恨晚,这里简单提一下,微服务架构就是将传统的单一服务拆分红多个单一的小服务,从而实现了应用的横向扩展,就拿一个大的电商平台为例,微服务就是将以前一个巨大的单体应用拆分红多个服务,好比仓库系统单独出来做为一个服务,订单系统单独做为一个应用提供服务,这样带来的好处是咱们不须要像传统的方式那样升级整个服务器,而只须要根据特定业务的压力状况升级对应的服务器就好,好比双十一订单系统压力比较大,我单独把订单系统的服务器升级了就好,而不须要升级整套系统的硬件配置。redis

可是因为微服务各个服务间存在必定的依赖关系,好比SpringCloud里面,Eureka做为注册中心,就是要先启动的,要否则后面的服务启动的时候链接不上注册中心,注册不上去可还行,而微服务落地到Docker中,大概就是下面这么个启动过程,运维人员须要依次输入不少命令来确保各个服务按照正确的顺序启动:sql

docker run -d 服务A
docker run -d 服务B,必须在A以后启动
复制代码

要是只有两个服务还好说,若是十个八个咬咬牙也能接受,可是几十个,几百个服务呢?按照顺序启动的话,万一哪一个没整好,换来的就是运维人员的一句我操。简直就是灾难,因而docker-compose应运而生了,docker-compose和DockerFile有着殊途同归之妙,只不过DockerFile是将镜像的构建过程给封装到了脚本里,而docker-compose则是能够将镜像的运行过程封装到了特定的脚本里,这就意味这咱们能够把各个容器的启动顺序整理好,写到脚本里,运维工程师每次只须要运行这个脚本就好了,彻底不用依次执行run 命令启动容器了。docker

为何Docker-Compose被称做大杀器,是由于它真的解决了痛点,知识点呐,朋友们,要考的。shell

docker-compose 安装:

关于docker-compose安装这块,网上仍然有着很是多的教程,可是无一例外三个字,太麻烦,本次依然延续传统,只说最简单的那一种,首先确保电脑上安装了python3 和 docker后端

不用yum?

答:此次先不用,pip安装更好用

为啥不用python2 ? 爱python2用户表示强烈谴责

答:我用pip2装了一下,死活装不上,pip3 一会儿就行了,因此我推荐pip3.

注:不会装python3 的朋友,算了,我也顺便写上去吧。另外,确保你的服务器已经装好了docker。

打开linux终端,输入如下命令:

##安装python3
yum install python3

#pip方式安装docker-compose,pip会自动寻找和你主机上docker版本相匹配的docker-compose版本
pip3 install docker-compose 
复制代码

查看是否安装成功,在终端输入:

docker-compose version
复制代码

若是显示出版本的话,则表明docker-compose在咱们这台机器上已经算是按照成功了。对了,个人版本是1.24.1。

docker-compose 实战:

首先新建一个文件夹,不建也行,防止一会找不到本身把yml文件放哪了,对了,docker-compose的脚本格式是yaml文件格式,不了解的朋友能够下去补补,默认文件名是docker-compose.yml或者docker-compose.yaml

在新建的文件夹里新建一个docker-compose.yml文件,输入如下内容,这里咱们仍然以tomcat为例:

mytomcat:
 image: tomcat
 ports:
 - "8086:8080"
复制代码

而后咱们在当前目录(记得必定要是docker-compose.yml文件所在的目录哦,docker-compose默认是从当前目录搜索的) 输入:

docker-compose up ##根据yml文件启动容器
复制代码

而后,屏幕冒出来一大堆tomcat的日志输出,ctrl+c退出的话整个容器都退出了,这是由于默认的docker-compose up命令是前台启动的,容器内的日志输出都会在前台输出,相似于docker run -it

若是想要容器从后台启动,只须要在后面加一个 -d 就好了,以下:

docker-compose up -d
复制代码

若是启动成功,会显示

[root@iZbp1d7upppth01hp demo]# docker-compose up -d
Starting demo_mytomcat_1 ... done
复制代码

此时再执行docker ps,会发现咱们的tomcat已经正常启动了,名字是demo_mytomcat_1 ,分别对应文件夹,容器名,以及编号,若是再启动一次,新的tomcat容器名字就会变成demo_mytomcat_2

docker-compose构建脚本详解:

既然容器已经运行成功了,那么接下来咱们便深刻了解一下docker-compose.yml 文件应该遵循的格式是如何的。

首先第一层:

  • mytomcat :咱们声明构建的容器的名称,一个yaml文件能够定义多个容器。

而后是:

  • image :咱们构建的镜像来源,这里是tomcat镜像,若是须要指定版本,能够写成tomcat:8 这种格式

    这个时候有人可能要问了,我若是想用我本身定义的镜像怎么办?一样是能够的,只须要写成以下这种格式便可:

    mytomcat:
     bulid: . #若是是 . docker-compose 便会在当前目录找DockerFile 文件,执行构建镜像而后启动,镜像名字是 当前目录_mytomcat
     ports:
     - "8086:8080"
    复制代码
  • ports: 至关于docker run 的 -p 参数,用来映射端口。列出端口的时候能够不带引号,可是像遇到56:56这种状况的时候,YAML会把它解析为60为基数的六十进制数字,因此强烈建议你们在写的时候加上引号。

就这么点?没了?不是,一样咱们能够在yml脚本里面执行诸如设置环境变量,容器卷,连接,命令等操做。

  • environment:至关于docker run 命令的 -e 参数,用来设置环境变量。

  • volumes:至关于docker rum 命令的 -v 参数,用于配置数据卷,用法以下:

    mytomcat:
     image: tomcat
     ports:
     - "8086:8080"
     volumes: 
     - ./data:/data #把当前目录下的data文件夹挂载到容器内的data文件夹中
    复制代码
  • **links:**至关于docker run 命令中的 --link 参数,用来连接两个容器,links支持连接多个容器,用法以下:

    mytomcat:
     image: tomcat
     ports:
     - "8086:8080"
     links:
     -redis #连接到redis容器
     -mysql #连接到mysql容器,若是只须要连接一个容器,删掉一个就好了
     volumes: 
     - ./data:/data #把当前目录下的data文件夹挂载到容器内的data文件夹中
    复制代码
  • command: 使用 command 能够覆盖容器启动后默认执行的命令。

  • container_name: 若是不想使用默认生成的 <项目名称><服务名称><序号> 格式名称,可使用container_name选项来自定义容器名称。

等,固然,docker-compose支持的命令确定不止这几个,可是上面这几个命令无一例外是咱们常常会用的,至于其余的好比日志什么的,我这里就不一一列举了,须要的时候去网上搜索就能够了。

前面有提到过,一个yml脚本是能够同时定义多个容器的,若是须要定义多个容器,直接另起一行写就好了,不过,必定要注意yaml文件自己的缩进格式

mytomcat01:
    image: tomcat
    ports:
       - "8086:8080"
       
mytomcat02:
    image: tomcat
    ports:
       - "8087:8080"
复制代码

固然,这个时候可能有人还有一个疑问,yml文件必需要是docker-compose.yml这个名字吗,我要是想用另一个名字好比 xswl.yml 怎么办,固然是能够的,只须要加上 -f 选项 而后指定 yml文件的路径就能够了。

docker-compose -f xswl.yml up -d
复制代码

docker-compose命令:

到这里,咱们的构建脚本常见的命令已经说的差很少了,固然,包括yml文件,这些都是针对docker 容器来进行操做的,而docker-compose这个软件如docker同样自己也提供了不少的命令供咱们使用:

  • up: 启动全部在compose文件中定义的容器,而且把它们的日志信息聚集到一块儿,一般搭配 -d 使用
  • ps: 获取由Compose管理的容器的状态信息。
  • run: 启动一个容器,并容许一个一次性的命令,被连接的容器会同时启动。
  • bulid: 从新建造由DockerFile所构建的镜像,除非镜像不存在,不然up命令不会执行构建已经存在的镜像的命令,经常在须要更新镜像时使用build这个命令。
  • logs :聚集由Compose管理的容器产生的日志信息,并以彩色输出。
  • stop: 中止容器。
  • rm: 删除已经中止的容器,记得不要忘了加上 -v 来删除任何由Docker管理的数据卷。

若是说我忽然不想用docker-compose这个软件了,能够执行

docker-compose stop #中止docker-compose
复制代码

若是说我又忽然想用了,能够执行:

docker-compose start 或者 docker-compose up #重启相同的容器
复制代码

至于更加细致入微的骚操做,你们能够去docker官网参观学习,那么多命令,我实在是写不完(没时间写,并且有的命令我也没见过)

下面开始技术总结:

本篇文章呢,咱们经过使用docker-compose实现了docker容器的高效自动化部署,同时对相关经常使用命令作了简单的解释,不得不说,docker-compose仍是有点香的,并且以后的教程势必会用到docker-compose会愈来愈多,仍是但愿你们好好看看这篇文章的,由于一个一个启动实在是太慢了,并且因为我用的是学生服务器,全部不少牛X的容器我压根启动不起来,这个也没有办法演示了,下一篇文章呢,我将带你们一步一步使用ELK构建一个日志中心。

最后,很是感谢阅读本篇文章的小伙伴们,可以帮助到大家对于我来讲是一件很是开心的事儿,若是有什么疑问或者批评欢迎留言到本篇文章下方,有时间的话我会一一回复。

韩数的学习笔记目前已经悉数开源至github,必定要点个star啊啊啊啊啊啊啊

万水千山老是情,给个star行不行

韩数的开发笔记

欢迎点赞,关注我,有你好果子吃(滑稽)

相关文章
相关标签/搜索