Docker入门(1)-对镜像的操作
- Docker系列参考自书籍<Docker技术入门与实战>,本博客以笔记为主. 如果转载请注明出处. -博客园:玲珑骰子安红豆
- 本章目录:
- 1.获取镜像
- 镜像是容器运行的前提.
- 从镜像仓库中拉取或者更新指定镜像
- 语法:
- Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
- OPTIONS:
-a, --all-tags=false | 下载所有tegged的镜像(下载所有标签不同的镜像) |
--help=false | Print usage |
- 如果不显式的指定TAG,则默认会选择latest标签,就是下载镜像库中最新的版本.
- DEMO
- 下面演示的是从Docker Hub的Ubuntu仓库下载一个最新的Ubuntu操作系统的(不指定版本,默认为latest)镜像
- [root@Ninemax-LPC3 ~]# docker pull ubuntu
- latest: Pulling from ubuntu
- 02658b5e0e10: Pull complete
- ...
- Digest: sha256:8e6b67faf44a036a18b9a3987e826fe3accbd1742e219145a461a3210a9d8142
- Status: Downloaded newer image for ubuntu:latest
- 解释:
- 该命令实际上下载的就是ubuntu:latest镜像
- 由于未指定注册服务器,即从默认的注册服务器registry.hub.docker.com中的ubuntu仓库下载镜像,相当于docker pull registry.hub.docker.con/ubuntu:latest
- 下载过程中可以看出,镜像文件一般由若干层组成,行首的02658b5e0e10这样的字符串代表了各层的ID.下载过程中会获取并输出镜像的各层信息.层(layer) 其实是AUFS(Advanced Union File System,一种文件联合系统)中的重要概念,是实现增量保存与更新的基础.
- 还可以通过指定标签(tag)来下载特定版本的一某一个镜像,例如14.04标签的镜像
- [root@Ninemax-LPC3 ~]# sudo docker pull ubuntu:14.04
- 当然了,你也能从第三方服务器下载镜像,例如从DaoCloud社区下载一个镜像.
- [root@Ninemax-LPC3 ~]# docker pull daocloud.io/library/nginx:latest
- 解释:
- 上面的命令就是我们从 daocloud下载一个镜像
- 这段命令(docker pull daocloud.io/library/nginx:latest)可拆分为四部分:
docker pull | 毋庸置疑的docker命令 |
daocloud.io/library/ | 注册服务器地址 |
nginx | 访问的仓库 |
latest | 下载的镜像版本 |
- 2.查看镜像信息
- DOCKER IMAGES
- 使用docker iamges 查看当前本机上已有的镜像
- [root@Ninemax-LPC3 ~]# docker images
- 仓库 标签信息 镜像ID 镜像创建时间 镜像大小
- REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
- ubuntu latest dc8dd8718e57 4 weeks ago 119.2 MB
- ubuntu 14.04 7198809c062f 4 weeks ago 188 MB
- daocloud.io/library/centos latest 4beff0251382 9 weeks ago 192.5 MB
- daocloud.io/library/nginx latest bb8f1ef45c26 10 weeks ago 109.4 MB
- 需要了解:
- 其中镜像的ID( IMAGE ID )信息十分重要,它唯一标识了镜像.
- TAG信息用来标记来自同一个仓库的不同镜像. 例如ubuntu仓库中有多个镜像,通过TAG信息来区分发型版本,包括 10.01,12.04,13.04,14.04等标签
- DOCKER TAG
- 还可以使用docker tag命令为本地镜像添加一个新的标签.例如
- Usage: docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
- [root@Ninemax-LPC3 ~]# docker tag ubuntu:latest ubuntu:aaa
- [root@Ninemax-LPC3 ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
- ubuntu latest dc8dd8718e57 4 weeks ago 119.2 MB
- ubuntu aaa dc8dd8718e57 4 weeks ago 119.2 MB
- 需要了解:
- 上面执行docker tag命令已经对镜像新增了一个TAG是aaa的标签
- 两个镜像的IMAGE ID完全相同,这就代表了这两个其实是指向同一镜像文件的,只是TAG不同
- DOCKER INSPECT
- 使用docker inspect 命令可以获取镜像的详细信息:
- [root@Ninemax-LPC3 ~]# docker inspect dc8dd8718e57
- [{
- "Id": "dc8dd8718e57c6bfb877b74b12b0b74572f9af31bcac6143321817d8318045bc",
- ...........................................................太长了 不粘贴了
- 当然了,你还可以指定显示某一个字段的信息,例如:
- [root@Ninemax-LPC3 ~]# docker inspect -f {{".Architecture"}} dc8dd8718e57
- amd64
- [root@Ninemax-LPC3 ~]# docker inspect -f {{".VirtualSize"}} dc8dd8718e57
- 119165165
- 3.搜寻镜像(DOCKER SEARCH)
- 使用docker search命令可以仓库中共享的镜像,默认搜索Docker Hub官方仓库的镜像
- 语法:
- Usage: docker search [OPTIONS] TERM
- OPTIONS:
--automated=false | 只列出 automated build类型的镜像 |
--help=false | Print usage |
--no-trunc=false | 显示完整的镜像描述 |
-s, --stars=0 | 列出收藏数不小于指定值的镜像 |
- 例如,搜索带mysql关键词的镜像如下所示:
- [root@Ninemax-LPC3 ~]# docker search mysql
- NAME DESCRIPTION STARS OFFICIAL AUTOMATED
- mysql MySQL is a widely used, open-source relati... 4663 [OK]
- 4.删除镜像(DOCKER RMI)
- 使用 docker rmi 命令可以删除本地镜像.
- 语法:
- Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
- OPTIONS:
-f, --force=false | 强制删除镜像(忽略容器正在使用) |
--help=false | Print usage |
--no-prune=false | 不移除该镜像的过程镜像,默认移除 |
- DEMO
- 使用镜像的标签删除镜像(REPOSITORY:TAG)
- [root@Ninemax-LPC3 ~]# docker rmi ubuntu:14.04
- Untagged: ubuntu:14.04
- Deleted: 7198809c062fa2c10dcb93792e4cf76000a8c8a0d5a4588b1f170e9406b7dd4e
- ...省略删除信息
- 用镜像ID删除镜像(IMAGE ID):
- [root@Ninemax-LPC3 ~]# docker rmi bb8f1ef45c26
- 使用区别:
- IMAGE ID:使用ID删除一个镜像时,会删除此镜像的所有标签和文件,
- TAG:使用标签删除镜像时,只有当镜像标签全部删除后,镜像文件才会被删除(推荐使用这种)
- 强制删除镜像:
- 如果有容器正在运行此镜像(无法删除镜像时),可以在rmi命令中追加一个-f进行强制删除!这种强制删除会造成其他的遗留问题.
- 正确的做法是
- 查看本机上的所有容器(命令 docker ps -a)
- 停止此镜像正在运行中的所有容器 (命令:docker stop CONTAINER ID )
- 删除依赖依赖此镜像的容器(命令: docker rm CONTAINER ID )
- 删除此镜像(命令: docker rmi IMAGE ID)
- 5.创建镜像
- 创建镜像的方法有三种:基于已有镜像的容器创建,基于本地模板导入,基于DockerFile创建,这里我只说
- 基于已有镜像的容器创建(DOCKER COMMIT):
- 该方法主要是使用docker commit命令
- 语法:
- 从容器创建一个新的镜像
- Usage: docker commit [OPTIONS] CONTAINER [NEW_REPOSITORY[:TAG]]
- OPTIONS:
-a, --author= | 作者信息 (e.g., "姓名 <邮箱>") |
-c, --change=[] | 使用Dockerfile指令来创建镜像 |
--help=false | Print usage |
-m, --message= | 提交时的说明文字 |
-p, --pause=true | 在commit时,将容器暂停 |
- 实战:
- 下面将掩饰如何使用该命令创建一个新镜像,首先要创建一个容器,并在其中进行修改操作,例如,创建一个test文件,之后退出!
- [root@Ninemax-LPC3 ~]# docker run -ti centos:7.3 /bin/bash
- [root@Ninemax-LPC3 ~]# cd /home
- 创建文件并保存,退出容器(ctrl+D或者 输入exit+火车)
- 记住容器的ID (也可以通过命令:dockers ps -a查看),例如我的ID为: 9f21e71c8ab0
- 下面我们实际运行一下commit命令:
- [root@Ninemax-LPC3 ~]# docker commit -a "linglongtouzianhongdou" -m "new Docker Image" 9f21e71c8ab0 newdocker:1.0
- 5b59c0c6496fe987ecc19eb3b67663cd14b013da8a04df8dfa7e0b8c99a2c550(生成出的镜像ID)
- 我们可以看到, commit后跟的-a 和-m是commit命令的选项 ,之后是我们的CONTAINER ID:9f21e71c8ab0 之后是一个 NAME[:TAG] 仓库名:标签
- 现在我们查看我们刚刚创建的镜像:
- [root@Ninemax-LPC3 ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
- newdocker 1.0 5b59c0c6496f 18 seconds ago 192.5 MB
- centos 7.3 4beff0251382 9 weeks ago 192.5 MB
- 6.存出和载入镜像
- 可以使用docker save和docker load命令来导入镜像和载出镜像
- 存出镜像(DOCKER SAVE):
- 如果要存储镜像到本地文件,可以使用docker save命令
- 语法:
- 保存镜像(载出镜像)
- Usage: docker save [OPTIONS] IMAGE [IMAGE...]
- Usage: docker save IMAGE > file|URL
- OPTIONS:
--help=false | Print usage |
-o, --output= | 输出路径 |
- 实战
- 先查看镜像:
- [root@Ninemax-LPC3 ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
- centos 7.3 4beff0251382 9 weeks ago 192.5 MB
- 存储镜像:
- 这行命令中有个参数 -o 指定路径和文件名称,如果没写路径,会存到当前路径中!
- [root@Ninemax-LPC3 ~]# docker save -o centos_7.3.tar centos:7.3
- or
- [root@Ninemax-LPC3 ~]# docker save centos:7.3 > centos_7.3.tar
- 载入镜像(DOCKER LOAD):
- 可以使用docker load从本地的文件中再导入到本地的镜像仓库,例如从文件 centos_7.3.tar导入到本地镜像列表
- 语法:
- 加载镜像(载入镜像)
- Usage: docker load [OPTIONS]
- Usage: docker load < file|URL
--help=false | Print usage |
-i, --input= | 文件路径 |
- 实战:
- 先查看镜像列表
- [root@Ninemax-LPC3 docker]# docker images
- REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
- 载入镜像:
- [root@Ninemax-LPC3 docker]# docker load -i centos_7.3.tar
- 或
- [root@Ninemax-LPC3 docker]# docker load < centos_7.3.tar
- 7.上传镜像
- 可以使用docker push 命令上传镜像到仓库,默认上传到DockerHub官方仓库(需要登录),命令格式为docker push NAME[:TAG] (push需要用tag命令先打个标签)
- 需要提前在官网注册一下帐户!
- [root@Ninemax-LPC3 docker]# docker tag centos:7.3 user/test:7.3
- [root@Ninemax-LPC3 docker]# docker push user/test:7.3
- The push refers to a repository [user/test] (len: 1)
- 4beff0251382: Image push failed
- 4beff0251382: Buffering to Disk
- Please login prior to push:
- Username:
- Password:
- Email: