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。