目录
一:Docker 镜像管理
Docker 镜像除了是 Docker 的核心技术之外,也是应用发布的标准格式。一个完整的 Docker 镜像可以支撑一个 Docker 容器的运行,在 Docker 的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务。 如果要把已经安装的服务进行迁移,就需要把环境以及搭建的服务生成新的镜像。本案例将介绍如何创建 Docker 镜像。
1:Docker 镜像结构
镜像不是一个单一的文件,而是有多层构成。可以通过 docker history 命令査看镜像中各层内容及大小,每层对应着Dockerfile 中的一条指令。Docker镜像默认存储在/var/lib/docker/<storage-driver>目录中。容器其实是在镜像的最上面加了一层读写层, 在运行容器里做的任何文件改动,都会写到这个读写层。如果删除了容器,也就删除了其最上面的读写层,文件改动也就丢失了。Docker 使用存储驱动管理镜像每层内容及可读写层的容器层。Docker 镜像是分层的,下面这些知识点非常重要。
- Dockerfile 中的每个指令都会创建一个新的镜像层;
- 镜像层将被缓存和复用;
- 当 Dockerfile 的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效;
- 某一层的镜像缓存失效,它之后的镜像层缓存都会失效;
- 镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件,只是这个文件在 Docker 容器中不可见了。
2:Dockerfile介绍
Dockfile 是一种被 Docker 程序解释的脚本,Dockerfile 由多条的指令组成,每条指令对应Linux 下面的一条命令。Docker 程序将这些 Dockerfile 指令翻译成真正的 Linux 命令。Dockerfile有自己书写格式和支持的命令,Docker 程序解决这些命令间的依赖关系,类似于Makefile。Docker 程序将读取 Dockerfile,根据指令生成定制的镜像。相比镜像这种黑盒子,Dockerfile 这种显而易见的脚本更容易被使用者接受,它明确的表明镜像是怎么产生的。有了 Dockerfile,当有定制额外的需求时,只需在 Dockerfile 上添加或者修改指令,重新生成镜像。
二:Dockerfile 语法基础
Dockerfile 是一个文本文件,其中包含了一系列用于构建 Docker 镜像的指令。通过编写Dockerfile,可以自动化地创建自定义的 Docker 镜像。以下为你详细介绍 Dockerfile 的常用语法:
1:基础指令
(1)FROM
指定基础镜像,所有的 Dockerfile 都必须以 FROM 指令开头,它定义了新镜像基于哪个基础镜像构建。
(2)MAINTAINER(已弃用,推荐使用LABEL)
用于指定镜像的维护者信息。不过在较新的 Docker 版本中,推荐使用 LABEL 指令来替代。
LABEL
为镜像添加元数据,这些元数据可以是任何信息,如作者、版本、描述等,方便对镜像进行管理和识别。
2:环境设置指令
(1)ENV
设置环境变量,这些环境变量会在容器运行时持续存在,并且可以被容器内的应用程序使用。
(2)ARG
定义在构建镜像时可以传递的参数,这些参数只在镜像构建过程中有效
3:文件操作指令
(1)CPOY
将本地文件或目录复制到镜像中。
(2)ADD
与 COPY 类似,也是将文件或目录复制到镜像中,但 ADD 还支持从远程 URL 下载文件和自动解压文件
(3)WORKDIR
设置工作目录,后续的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 等指令都会在这个工作目录下执行。
4:执行命令指令
(1)RUN
在构建镜像的过程中执行命令,常用于安装软件包、配置环境等操作。
(2)CMD
为容器提供默认的执行命令。一个 Dockerfile 中只能有一个 CMD 指令,如果有多个,只有最后一个会生效。当使用 docker run 启动容器时,如果没有指定其他命令,就会执行 CMD 指定的命令。
(3)ENTRYPOINT
配置容器启动时执行的命令,与 CMD类似,但 ENTRYPOINT 的命令不会被 docker run 后面的命令覆盖,而是将 docker run 后面的命令作为参数传递给 ENTRYPOINT 命令。
5:网络和暴露端口指令
(1)EXPOSE
声明容器在运行时会监听的端口,但这只是一个声明,并不会实际进行端口映射。在使用 dockerrun 启动容器时,需要使用-p或-P 选项进行端口映射。
6.容器挂载指令
创建一个可以从本地主机或其他容器的挂载点,用于持久化数据或共享数据。
三:dockerfile案例
1.构建nginx容器
(1)拉取centos7镜像
(2)创建dockerfile工作目录
(3)创建dockerfile
(4)编写启动脚本
(5)用dockerfile创建镜像
(6)启动容器
(7)访问nginx网站
http://192.168.10.101:8080