Docker 创建镜像、存出和载入镜像以及上传镜像常用操作。
1.创建镜像
创建镜像的方法主要有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。
1.1 基于已有的容器创建
基于已有的容器创建使用
docker container commit
-a,--author="" #作者信息;
-c,--change=[] #提交的时候执行Dockerfile指令,包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUTLD|USER|VOLUME|WORKDIR等;
-m,--message="" #提交消息;
-p,--pause=true #提交时暂停容器运行。
创建镜像具体的思路是:
- 获取一个基础镜像(docker pull)
- 根据此基础镜像启动一个docker容器(docker run)
- 然后在这个容器中进行定制化(安装、配置服务等)
- 执行docker commit命令创建一个镜像
- 查看镜像(docker images)
或者登录docker hub,并将该镜像push到docker仓库,成功之后,就可以登录docker页面,查看到刚刚制作的镜像了
案例我们创建一个带有vim的centos镜像 (centos默认是没有vim的)
首先,我门其中一个镜像
docker run -it centos /bin/bash #首先创建一个容器
然后,安装vim
yum -y install vim
创建镜像,创建需要再次使用终端登陆系统,因为第一个登陆已经运行docker的centos镜像,无法自己创建镜像,需要再次登陆创建,第一个登陆不能推出!
docker commit 7ab69a vim:centos
docker container commit 7ab69a vim:centos
上面两个命令都可以!
1.2 基于Dockerfile 创建
基于Dockerfile创建是最常见的方式。Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。
创建的思路是:
- 创建镜像文件夹 (看自己情况)
- 创建Dockerfile文件
- 编辑Dockerfile文件,将操作步骤写入文件
- 使用docker build创建镜像
我们案例是创建安装了vim和netstat。
首先创建文件和文件夹
mkdir -p /tmp/zabbx
cd /tmp/zabbx
touch Dockerfile
编辑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 开头的指令会在创建中运行,
然后,我们运行创建指令
docker build -t="zabbx/centos:v1" .
在使用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
2.2 载入镜像
载入镜像需要使用docker load命令
docker load [OPTIONS]
--input , -i # 指定导入的文件,代替 STDIN。
--quiet , -q # 精简输出信息。
案例我们先删除现有的zabbx/centos:v1镜像,然后在通过上面导出的文件载入zabbx/centos:v1镜像。
docker load --input zabbx.tar
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 上传到阿里云仓库
上传到案例仓库的案例 因为,内容比较长,因此,重新写了一篇,地下是链接!
评论区