1、使用场景
目前微服务技术普遍被很多公司使用,微服务化要求将原本垂直架构的单体应用要拆分成水平架构的一个个模块话的服务,各个服务之间通过消息中间件如MQ进行通信合作,大多数微服务技术都是基于各公司自研的云平台或基于其他大厂提供的云平台,通过云平台可以很方便管理各个应用。
容器化部署可以简化交付的运维压力,并且由于容器化部署可以是的同一个镜像可以在各个平台上运行,简化硬件差异带来的运维部署难度。
2、Docker架构
关于Docker要了解三个基本概念:
1、镜像: image类似于一个linux文件系统,毕竟 “everything is files”。
2、容器: 镜像是静态的,容器时动态的,类似于操作系统中的软件和进程的关系, 容器就是 处于 运行状态的镜像。
3、仓库:获取镜像的服务器,类似于maven仓库。我们可以在docker仓库中获取相应的镜像文件,在本地运行 获取的镜像文件。
3、容器镜像的使用
1、容器使用:
docker pull ** 用于获取镜像文件
docker run ** 启动容器(**为镜像)
docker stop <容器 ID> 停止容器
docker restart <容器 ID> 重启容器
2、镜像使用:
docker images 来列出本地主机上的镜像
docker build 从零开始来创建一个新的镜像,这种方式需要指定 Dockerfile文件,里面的命令用来告诉Docker如何构建镜像。其中 Dockerfile 类似于 makefile,都是内置一些命令用于构建编译。
4. Dockerfile编写
目前团队使用dockerfile构建镜像,通过Dockerfile可以实现一键部署,这样云平台可以通过执行Dockerfile的方式来构建生成镜像文件
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
简单的Dockerfile demo如下:
FROM < image >
MAINTAINER < name >
LABEL < key >=< value > < key >=< value >....…
ENV < key >=< value >
CMD [“executable”,“param1”,“param2”]
CMD [“param1”,“param2”]
CMD command param1 param2
COPY < src >… < dest >
WORKDIR /path/to/workdir
RUN < command >
1、FROM
功能为指定基础镜像,并且必须是第一条指令。
如果不以任何镜像为基础,那么写法为:FROM scratch。
同时意味着接下来所写的指令将作为镜像的第一层开始
2、RUN
功能为运行指定的命令
RUN命令有两种格式
RUN < command >
RUN [“executable”, “param1”, “param2”]
3、CMD
功能为容器启动时要运行的命令
语法有三种写法:
CMD [“executable”,“param1”,“param2”]
CMD [“param1”,“param2”]
CMD command param1 param2
第三种比较好理解了,就是 shell 的执行方式和写法
第一种和第二种都是可执行文件加上参数的形式
RUN & CMD
不要把RUN和CMD搞混了。
RUN是构件容器时就运行的命令以及提交运行结果
CMD是容器启动时执行的命令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子
4、LABEL
功能是为镜像指定标签
5、MAINTAINER
指定作者
6、ENV
功能为设置环境变量
7、ADD
一个复制命令,把文件复制到镜像中。
8、COPY
复制命令
与ADD的区别:
COPY的只能是本地文件,其他用法一致