在目前的公司,我们有着6套测试环境和各种生产环境、预发布环境等各种场景。
1、什么是容器
容器镜像是软件的一个轻量的、独立的、可执行的包,包括了执行它所需要的所有内容:代码、运行环境、系统工具、系统库、设置。
容器:APP层的抽象,整合整个软件的运行环境和依赖。多个容器运行在同一台宿主机上,并与其他容器共享这台宿主机的系统内核。
虚拟机:一种将一台服务器转变成多台服务器的物理硬件设备的抽象。Hypervisor使一台物理设备上可以运行多个虚拟机。每个虚拟机都是一个完整操作系统的拷贝,再搭建一层runtime,最后供应程序运行。
2、容器交付方式
容器技术统一了软件环境和软件代码,交付产物中既包括了软件环境、又包括了软件代码。也就是说,容器帮我们重新定义了交付标准。
- 交付结果一致
- 交付自动化
- 交付个性化
- 交付版本控制
3、容器镜像
容器镜像:容器镜像是一个独立的文件系统,它包含了容器运行初始化时所需要的数据或软件。
Docker容器的文件系统是分层的、只读的,每次创建容器时都会在最上层添加一个叫做Container layer的可写层。
1.Dockerfile
Dockerfile: 可以通过文本格式的配置文件描述镜像,这个配置文件里面可以运行功能丰富的指令,可以通过运行docker build将这些指令转换为镜像。
FROM ubuntu
:FROM指令说明我们这个镜像需要继承Ubuntu镜像
RUN apt-get install vim -y
: RUN指令是需要在镜像内运行的命令
FROM ubuntu ##FROM指令说明我们这个镜像需要继承Ubuntu镜像
RUN apt-get install vim -y ##RUN指令是需要在镜像内运行的命令
2.使用Dockerfile更新代码操作步骤
- 1、将代码包下载到构建服务器
- 2、通过Dockerfile的ADD命令将代码包加载到容器里
- 3、Docker build完成新的镜像
3.构建镜像优化
- 1、选择合适的镜像
- 2、减少不必要的镜像层的产生
- 3、充分利用指令的缓存: 每一次run都会产生一个镜像,Docker在默认构建时,会优先选择这些缓存的镜像,而非重新构建一层镜像。
4.镜像构建环境
用容器来构建容器镜像有两种方式: Docker Out Of Docker(DooD) 和 Docker In Docker(DinD)
- DooD
DooD方式构建镜像操作步骤:虚拟机上安装Docker Daemon,然后将你的构建环境镜像下载下来启动一个容器。
注意事项:
1.Docker客户端都是通过 /var/run/docker.sock与Docker Daemon进行通信。
2.在创建Docker实例时,把外部的 /var/run/docker.sock mount到容器内部,这样容器内的Docker客户端就可以与外部的Docker Daemon进行通信。 - DinD
DinD方式就是在容器内部启动一个完整的Docker Daemon进程,然后构建工具只需要和该进程交互,而不影响外部的Docker进程。
主要事项:
1.默认情况下,容器内不允许开启Docker Daemon进程,必须在运行容器时加上 --privileged参数,这个参数的作用是真正取得root的权限。Docker官方提供了一个Docker:dind镜像可以直接拿来使用。
容器镜像结构:
容器和虚拟机的区别: