Docker 操作指令
Last updated
Last updated
下面表中列出了Docker操作镜像与容器的一些常用指令。
指令 | 说明 |
docker images | 列出镜像 |
docker search | 搜索镜像 |
docker pull | 拉取镜像 |
docker build | 构造镜像 |
docker rmi | 删除镜像 |
docker run | 创建并启动容器 |
docker ps | 列出容器 |
docker exec | 执行容器 |
docker stop | 停止容器 |
docker start | 启动容器 |
docker pause | 暂停容器 |
docker unpause | 恢复容器 |
docker rm | 删除容器 |
通过docker images指令可以查看本地镜像列表中已经有的镜像,使用方法如下:
从图中可以看出,系统终端将本地镜像列出来,分5列进行展示,每一列的具体含义如下:
REPOSITORY:镜像名称
TAG:镜像参数,类似于版本号,默认为latest
IMAGE ID:镜像ID,是唯一值。此处看到的是一个长度为12的字符串,实际上它是64位完整镜像ID的缩写形式。
CREATED:距今创建镜像的时间。
SIZE:镜像大小。
想知道在Docker Hub中包含了哪些镜像,除了可以登录Docker Hub(https://hub.docker.com/explore/),在官网中心进行查看,还可以直接在Docker客户端进行查询。例如想要查询Ubuntu镜像,可以使用如下指令:
执行上述命令后,系统终端就会将搜索有关Ubuntu的镜像展示出来.
系统终端分5列将搜索到的Ubuntu相关的镜像列举出来:
Name:表示进项的名称,这里有两种格式的名称,其中不带"/"的表示官方镜像,而带有"/"的表示其他用户的公开镜像。公开镜像"/"前面hi用户在Docker Hub上的用户名(唯一),后面是对应的镜像名,除了从镜像名称上可以区分官方镜像与用户镜像,还可以通过第四列OFFICIAL声明中看出(改列内容为OK表示官方镜像)。
DESCRIPTION:表示镜像的描述,这里只显示了一小部分。
STARS:表示镜像 收藏数,用户可以在Docker Hub上对镜像进行收藏,一般可以通过该数字反映出该镜像的受欢迎程度。
OFFICIAL:表示是否为官方镜像。
AUTOMATED:表示是否自动构建镜像.例如:用户可以将自己Docker Hub绑定到如Github上,当代码提交更新后,自动构建镜像。
通过docker pull
可以拉取仓库镜像到本地(默认都是拉取Docker Hub仓库镜像,也可以指定"IP+端口"拉取某个Docker机器上的私有仓库镜像),具体使用是如下:
执行上述指令后,Docker会自动从Docker Hub上下载最新版本的Ubuntu到本地,当然也可以使用以下指令拉取指定版本的镜像到本地,具体执行如下:
除了可以通过docker pull
指令从仓库拉取镜像外,还可以通过docker build
指令构建Docker镜像,通常情况都是通过Dockerfile文件来构建镜像的。
(1).在Dockerfile文件所在目录后,可以使用docker build指令进行镜像构建,具体指令如下:
进入Dockerfile所在目录,通过点"."读取当前应用上下文中的Dockerfile进行构建。
(2).在其他目录构建镜像
除了可以在Dockerfile文件所在目录构建镜像外,还可以在指定目录下进行镜像构建,如在home目录下读取Dockerfile文件所在目录的指令如下:
构建完成后就可以通过docker images
指令查看镜像是否创建成功。
当本地存放过多不需要的镜像时,可以通过docker rmi
指令将其删除。在删除镜像时,需要指定镜像名称或镜像ID。删除镜像的使用方式如下:
上述指令中,docker rmi
表示删除镜像,-f 表示进行强制删除,而hellodocker1和hellodocker2分别表示乣删除的镜像名称,这里同时删除两个镜像。除了根据名称删除镜像外,还可以根据镜像ID来删除。
注意:在进行镜像删除操作时,如果通过镜像ID进行镜像删除,那么由该镜像创建的容器必须提前删除或停止。另外,在通过镜像名称操作镜像时,如果操作的不是默认的lastest镜像,必须爱镜像名称后面指定镜像标签tag参数来确保唯一性。
Docker镜像主要用于创建容器,可以使用Docker run
指令创建并启动容器,具体使用方式如下:
docker run
: 表示创建并启动一个容器,而后面的hellodocker就表示要启动运行的镜像名称。
-d
:表示容器启动时在后台运行。
-p 5000::80
:表示将容器内暴露的80端口映射到宿主机指定的5000端口,也可以将-p 5000::80
更改为-P
来映射主机的随机端口(注意p字母 大小写)。
--name test
:表示为创建后的容器指定名称为test,如果有该参数配置,则生成的容器会设置一个随机名称。
docker run 命令是Docker操作红较为复杂的一个,它可以携带多个参数,我们可以通过docker run --help指令进行查看,其中有些参数如-e、-v和-w等都可以在Dockerfile文件中预先声明。
注意:由于容器的名称具有唯一性,因此创建容器时若指定了容器名称,则后续创建的容器名称不得与此容器名称相同,否则需要重新命名或者将之前的容器删除。
参数补充说明(Docker run 命令):
-a stdin:指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d:后台运行容器,并返回容器ID;
-i:以交互模式运行容器,通常与 -t 同时使用;
-p:端口映射,格式为:主机(宿主)端口:容器端口
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb":为容器指定一个名称;
--dns 8.8.8.8:指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com:指定容器DNS搜索域名,默认和宿主一致;
-h "mars":指定容器的hostname;
-e username="ritchie":设置环境变量;
--env-file=[]:从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2":绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge":指定容器的网络连接类型,支持 bridge/host/none/container:四种类型;
--link=[]:添加链接到另一个容器;
--expose=[]:开放一个端口或一组端口;
示例
使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
生成容器后,可以通过docker ps
指令查看当前运行的所有容器,具体使用方法如下:
系统终端通过7列对当前的正在运行的一个容器进行了展示,具体含义如下:
CONTAINER ID:表示生成的容器ID。
IMAGE:表示生成该容器的镜像名称。
COMMAND:表示启动容器时运行的命令,Docker要求在启动容器时必须运行一个命令。
CREATED:表示容器创建的时间。
STATUS:表示容器运行状态,例如Up表示运行中,Exited表示已停止。
PORTS:表示容器内部暴露的端口映射到主机的端口
NAMES:表示生成容器的名称,由Docker引擎自动生成,可以像上述示例中--name
参数指定生成容器名称。
可以通过docker ps --help指令对ps指令详细的信息参数进行查看。
当生成容器后,客户端可以通过docker exec
指令与运行的容器进行通信,在通信时需要指定容器ID或名称,具体方式如下:
执行上述指令后,就会将该容器中的所有文件都展示出来。
当不需要容器运行时,可以使用docker stop指令停止指定的容器,在停止容器时,需要指定容器ID名称,具体使用方式如下:
使用上述指令停止容器时,会有所略微延迟,成功后会返回该容器ID,如果想要查看该容器,则可以通过上面学习的docker ps -a
进行查看。
也可以过docker kill
指令立即杀死运行的容器进程,使用该指令也需要指定容器ID或名称,具体使用方式如下:
使用上述命令杀死运行的容器时,几乎是瞬间完成,执行后便会返回该容器的ID。
容器停止后,如果需要重新访问该容器中的程序,则需要重新启动该容器。启动容器可以通过docker start
指令来完成,具体使用方式如下:
还可以使用docker restart
指令重启容器。
注意:
docker restart
指令即可以重新启动已经停止的容器,也可以重启当前正在运行的容器,具体使用方式如下:
暂停容器中所有的进程。
恢复容器中所有的进程。
当不需要使用容器时,则可以使用docker rm
指令删除已停止的容器,具体使用方式如下:
注意:上面的指令只能删除已经停止运行的容器,而不能删除正在运行的容器。如果想要删除正在运行容器,则需要添加
-f
参数强制删除,具体使用方式如下:
当需要删除的容器过多时,如果还一个个删除太麻烦,可以使用如下指令将全部容器删除:
上述指令中,首先会通过$(docker ps -aq)
获取所有容器的ID,然后通过docker rm -f
强制删除。
如果开发者有自己特殊的删除需求,可以根据前面docker ps
指令进行组装来获取需要删除的容器ID。