Docker操作参数解读
用户在使用Docker时,需要使用Docker命令行工具与Docker daemon建立通信。Docker daemon是Docker守护进程,负责接收并分发执行Docker命令。随着Docker的不断发展,docker 的子命令已经达到41个(attach、build),其中核心子命令(如run、exec)还有复杂的可选执行参数,用户可以根据相应的命令和参数实现丰富强大的功能。
先解读命令前,我们先根据命令的用途对其进行分类,如表1-1
子命令分类 | 子命令 |
Docker环境信息 | info、version |
容器生命周期管理 | create、exec、kill、pause、restart、rm、run、start、stop、unpause |
镜像仓库命令 | login、logout、pull、push、search |
镜像管理 | build、images、import、load、rmi、save、tag、commit |
容器运维操作 | attach、export、inspect、port、ps、rename、stats、top、wait、cp、diff |
容器资源管理 | volume、network |
系统日志信息 | events、history、logs |
从docker命令使用出发,梳理出如图1-1所示的命令结构图。
图1-1 Docker命令结构图
1.Docker环境信息
docker info命令用于检查Docker是否正确安装。如果Docker正确安装,该命令会输出Docker的配置信息。docker info命令一般结合docker version命令使用,两者结合使用能够提取到足够详细的Docker环境信息。
# docker info Containers: 3 Images: 1 Storage Driver: overlay2 …… Kernel Version: 3.10.0-693.2.2.el7.x86_64 Operating System: CentOS Linux 7 (Core) …… # docker version Client: Version: 1.13.1 API version: 1.26 Go version: go1.9.4 …… Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Go version: go1.9.4 ……
docker info和docker version命令的用法比较简单,没有额外的操作参数。
2.容器生命周期管理
容器生命周期管理涉及容器启动、停止等功能,下面选取最常用的docker run命令和负责启动停止的docker start/stop/restart命令举例。
docker run命令
docker run命令使用方法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run命令是Docker的核心命令之一,用户可以选用的选项近70个,所有选项的说明可以通过docker run -help命令来查看。
docker run命令用来基于特定的镜像创建一个容器,并依据选项来控制该容器,具体的使用示例如下:
# docker run ubuntu echo "Hello World" Hello World
这是docker run命令最基本的使用方法,该命令从ubuntu镜像启动一个容器,并执行echo命令打印出“Hello World”。执行完echo命令后,容器将停止运行。docker run命令启动的容器会随机分配一个容器ID(CONTAINER ID),用以标识该容器。
来看一个例子:
# docker run -i -t --name mytest ubuntu:latest /bin/bash root@1e231f8a6834:/#
上例中,docker run命令启动一个容器,并为它分配一个伪终端执行/bin/bash命令,用户可以在该伪终端与容器进行交互。其中:
- -i选项表示使用交互模式,始终保持输入流开放;
- -t选项表示分配一个伪终端,一般两个参数结合时使用-it,即可在容器中利用打开的伪终端进行交互操作;
- --name选项可以指定docker run命令启动的容器的名字,若无此选项,则随机分配一个名字;
- -c选项用于给在容器中的所有进程分配CPU的shares值,这是一个相对权重,实际的处理速度还与宿主机的CPU有关;
- -m选项用于限制为容器中所有进程分配的内存总量,以B、K、M、G为单位;
- -v选项用于挂载一个volume,可以用多个-v参数同时挂载多个volume。volume的格式位[host-dir]:[container-dir]:[rw|ro];
- -p选项用于将容器的端口暴露给宿主机端口,其常用格式位hostPort:containerPort。通过端口的暴露让外部主机通过宿主机暴露的端口访问容器内的应用。
docker start/stop/restart命令
docker run命令可以新建一个容器来运行,而对于已经存在的容器,可以通过docker start/stop/restart命令来启动、停止、重启。利用docker run命令新建一个容器时,Docker将自动为每个新容器分配一个ID作为标识。docker start/stop/restart命令一般利用容器ID标识确定具体容器,在一些情况下,也使用容器名来确定容器。
docker start命令使用-i选项来开启交互模式,始终保持输入流开放。使用-a选项来附加标准输入、输出或错误输出。此外,docker stop和docker restart命令使用-t选项来设定容器停止前的等待时间。
3.Docker registry
Docker registry是存储容器镜像的仓库,用户可以通过Docker client与Docker registry进行通信,以此来完成镜像的搜索、下载和上传等相关操作。Docker Hub是由Docker公司在互联网上提供的一个镜像仓库,提供镜像的公有和私有存储服务,它是用户最主要的镜像来源。除Docker Hub外,用户还可以自行搭建私有服务器来实现镜像仓库的功能,下面选取最常用的docker pull和push命令举例。
docker pull命令
docker pull命令是Docker中常用命令,主要用户从Docker registry中拉取image或repository。在Docker官方仓库Docker Hub中有许多即拿即用的镜像资源通过docker pull命令可以有效地利用它们,这也体现了Docker“一次编译,到处运行”的特性。同时,当镜像被拉取到本地后,用户可以在其现有基础上做出自身的更改操作,这样大大加快了应用的开发进程。
该命令的使用方法如下:
docker pull [OPTIONS] NAME[:TAG @DIGEST]
在使用docker pull命令时,可以从官方的Docker Hub中的官方镜像库、其他公共库、私人库中获取镜像资源,同时,还可以从私有服务器中获取镜像资源。只需在具体的镜像名前添加用户名、特定库名或者服务器地址即可获取镜像。
docker push命令
与docker pull命令相对应的docker push命令,可以将本地的image或repository推送到Dokcer Hub的公共或私有镜像库,以及私有服务器。使用方法如下:
docker push [OPTIONS] NAME [:TAG]
4.镜像管理
用户可以在本地保存镜像资源,为此Docker提供了相应的管理子命令,这里选取images、rmi及rm子命令举例。
docker images命令
通过docker images命令可以列出主机上的镜像,默认只列出最顶层的镜像,可以使用-a选项显示所有的镜像。使用方法如下:
docker images [OPTIONS] [REPOSITORY[:TAG]]
使用示例如下:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest ea4c82dcd15a 4 weeks ago 85.8 MB docker.io/redis latest 0a153379a539 6 weeks ago 83.4 MB
docker rmi和docker rm命令
这两个子命令的功能都是删除,docker rmi命令用于删除镜像,docker rm命令用于删除容器。它们可同时删除多个镜像或容器,也可按条件来删除。两个命令的使用方法如下:
docker rm [OPTIONS] CONTAINER [CONTAINER...] docker rmi [OPTIONS] IMAGE [IMAGE...]
需要注意的是,使用rmi命令删除镜像时,如果已有基于该镜像启动的容器存在,则无法直接删除,需要首先删除容器。当然,这两个子命令都提供-f选项,可强制删除存在容器的镜像或启动中的容器。
5.容器运维操作
作为Docker的核心,容器的操作是重中之重,Docker为用户提供了丰富的容器运维操作命令,这里选取常用的attach、inspect和ps子命令举例。
docker attach命令
docker attach命令对于开发者来说十分有用,它可以连接到正在运行的容器,观察该容器的运行情况,或与容器的主进程进行交互。使用方法如下:
docker attach [OPTIONS] CONTAINER
docker inspect命令
docker inspect命令可以查看镜像和容器的详细信息,默认会列出全部信息,可以通过--format参数来指定输出的模板格式,以便输出特定信息。使用方法如下:
docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
具体示例如下:
# docker inspect --format="{{.NetworkSettings.IPAddress}}" 4da1119ae1b0 172.17.0.3
docker ps命令
docker ps命令可以查看容器的相关信息,默认只显示正在运行的容器的信息。可以查看到的信息包括CONTAINER ID、NAMES、IMAGE、STATUS、容器启动后执行的COMMAND、创建时间CREATED和绑定开启的端口PORTS。docker ps命令常用的功能就是查看容器的CONTAINER ID,以便对特定容器进行操作。使用方法如下:
docker ps [OPTIONS]
docker ps命令常用的选项有-a和-l。-a参数可以查看所有容器,包括停止的容器,-l选项则只查看最新创建的容器,包括不在运行中的容器。
6.其他子命令
除了上述的命令外,Docker还有一系列非常有用的子命令,如固化容器为镜像的commit命令等。
docker commit命令
commit命令可以将一个容器固化为一个新的镜像。当需要制作特定镜像时,会进行修改容器的配置,如在容器中安装特定工具等,通过commit命令可以将这些修改保存起来,使其不会因为容器的停止而丢失。使用方法如下:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
提交保存时,只能选用正在运行的容器(即可以通过docker ps查看到的容器)来制作新的镜像。在制作特定镜像时,直接使用commit命令只是一个临时性的辅助命令,不推荐使用。官方建议用docker build命令结合Dockerfile创建和管理镜像。
events、history和logs命令
events、history和logs这三个命令用于查看Docker的系统日志信息。events命令会打印出实时的系统事件;history命令会打印出指定容器镜像的历史版本信息,即构建该镜像的每一层镜像的命令记录;logs命令会打印出容器中进程的运行日志。使用方法如下:
docker events [OPTIONS] docker history [OPTIONS] IMAGE docker logs [OPTIONS] CONTAINER