Docker 镜像制作和发布
Docker 镜像制作
Docker 镜像有两种常用的制作方式:
- 使用 docker commit 方式制作镜像
- 使用 docker build 方式制作镜像
使用 docker commit 方式制作镜像
使用 docker commit 的方式制作镜像,就是我们将一个 docker 容器的状态记录下来,然后生成一个新的 docker 镜像。
docker commit 【容器ID】 【新的镜像名】
使用 docker build 方式制作镜像
这种方式需要我们提前配置好 Dockerfile 文件,在该文件中记录了该镜像应该以哪个镜像为基础,以及需要进行的操作。
Dockerfile 是 docker 中镜像文件的的描述文件,说的直白点就是镜像文件到底是由什么东西一步步构成的。例如我们在淘宝上买了一件商品,但是这个商品需要组装才能使用,于是卖家就给了你一张图纸,你就按照图纸一步一步的组装起来,然后就成了你所需要的样子。那么 Dockerfile 就是这张图纸,镜像文件就是你需要的商品。Dockerfile 名字可以随便命名,但是不建议你这做,还是按照规范来使用,首字母要大写。
Dockerfile 是用来构建 docker 镜像的构建文件,是由一系列命令和参数构成的脚本。构建需要三个步骤:
- 编写 Dockerfile 文件
- docker build
- docker run
一个 Dockerfile文件如下图所示:
Dockerfile 内容基础知识:
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
- # 表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
Docker 执行 Dokcerfile 的大致流程:
- docker 从基础镜像运行一个容器
- 执行一条指令并对容器作出修改
- 执行类似 docker commit 的操作提交一个新的镜像层
- docker 再基于刚提交的镜像运行一个新容器
- 执行 Dockerfile 中的下一条指令直到所有指令都执行完成
下面以制作一个含有 Apache 服务的镜像为例:
- 新建一个目录,作为制作 Docker 镜像的目录:
mkdir -p /docker-build
- 创建 Dockerfile,并写入命令:
touch Dockerfile
vi Dockerfile
FROM docker.io/centos/systemd
MAINTAINER Pzz
RUN yum install -y httpd
ADD httpd.conf /etc/httpd/conf/httpd.conf
ADD index.html /var/www/html/index.html
RUN httpd
CMD echo "OK"
在上述配置中,FROM 指的是从哪个镜像开始进行制作;MAINTAINER 指定了 docker 镜像的制作者;RUN 命令后面跟一个命令,表示要在Docker镜像的制作过程中要执行的命令;ADD 命令指定了从该目录中复制到 docker 镜像中的文件;最后的 CMD 命令在一个 Dockerfile 中只能有一个,表示在镜像制作的最后要执行的命令。
我们需要提前将 Apache 服务的配置文件 httpd.conf 和主页文件 index.html 复制到本地目录下。
最后,我们执行命令,创建 Docker 镜像。
# docker build -t 【父镜像名】:【新镜像tag】 【构建镜像的目录】
docker build -t docker.io/centos/systemd:apache ./
执行完毕后,出现了我们新制作的镜像,如下所示:
我们打开该镜像,发现存在端口映射,如下所示:
我们访问该端口,结果如下:
可以看出,我们的Docker镜像制作成功!
Docker 镜像发布
docker 镜像的导出和导入
我们可以将 docker 镜像导出成 tar 包,然后在其他的设备上,将该tar包导入来使用镜像。
# 导出镜像
docker save <image name> > <存储路径>
# 导入镜像
docker load < <镜像tar包路径>
将 docker 镜像发布到 Dockerhub
首先在 Dockerhub 上注册账号并创建自己的仓库。
在 docker 服务器上登录自己的账号并发布镜像。
docker login -u 【用户名】 -p 【密码】
docker push 【镜像名】