用 docker pull 拉取镜像
root@lishichao-virtual-machine:~# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812
Status: Downloaded newer image for hello-world:latest

用 docker images 命令查看镜像的信息。

root@lishichao-virtual-machine:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest c5a621af54e4 hours ago 178MB
hello-world latest 4ab4c602aa5e weeks ago .84kB

通过 docker run 运行。      docker run --help 查看帮助

root@lishichao-virtual-machine:~# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps:
. The Docker client contacted the Docker daemon.
. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal. To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/ For more examples and ideas, visit:
https://docs.docker.com/get-started/ root@lishichao-virtual-machine:~#

-it 参数的作用是以交互模式进入容器,并打开终端。5d1eb9e31f58 是容器的内部 ID。

root@lishichao-virtual-machine:~# docker run -it centos
[root@5d1eb9e31f58 /]#

docker ps 查看运行中的容器

root@lishichao-virtual-machine:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d85f20b58c6 centos "/bin/bash" seconds ago Up seconds brave_jennings

镜像命令操作

docker search 到镜像仓库搜索镜像
docker search centos
docker images 查看本地已有的镜像
[root@dns-server ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-vim-dockerfile latest f39351a5d35c 30 hours ago 355MB
mysql 5.7 1b30b36ae96a 3 days ago 372MB
mysql latest ee1e8adfcefb 3 days ago 484MB
nginx latest dbfc48660aeb 3 days ago 109MB
docker save 导出镜像
[root@dns-server ~]# docker save -o nginx.tar nginx
[root@dns-server ~]# ls
anaconda-ks.cfg docker_login.sh nginx.tar
[root@dns-server ~]#
docker load --input 导入镜像
[root@dns-server ~]# docker load --input nginx.tar
Loaded image: nginx:latest
docker rmi 删除镜像
[root@dns-server ~]# docker rmi f39351a5d35c
Untagged: centos-vim-dockerfile:latest
Deleted: sha256:f39351a5d35ca9e00dc101c43464c3f55e9e08a240daaafc4eded43692f745fb
Deleted: sha256:f1b1df6c5b8314f3a0b3a1d5a6a96d7f20501f770b042ac1ad18b6f84164cabc

docker commit

docker commit 命令是创建新镜像最直观的方法,其过程包含三个步骤:

  1. 运行容器
  2. 修改容器
  3. 将容器保存为新的镜像

举个例子:在 Centos base 镜像中安装 vim 并保存为新镜像。

第一步, 运行容器

root@lishichao-virtual-machine:~# docker run -it centos
[root@4d85f20b58c6 /]#

-it 参数的作用是以交互模式进入容器,并打开终端。4d85f20b58c6 是容器的内部 ID。

第二步,安装 vim

确认vim没有安装
[root@4d85f20b58c6 /]# vim
bash: vim: command not found
安装vim
[root@4d85f20b58c6 /]# yum install vim

第三步,保存为新镜像

a.在新窗口中查看当前运行的容器。

root@lishichao-virtual-machine:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d85f20b58c6 centos "/bin/bash" seconds ago Up seconds brave_jennings
brave_jennings 是 Docker 为我们的容器随机分配的名字。

b. 执行 docker commit 命令将容器保存为镜像。

root@lishichao-virtual-machine:~# docker commit brave_jennings centos-with-vim
sha256:a55c595ffacac70fdd2995d898bab31dd932f6ddeeed59fdfcd52a0f695a0c82

新镜像命名为 ubuntu-with-vi。

c. 查看新镜像的属性。

root@lishichao-virtual-machine:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-with-vim latest a55c595ffaca seconds ago 355MB
httpd latest c5a621af54e4 hours ago 178MB
centos latest 75835a67d134 days ago 200MB
hello-world latest 4ab4c602aa5e weeks ago .84kB
ubuntu latest cd6d8154f1e1 weeks ago .1MB

从 size 上看到镜像因为安装了软件而变大了。

d. 从新镜像启动容器,验证 vi 已经可以使用。

root@lishichao-virtual-machine:~# docker -it centos-with-vim
[root@c2b086c59d36 /]# which vim
/usr/bin/vim

以上演示了如何用 docker commit 创建新镜像。然而,Docker 并不建议用户通过这种方式构建镜像。原因如下:

1、这是一种手工创建镜像的方式,容易出错,效率低且可重复性弱。比如要在 debian base 镜像中也加入 vi,还得重复前面的所有步骤。

2、更重要的:使用者并不知道镜像是如何创建出来的,里面是否有恶意程序。也就是说无法对镜像进行审计,存在安全隐患。

既然 docker commit 不是推荐的方法,我们干嘛还要花时间学习呢?

原因是:即便是用 Dockerfile(推荐方法)构建镜像,底层也 docker commit 一层一层构建新镜像的。学习 docker commit 能够帮助我们更加深入地理解构建过程和镜像的分层结构。

docker命令总结的更多相关文章

  1. Docker命令学习

    今天更换腾讯云系统的时候发现了多了个CoreOS,据说是专门运行docker的轻量系统,顺便学习一下docker命令. 1. docker version 显示 Docker 版本信息. 2. doc ...

  2. Docker命令详解

    Docker命令详解   最近学习Docker,将docker所有命令实验了一番,特整理如下: # docker --help Usage: docker [OPTIONS] COMMAND [arg ...

  3. Docker入门教程(六)另外的15个Docker命令

    Docker入门教程(六)另外的15个Docker命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第六篇,继续介绍Docker命令.之前的第二篇文章 ...

  4. 安装Docker和下载images镜像和常用Docker命令

    我的是centos7,也会6的方法: $sudo yum install docker 直接yum安装contos7使用centos6.5先获取epel源并 启动Docker,并注册开机服务 [roo ...

  5. docker命令和后台参数

    Docker官方为了让用户快速了解Docker,提供了一个 交互式教程 ,旨在帮助用户掌握Docker命令行的使用方法. Docker 命令行 下面对Docker的命令清单进行简单的介绍,详细内容在后 ...

  6. 掌握Docker命令

    1.管理镜像命令 获取镜像 docker push ubuntu:14:04 查看镜像列表 docker images 重命名image docker tag IMAGE-NAME NEW-IMAGE ...

  7. docker命令不需要敲sudo的方法

    由于docker daemon需要绑定到主机的Unix socket而不是普通的TCP端口,而Unix socket的属主为root用户,所以其他用户只有在命令前添加sudo选项才能执行相关操作. 如 ...

  8. 从开发到部署会用到的 Docker 命令

    本文的目的是理解容器开发在目标环境中部署的端到端流程,并列出这些操作所需的 Docker 命令.如果有任何Docker问题,请移步到最新最热的技术社区 IT帮 itbang.me 提问,短信通知专家来 ...

  9. docker命令行学习

    docker命令行学习 docker run docker run --help:老实说这条最管用了 docker run -it:交互模式,允许控制台输出 docker run -d:detach, ...

  10. Docker命令查询

    基本语法 docker [OPTIONS] COMMAND [arg...] 一般来说,Docker 命令可以用来管理 daemon,或者通过 CLI 命令管理镜像和容器.可以通过 man docke ...

随机推荐

  1. 关于Qt的事件循环以及QEventLoop的简单使用(QEventLoop::quit()能够终止事件循环,事件循环是可以嵌套的)

    http://www.cnblogs.com/-wang-cheng/p/4973021.html 1.一般我们的事件循环都是由exec()来开启的,例如下面的例子: 1 QCoreApplicato ...

  2. 【C++】【TinyXml】xml文件的读写功能使用——写xml文件

    TinyXml工具是常用比较简单的C++中xml读写的工具 需要加载 #include "TinyXml\tinyxml.h" 在TinyXML中,根据XML的各种元素来定义了一些 ...

  3. 协程在Web服务器中的应用(配的图还不错)

    协程(纤程,微线程)这个概念早就有之,各家互联网公司也都有研究,但在国内各大论坛和大会热起来,还是今年的事. 最近参与讨论开放平台建设和架构设计过程中,有同事提到了使用协程代替线程,能够很大幅度的提高 ...

  4. C++使用libcurl做HttpClient(业务观摩,用C++封装过程式代码,post和get的数据,最好url编码,否则+会变成空格)good

    当使用C++做HTTP客户端时,目前通用的做法就是使用libcurl.其官方网站的地址是http://curl.haxx.se/,该网站主要提供了Curl和libcurl.Curl是命令行工具,用于完 ...

  5. WPF刷新界面

    Winform 里有 Application.DoEvents();可刷新! WPF 里没这个,尽管可用委托实现多线程,但是刷新还是不行! 后来找到了 类似App.DoEvents()的方法(): 代 ...

  6. 计算机网络OSI参考模型与tcp/ip四层模型

    OSI参考模型--7层 1层物理层:主要定义物理设备标准,如网线的接口类型.光线的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后在转化 ...

  7. 简单易用的MongoDB

    从我第一次听到Nosql这个概念到如今已经走过4个年头了,但仍然没有具体的去做过相应的实践.最近获得一段学习休息时间,购买了Nosql技术实践一书,正在慢慢的学习.在主流观点中,Nosql大体分为4类 ...

  8. 【shell】递归函数----调用自身的函数

    什么是递归函数? 一句话,调用自己的函数称为递归函数! #!/bin/bash declare -i count checkoutCount(){ read -p "Enter an cou ...

  9. 活锁(livelock) 专题

    活锁(livelock) 活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败. 活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于 ...

  10. GIS基础软件及操作(五)

    原文 GIS基础软件及操作(五) 练习五.空间分析的基本操作 空间分析的基本操作 空间分析模块 空间分析是基于地理对象的位置和形态的空间数据的分析技术,其目的在于提取和传输空间信息.空间分析是地理信息 ...