首页 > 代码库 > Docker入门(1)-对镜像的操作
Docker入门(1)-对镜像的操作
- Docker系列参考自书籍<Docker技术入门与实战>,本博客以笔记为主. 如果转载请注明出处,谢谢各位大哥了.
- 本章目录:
- 1.获取镜像
- 2.查看镜像信息
- 3.搜寻镜像
- 4.删除镜像
- 5.创建镜像
- 6.导出和载入镜像
- 7.上传镜像
- 1.获取镜像
- 镜像是容器运行的前提.
- 可以利用docker的pull命令从网络上下载镜像,命令格式: docker pull NAME[:TAG]. 对于docker镜像来说,如果不显式的指定TAG,则默认会选择latest标签,就是下载镜像库中最新的版本.
- 下面演示的是从Docker Hub的Ubuntu仓库下载一个最新的Ubuntu操作系统的(不指定版本,默认为latest)镜像
- [root@Ninemax-LPC3 ~]# sudo docker pull ubuntu
- latest: Pulling from ubuntu
- 02658b5e0e10: Pull complete
- 5a70b1a02339: Pull complete
- 0f89582aebaa: Pull complete
- ffa5309fe008: Pull complete
- 7510bd34aee9: Pull complete
- dc8dd8718e57: Pull complete
- Digest: sha256:8e6b67faf44a036a18b9a3987e826fe3accbd1742e219145a461a3210a9d8142
- Status: Downloaded newer image for ubuntu:latest
- 该命令实际上下载的就是ubuntu:latest镜像,目前最新的ubuntu镜像.
- 相当于 sudo docker pull registry.hub.docker.con/ubuntu:latest 命令,即是从默认的注册服务器registry.hub.docker.com中的ubuntu仓库下载标记为latest的镜像!
- 下载过程中可以看出,镜像文件一般由若干层组成,行首的02658b5e0e10这样的字符串代表了各层的ID.下载过程中会获取并输出镜像的各层信息.层(layer) 其实是AUFS(Advanced Union File System,一种文件联合系统)中的重要概念,是实现增量保存与更新的基础.
- 还可以通过指定标签来下载特定版本的一某一个镜像,例如14.04标签的镜像
- [root@Ninemax-LPC3 ~]# sudo docker pull ubuntu:14.04
- 14.04: Pulling from ubuntu
- facde2234f2e: Downloading [========================> ] 32.96 MB/67.11 MB
- 80baa2a4c64f: Download complete
- ce3d2a7e37b4: Download complete
- 41b0d9d8b116: Download complete
- 90e1c141b3af: Download complete
- 7198809c062f: Download complete
- facde2234f2e: Pull complete
- 80baa2a4c64f: Pull complete
- ce3d2a7e37b4: Pull complete
- 41b0d9d8b116: Pull complete
- 90e1c141b3af: Pull complete
- 7198809c062f: Pull complete
- Digest: sha256:dd34f9047bdc2f9688e4020f241147ded7ff7b776b1f052b2f2d90f9c852d269
- Status: Downloaded newer image for ubuntu:14.04
- 当然了,你也可以从其他注册服务器的仓库中下载!此时,需要在仓库名称前指定完整的仓库注册服务器地址,例如从DaoCloud社区下载一个镜像.
- [root@Ninemax-LPC3 ~]# docker pull daocloud.io/library/nginx:latest
- latest: Pulling from daocloud.io/library/nginx
- 7444805dc220: Downloading [========> ] 3.82 MB/22.42 MB
- 7444805dc220: Downloading [================> ] 7.414 MB/22.42 MB
- 7444805dc220: Downloading [==================> ] 8.088 MB/22.42 MB
- 7444805dc220: Downloading [===================> ] 8.538 MB/22.42 MB
- 7444805dc220: Pull complete
- 2de46b59641d: Pull complete
- 6f5118869c74: Pull complete
- 476175996aa4: Pull complete
- 275a07ec63cd: Pull complete
- fda55200fa9a: Pull complete
- c9b35ae20342: Pull complete
- 97e1acb823af: Pull complete
- c95c61c2cc3e: Pull complete
- bb8f1ef45c26: Pull complete
- Digest: sha256:8deedf6e64e06d976d4a8697bc3294f3c3e65ccf6367850abcc9de4b94784b87
- Status: Downloaded newer image for daocloud.io/library/nginx:latest
- 上面的命令就是我们从 daocloud下载的 一个 NAME为nginx TAG 为latest的一个镜像!
- 2.查看镜像信息
- 使用docker iamges 查看当前本机上已有的镜像
- [root@Ninemax-LPC3 ~]# sudo 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信息十分重要,它唯一标识了镜像.
- TAG信息用来标记来自同一个仓库的不同镜像. 例如ubuntu仓库中有多个镜像,通过TAG信息来区分发型版本,包括 10.01,12.04,13.04,14.04等标签
- 还可以使用docker tag命令为本地镜像添加一个新的标签.例如
- 命令解释: sudo docker tag 原REPOSITORY:原TAG 新REPOSITORY:新TAG
- [root@Ninemax-LPC3 ~]# sudo docker tag ubuntu:latest ubuntu:aaa
- [root@Ninemax-LPC3 ~]# sudo 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
- 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
- 是不是多了个aaa标签的镜像!
- 仔细观察上图的IMAGE ID,你会发现 新创建的这个镜像与原来的镜像IMAGE ID是相同的!,这就说明了他们实际上纸箱了同一个镜像文件,只是别名不同而已!
- 使用docker inspect 命令可以获取镜像的详细信息:
- [root@Ninemax-LPC3 ~]# docker inspect dc8dd8718e57
- [
- {
- "Id": "dc8dd8718e57c6bfb877b74b12b0b74572f9af31bcac6143321817d8318045bc",
- "Parent": "7510bd34aee9a2406544d4dbdc44bf5d98fe56d1877a8caa027f1617bae19f7d",
- "Comment": "",
- "Created": "2017-06-20T23:19:04.474198922Z",
- "Container": "f577a3d896311472b04e6d74baca8b0bae40b533164150588516c166c6c35068",
- "ContainerConfig": {
- "Hostname": "d4f93cc44884",
- ...........................................................太长了 不粘贴了
- 当然了,你还可以指定显示某一个字段的信息,例如:
- [root@Ninemax-LPC3 ~]# docker inspect -f {{".Architecture"}} dc8dd8718e57
- amd64
- [root@Ninemax-LPC3 ~]# docker inspect -f {{".VirtualSize"}} dc8dd8718e57
- 119165165
- 3.搜寻镜像
- 使用docker search命令可以搜索云端仓库中共享的镜像,默认搜索Docker Hub官方仓库的镜像,用法为 docker search TERM(条件),支持的参数包括:
--automated=false | 仅显示自动创建的镜像. |
--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]
- mariadb MariaDB is a community-developed fork of M... 1441 [OK]
- mysql/mysql-server Optimized MySQL Server Docker images. Crea... 322 [OK]
- percona Percona Server is a fork of the MySQL rela... 279 [OK]
- hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 59
- centurylink/mysql Image containing mysql. Optimized to be li... 52 [OK]
- sameersbn/mysql 45 [OK]
- tutum/mysql Base docker image to run a MySQL database ... 24
- google/mysql MySQL server for Google Compute Engine 18 [OK]
- linuxserver/mysql A Mysql container, brought to you by Linux... 10
- appcontainers/mysql Centos/Debian Based Customizable MySQL Con... 8 [OK]
- openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 ima... 6
- bitnami/mysql Bitnami MySQL Docker Image 6 [OK]
- autopilotpattern/mysql Implementation of the Autopilot Pattern fo... 4
- frodenas/mysql A Docker Image for MySQL 3 [OK]
- mysql/mysql-cluster Experimental MySQL Cluster Docker images. ... 2
- kuberdock/mysql This is a fork of official MySQL image wit... 1 [OK]
- circleci/mysql MySQL is a widely used, open-source relati... 1
- cloudposse/mysql Improved `mysql` service with support for ... 0 [OK]
- astronomerio/mysql-sink MySQL sink 0 [OK]
- starkandwayne/mysql 0
- tenstartups/mysql 0 [OK]
- kardasz/mysql Debian 8, MySQL 5.7 0 [OK]
- vukor/mysql Build for MySQL. Project available on http... 0 [OK]
- jenkler/mysql Docker Mysql package 0
- 4.删除镜像
- 使用镜像的标签删除镜像
- 命令:docker rmi [IMAGE...] 其中IMAGE可以为标签/ID
- 用镜像标签删除镜像:
- 格式:docekr rmi REPOSITORY:TAG
- 实际:
- [root@Ninemax-LPC3 ~]# docker rmi ubuntu:14.04
- Untagged: ubuntu:14.04
- Deleted: 7198809c062fa2c10dcb93792e4cf76000a8c8a0d5a4588b1f170e9406b7dd4e
- Deleted: 90e1c141b3af1a7317c06aaf7fffbf6096b4084401be03deec3e89b3acbb7b12
- Deleted: 41b0d9d8b11695d42007b63c9e1967f0c94b5712104b645316cf0e8e7ac47b88
- Deleted: ce3d2a7e37b4c4d73df7404accd64fbad06daa26c1b72659589f1e101b422635
- Deleted: 80baa2a4c64f981d1d10b84e1b729285d86554d36afa1d765b9f1dda3c2e1a94
- Deleted: facde2234f2e1f7709831fd8d746e78ff606aef0c58d49f81604009b53e68bbf
- 用镜像ID删除镜像:
- 格式: docker rmi IMAGE ID
- 实际:
- [root@Ninemax-LPC3 ~]# docker rmi bb8f1ef45c26
- Untagged: daocloud.io/library/nginx:latest
- Deleted: bb8f1ef45c26e81579a105f6602c90c191782d12ff21e5a9cd1bb7425d8ea6a9
- Deleted: c95c61c2cc3e06bb41658cad4282702c668c5d3c16e367b9dc7e43aef8808b9c
- Deleted: 97e1acb823af00f5ac295fe193414b309a332d271ab71d9a096ca1e1f5edf40f
- Deleted: c9b35ae203426c5120bcaee87333376b278f7c0befbd0d3e64b813a95c8e38cc
- Deleted: fda55200fa9a040c6b0703caa5d1eee25156af999b43280eae9f95a19c7bb091
- Deleted: 275a07ec63cd37082c28a82267c262f4e27448a3cc52a1e4661c4bb166c5f7f0
- Deleted: 476175996aa442f9afdea1321f20bda44d8dfea863d0e9ab372d35a03ee36fd1
- Deleted: 6f5118869c746fcacba464bc734757de16794f862b492b750079e40a86d2eeea
- Deleted: 2de46b59641d6e0862d416e6896d2ce20f3cba8637a7f4f579fa760dd3620e0d
- Deleted: 7444805dc220d49e5eecd3a59417d3fc8ed748c6ce8f6e1eafec175d6171036a
- 区别:
- 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 [OPTIONS]CONTAINER [REPOSITORY[:TAG]],主要选项包括:
- -a,--author="" 作者信息
- -m,--message="" 提交信息
- -p,--pause=true 提交时暂停容器运行.
- 下面将掩饰如何使用该命令创建一个新镜像,首先要启动一个镜像,并在其中进行修改操作,例如,创建一个test文件,之后退出!
- [root@Ninemax-LPC3 ~]# docker run -ti centos:7.3 /bin/bash
- [root@Ninemax-LPC3 ~]# cd /home
- [root@Ninemax-LPC3 ~]# 创建文件保存,退出容器(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
- 我们可以看到, 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命令
- 先查看镜像:
- [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
- [root@Ninemax-LPC3 ~]# pwd
- /root
- [root@Ninemax-LPC3 ~]# ll
- 总用量 195620
- -rwxrwxrwx. 1 root root 2086 12月 4 2014 anaconda-ks.cfg
- -rw-r--r--. 1 root root 200197120 7月 21 01:18 centos_7.3.tar
- -rwxrwxrwx. 1 root root 42417 12月 4 2014 install.log
- -rwxrwxrwx. 1 root root 10033 12月 4 2014 install.log.syslog
- 载入镜像:
- 可以使用docker load从本地的文件中再导入到本地的镜像仓库,例如从文件 centos_7.3.tar导入到本地镜像列表
- 先查看镜像列表
- [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 --input 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: nin^H^H
- Password:
- Email: nn
Docker入门(1)-对镜像的操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。