1. 镜像相关命令
1.1 搜索镜像
$ docker search whalesay
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/docker/whalesay An image for use in the Docker demo tutorial 637
docker.io docker.io/mendlik/docker-whalesay Docker whalesay image from training materi... 7 [OK]
docker.io docker.io/caibar/whalesay Builds automatizados. 1 [OK]
docker.io docker.io/milanfort/whalesay Modified docker/whalesay image that output... 1
docker.io docker.io/nikovirtala/whalesay Tiny Go web service to print Moby Dock ASC... 1 [OK]
docker.io docker.io/ojenge/whalesay from docker/whalesay 1
docker.io docker.io/sabs1117/whalesay Whalesay with fortune phrases. 1
docker.io docker.io/swinton/whalesay whalesay, innit 1
docker.io docker.io/asakilan/pg-whalesay My whalesay 0
docker.io docker.io/blaines/whalesay 0
docker.io docker.io/claytonrogers/docker-whalesay Whalesay automated build 0 [OK]
docker.io docker.io/dhalljohnston/whalesay whalesay 0
docker.io docker.io/dockeramiller/whalesay Modified version of the official docker/wh... 0 [OK]
docker.io docker.io/firecyberice/whalesay Docker **Cloud** automated build for **amd... 0
docker.io docker.io/forsingh/whalesay whalesay 0 [OK]
docker.io docker.io/hongxi/whalesay-fortunes Demo, the whalesay-fortunes 0
docker.io docker.io/jracionero/docker-whalesay My smarter docker whalesay 0
docker.io docker.io/liuzhishan/docker-whalesay docker-whalesay 0
docker.io docker.io/ox0spy/whalesay-fortune like docker/whalesay, just using fortunes ... 0
docker.io docker.io/phyominhtun/whalesay First WhaleSay Test 0
docker.io docker.io/puneethp/whalesay Docker-Whalesay 0
docker.io docker.io/stealthizer/rpi-whalesay https://github.com/stealthizer/rpi-whalesay 0
docker.io docker.io/tiagoferreira/whalesay Whalesay image 0
docker.io docker.io/whalebrew/whalesay 0
docker.io docker.io/yang225217/whalesay 0
使用docker search 命令可以搜索远端仓库中的共享镜像,默认搜索官方仓库DockerHub中的镜像。
用法为docker search TERM,支持的参数主要包括:
-- automated = true|false:仅显示自动创建的镜像,默认为否;
-- no-trunc = true|false:输出信息不截断显示,默认为否;
-- s --stars=X:指定仅显示评价为指定星级以上的镜像,默认为0,即输出所有镜像。
可以看到返回了很多包含关键字的镜像,其中包括像名字、描述、星级(表示该镜像受欢迎程度)、是否官方创建、是否自动创建等。
默认的输出将按照星级评价进行排序。
现在我们搜索的一个鲸鱼说话的镜像。
1.2 拉取镜像
$ docker pull docker/whalesay
Using default tag: latest
docker pull NAME[:TAG]
docker pull 命令直接从DockerHub镜像源来下载镜像。其中NAME是镜像仓库的名称(用来区分镜像),TAG是镜像的标签(表示版本信息)。通常情况下,描述一个镜像需要包括“名称 + 标签”信息。
因为我们命令中并没有指定TAG标签,则默认会选择latest标签,这会下载仓库中最新的镜像。
1.3 查看镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker/whalesay latest 6b362a9f73eb 3 years ago 247MB
使用docker images命令可以列出本地主机上已有的镜像的基本信息。
在列出的信息种,可以看到以下几个字段信息
REPOSITORY:来自于哪个仓库。
TAG:镜像的标签信息。
IMAGE ID:镜像的ID(唯一标识镜像)
CREATED:创建时间。说明镜像的最后更新时间。
SIZE:镜像大小,优秀的镜像往往体积较小。
其中镜像的ID信息十分重要,它唯一标识了镜像。在使用镜像ID的时候,一般可以使用该ID的前若干字符组成的可区分串来代替完整的ID。镜像大小信息只是表示该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用的存储空间会小于各镜像的逻辑体积之和。
如果需要查看docker images更多命令可以通过man docker-images来查看。
1.4 运行镜像
$ docker run docker/whalesay cowsay hellow docker
_______________
< hellow docker >
---------------
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
docker run 就是运行命令。
docker/whalesay 是要运行的镜像名称
cowsay 是要输出的话,例如我们输出了hellow docker
1.5 上传镜像
$ docker tag docker/whalesay gzq2333/whalesay
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gzq2333/whalesay latest 6b362a9f73eb 3 years ago 247MB
docker/whalesay latest 6b362a9f73eb 3 years ago 247MB
$ docker push gzq2333/whalesay
The push refers to repository [docker.io/gzq2333/whalesay]
5f70bf18a086: Pushed
d061ee1340ec: Pushed
d511ed9e12e1: Pushed
091abc5148e4: Pushed
b26122d57afa: Pushed
37ee47034d9b: Pushed
528c8710fd95: Pushed
1154ba695078: Pushed
latest: digest: sha256:df326a383b4a036fd5a33402248027d1c972954622924158a28744ed5f9fca1e size: 2402
使用docker push命令可以上传镜像到仓库,默认上传到DockerHub官方仓库(需要登录)
用户在DockerHub网站注册后可以上传自制镜像。例如用户gzq2333上传本地whalesay镜像,可以先添加新的标签:gzq2333/whalesay,然后用docker push 命令上镜像。
这里需要重点提示一下,在添加新标签 gzq2333/whalesay 的时候,gzq2333这个一定要是DockerHub存在的用户ID,否则会出现以下提示:denied: requested access to the resource is denied。
第一次上传时需要登录。
$ docker login
Username:
Password:
Login Succeeded
最好不要使用邮箱登录(因为邮箱和Docker ID是两个分离的东西,我们可以使用邮箱登录Docker Web,但是不能登录客户端,如果两者都使用Docker ID登录,那么就OK了)
1.6 删除镜像
$ docker rmi 6b362a9f73eb
当使用docker rmi命令,并且后面跟上镜像的ID,也可以根据镜像名称删除。
注意,当有该镜像创建容器存在时,镜像文件默认是无法被删除的。如果需要强行删除镜像,可以使用-f参数
$ docker rmi -f 6b362a9f73eb
Untagged: docker/whalesay:latest
Untagged: docker/whalesay@sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b
Deleted: sha256:6b362a9f73eb8c33b48c95f4fcce1b6637fc25646728cf7fb0679b2da273c3f4
注意,通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。正确的做法是先删除依赖的镜像的所有容器,再来删除镜像。
2. 容器相关命令
这里我就重新在DockerHub官网下载一个tomcat的镜像来做演示。
2.1 创建容器
$ docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
05d1a5232b46: Downloading [=========================> ] 23MB/45.31MB
5cee356eda6b: Download complete
05d1a5232b46: Pull complete
5cee356eda6b: Pull complete
89d3385f0fd3: Pull complete
65dd87f6620b: Pull complete
78a183a01190: Pull complete
1a4499c85f97: Pull complete
2c9d39b4bfc1: Pull complete
1b1cec2222c9: Pull complete
fc95b85a81f3: Pull complete
0f3868647539: Pull complete
9b6a6eddb2d9: Pull complete
8787183cb077: Pull complete
Digest: sha256:8d120de5102cc12310de741299e9bf6f39d2d674663f2ce4e6f0f181ccfeebe7
Status: Downloaded newer image for tomcat:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 41a54fe1f79d 11 days ago 463MB
$ docker run -d -p 8081:8080 tomcat
eb0fdb6960ce362f4ec20de40f73d6c64c0c6dd0c5dc1c1818444f7239f54a02
首先我用docker pull 从DockerHub官网下载了一个Tomcat镜像。然后docker images查看镜像信息。在通过这个docker run运行镜像命令生成了一个容器。
docker run:运行镜像命令
-d:后台运行
-p 8081:8080:端口映射,把宿主机上的8081端口映射到了容器内Tomcat的8080端口上面了。
tomcat:镜像名称
然后输入这个网址:http://127.0.0.1:8081/
那么意味着这个tomcat的容器启动成功。
2.2 查看容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb0fdb6960ce tomcat "catalina.sh run" 5 seconds ago Up 4 seconds 0.0.0.0:8081->8080/tcp focused_newton
这里就是容器的基本信息。
CONTAINER ID:容器ID,唯一标识。
IMAGE:生成容器的镜像名称。
COMMAND:命令。
CREATED:创建时间,最后更新时间。
STATUS:状态。
PORTS:请求端口信息。
NAMES:容器名称。
2.3 进入容器
在使用-d参数时,容器启动后会在后台运行,用户无法看到容器中的信息,也无法进行操作。这个时候如果需要进入容器操作,有很多种方法,包括使用官方的attach或者exec命令。以及第三方nsenter工具等。
1.attach命令
docker attach focused_newton
当docker容器在 “-d”守护态运行的时候,比如通过supervisord控制两个程序非守护态运行:ssh -d tomcat
那么这个时候,用户就无法直接进入到容器中去,docker attach容器ID就会一直卡着。
因为此时容器运行的进程是ssh,而不是/bin/bash 也没有虚拟终端(-it)参数,所以是进入不到的。
2.exec命令
Docker从1.3版本提供了一个exec命令,可以在容器内直接执行任意命令。
$ docker exec -it eb0fdb6960ce /bin/bash
root@eb0fdb6960ce:/usr/local/tomcat#
-i, --interactive = true|false:打开标准输入接受用户输入命令,默认false;
--privileged = true|false: 是否给执行命令以最高权限,默认为false;
-t --tty = true|false: 分配伪终端,默认false;
-u --user="": 执行命令的用户或ID
可以看到,一个bash终端打开了,在不影响容器内其他应用的前提下,用户可以很容易与容器进行交互。
2.4 容器终止,启动,重启命令
1. docker stop命令用于终止一个运行中的容器,容器终止,里面的应用也就结束了:
$ docker stop eb0fdb6960ce
eb0fdb6960ce
2. 我们可以通过docker ps -qa 来查看终止的容器:
$ docker ps -qa
eb0fdb6960ce
3. 处于终止的容器,可以通过docker start 命令来重新启动:
$ docker start eb0fdb6960ce
eb0fdb6960ce
4. docker restart 命令会将一个运行状态的容器先终止,然后再重新启动它:
$ docker restart eb0fdb6960ce
eb0fdb6960ce
2.5 删除容器
$ docker rm eb0fdb6960ce
docker rm命令来删除处于终止或退出状态的容器,并不能删除正在运行状态的容器。
如果直接删除一个运行中的容器,可以添加-f参数。docker会先发送sigkill信号给容器,终止其中的应用,之后强行删除。
$ docker rm -f eb0fdb6960ce
eb0fdb6960ce
注意,删除容器的话,容器里面应用的产生的数据和日志信息等全都会被删除销毁,所以建议把应用里面的日子和产生的数据挂载到宿主机上。