Docker 入门 7 构建镜像

前言

优点:

  • 保存对容器的修改,并再次使用
  • 自定义镜像
  • 以软件形式打包并分发服务及其运行环境

命令总结:

  • 通过容器构建

    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
posted @ 2020-03-17 22:03  Yogile  阅读(227)  评论(0编辑  收藏  举报