Docker 创建镜像、导出和载入镜像以及上传镜像(三)

Docker 创建镜像、导出和载入镜像以及上传镜像(三)

Scroll Down

Docker 创建镜像、存出和载入镜像以及上传镜像常用操作。

1.创建镜像

创建镜像的方法主要有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。

image.png

1.1 基于已有的容器创建

基于已有的容器创建使用

docker container commit 

       -a,--author=""             #作者信息;
       -c,--change=[]             #提交的时候执行Dockerfile指令,包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUTLD|USER|VOLUME|WORKDIR等;
       -m,--message=""            #提交消息;
       -p,--pause=true            #提交时暂停容器运行。

创建镜像具体的思路是:

  1. 获取一个基础镜像(docker pull)
  2. 根据此基础镜像启动一个docker容器(docker run)
  3. 然后在这个容器中进行定制化(安装、配置服务等)
  4. 执行docker commit命令创建一个镜像
  5. 查看镜像(docker images)

或者登录docker hub,并将该镜像push到docker仓库,成功之后,就可以登录docker页面,查看到刚刚制作的镜像了

案例我们创建一个带有vim的centos镜像 (centos默认是没有vim的)

首先,我门其中一个镜像

docker run -it centos /bin/bash      #首先创建一个容器

然后,安装vim

yum -y install vim

image.png

创建镜像,创建需要再次使用终端登陆系统,因为第一个登陆已经运行docker的centos镜像,无法自己创建镜像,需要再次登陆创建,第一个登陆不能推出!

docker commit 7ab69a vim:centos

docker container commit 7ab69a vim:centos 

上面两个命令都可以!

image.png

1.2 基于Dockerfile 创建

基于Dockerfile创建是最常见的方式。Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。

创建的思路是:

  1. 创建镜像文件夹 (看自己情况)
  2. 创建Dockerfile文件
  3. 编辑Dockerfile文件,将操作步骤写入文件
  4. 使用docker build创建镜像

我们案例是创建安装了vim和netstat。

首先创建文件和文件夹

mkdir -p /tmp/zabbx
cd /tmp/zabbx
touch Dockerfile

image.png

编辑Dockerfile文件

# This is a install vim and netstat!
FROM centos:latest                           # 选择镜像
MAINTAINER Docker zabbx <one@zabbx.com>      # 填写镜像信息
RUN yum -y install vim                       # 安装vim
RUN yum -y install net-tools                 # 安装netstat

Dockerfile 基本的语法是

  • 使用 # 来注释
  • FROM 指令告诉 Docker 使用哪个镜像作为基础
  • MAINTAINER 是维护者的信息
  • RUN 开头的指令会在创建中运行,

image.png

然后,我们运行创建指令

docker build -t="zabbx/centos:v1" .

image.png
image.png
image.png
image.png

在使用docker build 命令中其中 -t 标记来添加 tag,指定新的镜像的用户信息。“.” 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径。

可以看到 build 进程在执行操作。它要做的第一件事情就是上传这个 Dockerfile 内容,因为所有的操作都要依据 Dockerfile 来进行。然后,Dockfile 中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令并提交修改(就跟之前介绍过的 docker commit 一样)。当所有的指令都执行完毕之后,返回了最终的镜像 id。所有的中间步骤所产生的容器都被删除和清理了。

1.3 使用模版导入

用户也可以直接从一个操作系统模板文件导入一个镜像,主要使用docker [container] import命令。命令格式为docker [image]import [opTIoNS]filelURLI-[REPOSTTORY[:TAG]]

要直接导入一个镜像,可以使用OpenVZ提供的模板来创建,或者用其他已导出的镜像模板来创建。OPENVZ模板的下载地址为http://openvz.org/Download/templates/precreated。(https://download.openvz.org/template/precreated/)

例如,下载了ubuntu-18.04的模板压缩包,之后使用以下命令导入即可:

scat ubuntu-18.04-×86_64-minimal.tar.gz I docker import-ubuntu:18.04

然后查看新导入的镜像,已经在本地存在了:

$ docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

ubuntu 18.0405ac7c0b938317 seconds ago 215.5 MB

上面主要推荐第二种方案,第一种次之,不推荐第三种,因为软件版本太旧,看了你也不想用!

2. 导出和载入镜像

我们制作的镜像,如果需要从一台设备移动到另一台主机,就需要将本机中的镜像导出来,然后再载入另一台设备。

这时就需要使用到docker save 和 docker load 命令。

2.1 导出镜像

导出需要使用命令 docker save

docker save [OPTIONS] IMAGE [IMAGE...]

       -o     #输出到的文件。

例如我们将镜像 zabbx/centos:v1 导出

docker save -o zabbx.tar zabbx/centos:v1

image.png

2.2 载入镜像

载入镜像需要使用docker load命令

docker load [OPTIONS]
       
       --input , -i      # 指定导入的文件,代替 STDIN。
       --quiet , -q      # 精简输出信息。

案例我们先删除现有的zabbx/centos:v1镜像,然后在通过上面导出的文件载入zabbx/centos:v1镜像。

docker load --input zabbx.tar

image.png

3. 上传镜像

将镜像从一台设备复制到另一台,还有办法就是,将源镜像上传云端仓库,然后在其他设备再 pull 下来!

不管是官方默认的Docker Hub 还是其他的都需要账号登录。

3.1 上传到官方仓库

上传官方仓库,可以直接使用命令docker push

docker push [OPTIONS] NAME[:TAG]

       --disable-content-trust       #忽略镜像的校验,默认开启

例如上传c镜像

docker push --disable-content-trust zabbx/centos:v1

注意:上传的地址,实际是镜像仓库源。如果修改了那个,默认上传就是那个,可以在/etc/docker/daemon.json 进行修改,在docker info查看镜像源信息。

3.2 上传到阿里云仓库

上传到案例仓库的案例 因为,内容比较长,因此,重新写了一篇,地下是链接!

《Docker 上传镜像到阿里云》