Ubuntu 16.04上Docker使用手记

一、Docker Hub的使用

Docker Hub是Docker官方维护的仓库,里面已经包含了很多的镜像,一般我们的需求直接在官方仓库搜索就可以得到解决。在官方的公共仓库中我们无需登录就可以进行镜像的搜索和下载。

docker search命令进行搜索

docker pull命令进行下载

搜索镜像命令详细用法: docker search [OPTIONS] TERM

root@peter-ThinkPad-Edge:~# sudo docker pull Ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
af49a5ceb2a5: Pull complete
8f9757b472e7: Pull complete
e931b117db38: Pull complete
47b5e16c0811: Pull complete
9332eaf1a55b: Pull complete
Digest: sha256:3b64c309deae7ab0f7dbdd42b6b326261ccd6261da5d88396439353162703fb5
Status: Downloaded newer image for ubuntu:latest

完成后,即可随时使用该镜像了,例如创建一个容器,让其中运行 bash 应用。

$ sudo docker run -t -i ubuntu /bin/bash root@fe7fc4bd8fc9:/# docker images 列出镜像

$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest 99ec81b80c55 4 weeks ago 266 MB

在列出信息中,可以看到几个字段信息

来自于哪个仓库,比如 ubuntu

镜像的标记,比如 14.04

它的 ID 号(唯一)

创建时间

镜像大小

其中镜像的 ID 唯一标识了镜像,注意到 ubuntu:14.04 和 ubuntu:trusty 具有相同的镜像 ID,说明它们实际上是同一镜像。

TAG 信息用来标记来自同一个仓库的不同镜像。例如 ubuntu 仓库中有多个镜像,通过 TAG 信息来区分发行版本,例如 10.04、12.04、12.10、13.04、14.04 等。例如下面的命令指定使用镜像 ubuntu:14.04 来启动一个容器。

$ sudo docker run -t -i ubuntu /bin/bash

如果不指定具体的标记,则默认使用 latest 标记信息。

REPOSITORY          TAG                IMAGE ID            CREATED            SIZE
ubuntu              latest              4ca3a192ff2a        2 weeks ago        128.2 MB

docker commit 命令来提交更新后的副本。 $ sudo docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2 4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c

其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。

使用 docker images 来查看新创建的镜像。

$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu           latest   99ec81b80c55  4 weeks ago   266 MB ouruser/sinatra v2 3c59e02ddd1a 10 hours ago 446.7 MB

之后,可以使用新的镜像来启动容器

$ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash root@78e82f680994:/# docker save 和docker load  导入导出镜像

如果要导出镜像到本地文件,可以使用 docker save 命令。

$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest c4ff7513909d 5 weeks ago 225.4 MB ... $sudo docker save -o ubuntu.tar ubuntu

可以使用 docker load 从导出的本地文件中再导入到本地镜像库,例如

$ sudo docker load --input ubuntu.tar

$ sudo docker load < ubuntu.tar

这将导入镜像以及其相关的元数据信息(包括标签等)。

  docker rmi 移除镜像

$ sudo docker rmi ouruser/sinatra:v2 Untagged: ouruser/sinatra:v2 Deleted: 5bc342fa0b91cabf65246837015197eecfa24b2213ed6a51a8974ae250fedd8d Deleted: ed0fffdcdae5eb2c3a55549857a8be7fc8bc4241fb19ad714364cbfd7a56b22f Deleted: 5c58979d73ae448df5af1d8142436d81116187a7633082650549c52c3a2418f0

*注意:在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器。

5.Docker命令之容器(container)篇 docker run 启动容器

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。

因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。

新建并启动

所需要的命令主要为 docker run。

例如,下面的命令输出一个 “Hello World”,之后终止容器。

$ sudo docker run ubuntu /bin/echo 'Hello world' Hello world

这跟在本地直接执行 /bin/echo 'hello world' 几乎感觉不出任何区别。

下面的命令则启动一个 bash 终端,允许用户进行交互。

$ sudo docker run -t -i ubuntu /bin/bash root@af8bae53bdd3:/#

其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。

在交互模式下,用户可以通过所创建的终端来输入命令,例如

root@af8bae53bdd3:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14628.html