前言
优点:
- 保存对容器的修改,并再次使用
- 自定义镜像
- 以软件形式打包并分发服务及其运行环境
命令总结:
-
通过容器构建
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-
通过 Dockerfile 文件构建
docker build
通过容器构建
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a
:默认 --author="" ,用来指定镜像的作者,通常填写作者名和联系方式。-m
:用来记录镜像构建的信息,-p
:由于容器构建时,会暂停运行中的容器,该参数可以不暂停正在运行的容器。
示例
# 通过容器构建镜像
$ docker commit -a "yogile" -m "commit test" commit_t yogile/commit_t
sha256:8429b31f250ee3e6ac4f9cef2e209e5e5b0f186bfbe0eb70359886560ccd6e7e
# 查看镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yogile/commit_t latest 8429b31f250e 23 seconds ago 209MB
这时,我们就构建了一个镜像,可以根据这个镜像运行容器了。
使用 Dockerfile 文件构建
这种方法实际上是编写类似于脚本的文件并执行它,再根据命令一步步形成一个想要得到的容器。
创建 Dockerfile 文件
创建存放 Dockerfile 目录
mkdir -p dockerfile/df_test1
创建 Dockerfile 文件
vim dockerfile/df_test1/Dockerfile
这里 Dockerfile 文件的命名必须为 Dockerfile ,否则报错:
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/debiana/dockerfile/df_test1/Dockerfile: no such file or directory
示例
# Dockerfile
# 选择镜像的所需 Repository 仓库
FROM ubuntu:18.04
# 填写维护人员信息
MAINTAINER "Yogile" "Yogile@example.com"
# 执行 apt-get update 命令
RUN apt-get update
# 执行下载安装 nginx 命令
RUN apt-get install nginx -y
# 绑定端口 80
EXPOSE 80
使用 docker build
构建镜像
docker build [OPTIONS] PATH | URL | -
-t
:--tag="" ,指定构建的镜像名字PATH
:指定 Dockerfile 文件的路径
示例
docker build -t ubuntu_yyy dockerfile/df_test1
推送镜像
登录
docker login -u [用户名]
注意:
这里的用户名应为全英文小写,因为注册时就硬性规定为全英文小写。
登陆成功提示:
Login Succeeded
提交镜像
docker push [用户名]/[镜像名]:[TAG]
注意
如果是首次 build
的镜像,则需要重新规定 tag
才能推送到仓库。
如果出现如下错误,就说明你输入的 [用户名]/[镜像名]:[TAG]
不存在,需要检查你输入的信息与生成的镜像是否一致:
An image does not exist locally with the tag: [用户名]/[镜像名]:[TAG]
该问题特别易出现在初学者身上。对于初学者而言,最开始学 Docker 时大部分都没有申请自己的 DockerHub 账户,同时目前流行于网上的大部分教程都忽略的这一点,问题的具体原因也没有的到解决,只是通过
docker tag
来对 TAG进行总体性的修改。
当然这样也没有什么问题,也是对 tag
命令的活用。示例:
docker build -t [用户名]/[镜像名]:[TAG] .
docker tag [原用户名]/[原镜像名]:[原TAG] [现用户名]/[现镜像名]:[现TAG]
docker push yogile/respbian:1.0