docker常用命令

docker常用命令

閱讀本文約花費: 18 (分鐘)

Docker Engine是一种开源容器化技术,用于构建和容器化您的应用程序。Docker Engine通过以下方式充当客户端-服务器应用程序:

  1. 具有长时间运行的守护进程的服务器dockerd。
  2. API,用于指定程序可以用来与Docker守护程序进行对话和指示的接口。
  3. 命令行界面(CLI)客户端docker。

CLI使用Docker API通过脚本或直接CLI命令控制或与Docker守护程序进行交互。许多其他Docker应用程序都使用基础API和CLI。守护程序创建和管理Docker对象,例如映像,容器,网络和卷。

docker常用命令

中文版

$ docker –help

Usage: docker [OPTIONS] COMMAND

A self-sufficient runtime for containers
一个可以独立运行的容器

Options:
–config string 客户端配置文件的位置 (默认 “/home/mrdede/.docker”)
-c, –context string 用于连接守护进程的上下文的名称 (使用“DOCKER上下文使用”覆盖DOCKER主机env变量和默认上下文设置)
-D, –debug 启用调试模式
-H, –host list 要连接的守护程序套接字
-l, –log-level string 设置日志级别 (“debug”|”info”|”warn”|”error”|”fatal”) (默认 “info”)
–tls 使用 TLS, –tlsverify 的别名
–tlscacert string 仅由该CA签署的信任证书 (default “/home/mrdede/.docker/ca.pem”)
–tlscert string TLS证书文件的路径 (默认 “/home/mrdede/.docker/cert.pem”)
–tlskey string TLS密钥文件的路径 (默认 “/home/mrdede/.docker/key.pem”)
–tlsverify 使用TLS验证远程
-v, –version 打印版本信息并退出

Management Commands:
builder 管理 构建
config 管理 Docker 配置
container 管理 容器
context 管理 上下文
engine 管理 docker 引擎
image 管理 镜像
network 管理 网络
node 管理 集群节点
plugin 管理 插件
secret 管理 Docker 秘密
service 管理 服务
stack 管理 Docker 堆栈
swarm 管理 集群
system 管理 Docker
trust 管理 trust on Docker images
volume 管理 容量

Commands:
attach 将本地标准输入、输出和错误流附加到运行的容器
build 从 Dockerfile 构建映像
commit 根据容器的更改创建一个新映像
cp 在容器和本地文件系统之间复制文件/文件夹
create 创建一个新容器
deploy 部署新堆栈或更新现有堆栈
diff 检查容器文件系统上的文件或目录的更改
events 从服务器获取实时事件
exec 在运行的容器中运行命令
export 将容器的文件系统导出为目标归档文件
history 显示镜像的历史
images 镜像列表
import 从压缩文件中导入内容以创建文件系统映像
info 显示整个系统的信息
inspect 返回Docker对象的低级信息
kill 杀死一个或多个正在运行的容器(硬杀,相当于咱们的电脑直接拔电源)
load 从tar存档或STDIN加载映像
login 登录到 Docker 远程库
logout 从 Docker 远程库注销
logs 获取容器的日志
pause 暂停一个或多个容器中的所有进程
port 列出容器的端口映射或特定映射
ps 列表容器
pull 从远程库提取镜像或存储库
push 将映像或存储库推送入远程库
rename 重命名一个容器
restart 重新启动一个或多个容器
rm 移除一个或多个容器(软杀,相当于咱们的电脑用鼠标点击【关机】按钮)
rmi 删除一个或多个镜像
run 在新容器中运行命令
save 将一个或多个镜像保存到tar归档文件(默认情况下数据流形式保存到STDOUT)
search 在Docker Hub中搜索镜像
start 启动一个或多个停止的容器
stats 显示容器资源使用统计数据的实时流
stop 停止一个或多个正在运行的容器
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top 显示容器正在运行的进程
unpause 在一个或多个容器中取消暂停所有进程
update 更新一个或多个容器的配置
version 显示Docker版本信息
wait 阻塞一个或多个容器直到停止,然后打印它们的退出代码

运行“docker COMMAND –help” 获取命令的更多信息。

英文版

$ docker –help

Usage: docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
–config string Location of client config files (default “/home/mrdede/.docker”)
-c, –context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set
with “docker context use”)
-D, –debug Enable debug mode
-H, –host list Daemon socket(s) to connect to
-l, –log-level string Set the logging level (“debug”|”info”|”warn”|”error”|”fatal”) (default “info”)
–tls Use TLS; implied by –tlsverify
–tlscacert string Trust certs signed only by this CA (default “/home/mrdede/.docker/ca.pem”)
–tlscert string Path to TLS certificate file (default “/home/mrdede/.docker/cert.pem”)
–tlskey string Path to TLS key file (default “/home/mrdede/.docker/key.pem”)
–tlsverify Use TLS and verify the remote
-v, –version Print version information and quit

Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
context Manage contexts
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes

Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container’s changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
deploy Deploy a new stack or update an existing stack
diff Inspect changes to files or directories on a container’s filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container’s filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes

Run ‘docker COMMAND –help’ for more information on a command.

实例:

帮助命令:

查看 docker 版本信息:

$ docker version

查看 docker 当前容器信息:

$ docker info

帮助信息:

$ docker –help

镜像命令:

查看当前主机存在的镜像:

$ docker images

列出本地所有镜像(含中间映像层):

$ docker images -a

只显示镜像ID:

$ docker images -q

只列出所有镜像的ID:

$docker images -qa

显示镜像的摘要信息:

$ docker images –digests

显示完整的镜像信息:

$ docker images –digests –no-trunc

搜索镜像

$ docker search [关键词]

搜索点赞大于30的镜像

$ docker search -s 30 [关键词]

下载镜像/拉取镜像:

$ docker pull [镜像名称][:版本号/lasest]

删除一个镜像

$ docker rmi [镜像名称][:版本号/lasest]

强制删除一个镜像

$ docker rmi -f [镜像名称][:版本号/lasest]

删除多个镜像

$ docker rmi-f [镜像名称1][:版本号/lasest] [镜像名称2][:版本号/lasest] [镜像名称N][:版本号/lasest]

删除本地全部镜像

$ docker rmi -f $(docker images -q)

$ docker rmi -f $(docker images -qa)

清除Docker缓存文件(下载/构建镜像时会有缓存):

$ docker system prune –volumes

容器命令:

$ docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

OPTIONS:

–name=”容器新名称”:为容器指定一个名称;

-d:后台运行容器,并返回容器ID,也即启动守护式容器;

-i:以交互模式运行容器,通常与-t同时使用;

-t:为容器重新分配一个伪输入终端,通常与-i同时使用;

-P:随机商品映射;

-p:指定端口映射,有以下四种格式:

ip:hostPort:containerPort

ip::containerPort

hostPort:containerPort

containerPort

新建并启动一个交互性的容器:

$ docker run -it [镜像ID]

为新建的容器起一个别名:

$ docker run -it –name [容器别名] [镜像ID]

列出当前所有正在运行的容器:

$ docker ps

OPTIONS:

-a:列出所有正在运行和运行过的容器

-l:列出最近创建的容器

-n:显示最近创建的n个容器

-q:静默模式,只显示窗口编号

–no-trunc:不截断输出

列出所有正在运行和运行过的容器

$ docker ps -a

列出最近一个创建(打开的)的容器:

$ docker ps -l

列出最近8个创建(打开的)的容器:

$ docker ps -l -n 8

显示最近创建的n个容器:

$ docker ps -n 2

静默模式,只显示窗口编号:

$ docker ps -ql

退出出容器:

$ exit

退出容器,但容器继续运行:

Ctrl+P+Q

关闭所有正在运行的容器

0$ sudo docker rm -f $(sudo docker ps -q)

软停:

$ docker stop [容器ID]

硬停(相当于直接断电):

$ docker kill [容器ID]

进入一个已运行容器的控制台:

0$ sudo docker exec -it [容器ID] /bin/bash

在宿主机直接操作 docker 实例:

0$ sudo docker exec -it [容器ID] ls -l /tmp

把容器内的数据拷贝到宿主机:

0$ sudo docker cp [ID]:/tmp/yum.log /root

启动容器,前台运行:

0$ sudo docker run -it rocket.chat

启动容器,后台运行:

0$ sudo docker run -d rocket.chat

提交容器副本使之成为一个新镜像。当拉取的远程镜像自己修改过,而且准备以后一直使用自己修改后的镜像去部署项目,那么就使用到这个命令了。

$ sudo docker commit -a=”[作者]” -m=”[描述]” [一个正在运行着的容器ID] [新容器副本]:[自定义版本号]

0$ sudo docker commit -a=”mrdede” -m=”这是我的第一个窗口副本” d52498cea537 mrdedePro/rocket.chat:1.0.0

删除所有容器/删除全部容器:

在在Windows系统中,cmd窗口下使用命令(docker rm $(docker ps -aq) )时,碰到个问题:

unknown shorthand flag: ‘a’ in -a

但是,如果单独使用 docker ps -aq ,这是没有问题的。

后来,无意间使用了一下PowerShell 窗口,成功执行了删除全部容器的命令,不知所以然……

$ sudo docker rm $(sudo docker ps -aq)

Docker数据卷容器:

数据共享和持久化保存,挂载,宿主机与容器的数据接口。

相当于U盘,也可以理解为是U盘插到电脑上,这样就可以数据共享传送

实现方法:1.直接使用命令添加,2.通过DockerFile文件添加。

使用命令添加数据卷:

$ sudo docker run -it -v [宿主机绝对路径]:[容器内绝对路径] [镜像名称]

0$ sudo docker run -it -v /myDataApi:/dataApi rocket.chat

查看数据是否挂载成功,以JSON格式输出

$ sudo docker inspect [ID]

$ sudo docker inspect 3b34bc048204
[
{
“Id”: “3b34bc048204654efa87f278……”,
“Created”: “2020-11-17T17:27:35.911528385Z”,
“Path”: “/bin/bash”,
“Args”: [],
“State”: {
……
},
……
“HostConfig”: {
“Binds”: [
“/myDataApi:/dataApi”
],
……
},
“GraphDriver”: {
“Data”: {
……
},
“Name”: “overlay2”
},
“Mounts”: [
{
“Type”: “bind”,
“Source”: “/myDataApi”,
“Destination”: “/dataApi”,
“Mode”: “”,
“RW”: true,
“Propagation”: “rprivate”
},
……
],
“Config”: {
“Image”: “rocket.chat”,
“Volumes”: {
“/app/uploads”: {}
},
“WorkingDir”: “/app/bundle”,
“Entrypoint”: null,
“OnBuild”: null,
“Labels”: {}
},
“NetworkSettings”: {
……
}
}
]

上面信息有删减。

容器卷带权限,禁止容器内修改共享文件,在对接时加上“冒号ro”,容器只读

$ sudo docker run -it -v /myDataApi:/dataApi:ro rocket.chat

数据卷容器:

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。

可以理解为数据U盘上挂载数据U盘。

实例一:

启动父容器 dc01:

0$ sudo docker run -it -v  –name dc01 mrdede/centos

dc02 继承 dc01:

$ dudo docker -it –name dc02 –volumes-from dc01 mrdede/centos

dc03 继承 dc01:

$ dudo docker -it –name dc03 –volumes-from dc01 mrdede/centos

说明(试验结果):

  1. 因为dc01中存在数据卷 /dataVolumeContainer,所以 dc02 dc03 继承后,也存在数据卷 /dataVolumeContainer。
  2. 无论在 dc01 / dc02 / dc03 哪个容器添加文件,都会实现在其它容器中同步共享。
  3. 当删除 dc01 这个父容器后,dc02 / dc03 数据卷中的文件依然存在,并且也能达到 dc02 / dc03数据卷的共享。
  4. 假如再添加容器 dc04,继承dc03,则 dc02 / dc03 / dc04 容器的数据卷依然共享。
  5. 假如删除dc03,则dc02 和dc04容器的数据卷依然共享。

结论:

只要是源于同一祖先的继承,无论是继承了祖先,还是继承了祖先的某一后代,即便是出现了断代(如dc04继承了dc03,但后来dc03被删除或关闭),它们的数据卷都是共享的。

容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。

通过DockerFile文件添加数据卷:

FROM 基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER 镜像维护者的姓名和邮箱地址
RUN 容器构建时需要运行的命令
EXPOSE 当前容器向外暴露的端口
WORKDIR 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ENV 用来在构建镜像过程中设置环境变量,如:ENV MY_PATY /usr/mytest
ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY 类似ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置。
语法:
COPY src dest
COPY [“src”, “dest”]
VOLUME 说明:
容器数据卷,用于数据保存和持久化工作。
只是容器内的
出于可移植和分享的考虑,用-v [主机目录]:[容器目录]这种方法不能直接在DockerFile中实现。
由于宿主机目录是依赖于特定宿主机的,并不能保证在所有的宿主机上都存在这样的特定目录。
语法:
VOLUME [“/dataVolumeContainer”, “/dataVolumeContainer2”, “…”]
CMD 指定一个容器启动时要运行的命令
DockerFile 中可以有多个 CMD 指令,但只有最后一个生效,CMD会被docker run之后的参数替换
语法:
CMD 指令的格式和 RUN 相似,也是两种格式:
* shell 格式: CMD <命令>
* exec 格式: CMD [“可执行文件”, “参数1”, “参数2″…]
* 参数列表格式: CMD [“参数1”, “参数2″…],在指定了 ENTRYPOINT 指令后,用 CMD 指定具体参数
ENTRYPOINT 指定一个容器启动时要运行的(追加)命令
ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

Dockerfile 命令分组:

BUILDBOTHRUN
FROMWORKDIRCMD
MAINTAINERUSERENV
COPYEXPOSE
ADDVOLUME
RUNENTRYPOINT
ONBUILD
.dockerignore

DockerFile实例一:

文件DockerFile

以centos为基础镜像

FROM centos

创建容器卷

VOLUME [“/dataVolumeContainer”, “/dataVolumeContainer2”]

输出到终端的信息

CMD echo “finished, ——-success1”

进入终端

CMD /bin/bash

进入上面DockerFile文件所在目录,执行如下命令(带命令空间的镜像名称mrdede/centos,注意命令最后有一个点“.”):

$ sudo docker build -f ./DockerFile -t mrdede/centos .

注:

如果Docker使用命令挂载主机目录Docker访问出现cannot open directory .: Permission denied 报错,

解决办法:在挂载目录后多加一个 –privileged=true 参数即可。

如:

$ sudo docker run -it -v [宿主机绝对路径]:[容器内绝对路径] –privileged=true [镜像名称]

DockerFile实例二:

文件DockerFile2

基础镜像

FROM centos

作者信息

MAINTAINER mrdede[email protected]

进入容器后的默认目录

ENV MYPATH /usr/local
WORKDIR $MYPATH

执行安装任务

RUN yum -y install vim
RUN yum -y install net-tools

对外暴露端口

EXPOSE 80

终端输出

CMD echo $MYPATH
CMD echo “success———-ok”
CMD /bin/bash

终端执行命令:

docker build -f Dockerfile -t mycentos:1.3 .
[+] Building 99.7s (8/8) FINISHED
=> [internal] load .dockerignore 0.2s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 32B 0.0s
=> [internal] load metadata for docker.io/library/centos:latest 0.0s
=> [1/4] FROM docker.io/library/centos 0.0s
=> CACHED [2/4] WORKDIR /usr/local 0.0s
=> [3/4] RUN yum -y install vim 83.5s
=> [4/4] RUN yum -y install net-tools 14.0s
=> exporting to image 1.9s
=> => exporting layers 1.9s
=> => writing image sha256:cf0942064f61b7acc59332811cab528fec3a79303fbc4cc805a4bd29c3834c5b 0.0s
=> => naming to docker.io/library/mycentos:1.3

注一:

在执行上面命令后,

报错 – “docker build” requires exactly 1 argument.:

原因:是因为少输入了最后那一个点“.”。

解决办法:加上最后那个点就好了。

注二:

当前执行构建时,可能会因为未知的错误被中断,

我所说的未知并非真正的未知,

只是因为第一次执行会报错中断,

第二次执行就正常构建成功了。

所以,大家在构建不成功时,就多跑两遍命令试试。

创建并进入容器:

> docker run -it mycentos:1.3

退出到宿主机,查看mycentos:1.3镜像

> docker images mycentos:1.3

用返回的镜像ID,查看镜像的变更历史:

> docker history [镜像ID]

docker history cf0942064f61
IMAGE CREATED CREATED BY SIZE COMMENT
cf0942064f61 About an hour ago CMD [“/bin/sh” “-c” “/bin/bash”] 0B buildkit.dockerfile.v0
About an hour ago CMD [“/bin/sh” “-c” “echo \”success———… 0B buildkit.dockerfile.v0
About an hour ago CMD [“/bin/sh” “-c” “echo $MYPATH”] 0B buildkit.dockerfile.v0
About an hour ago EXPOSE map[80/tcp:{}] 0B buildkit.dockerfile.v0
About an hour ago RUN /bin/sh -c yum -y install net-tools # bu… 14.4MB buildkit.dockerfile.v0
About an hour ago RUN /bin/sh -c yum -y install vim # buildkit 57.3MB buildkit.dockerfile.v0
About an hour ago WORKDIR /usr/local 0B buildkit.dockerfile.v0
About an hour ago ENV MYPATH=/usr/local 0B buildkit.dockerfile.v0
About an hour ago MAINTAINER mrdede[email protected] 0B buildkit.dockerfile.v0
3 months ago /bin/sh -c #(nop) CMD [“/bin/bash”] 0B
3 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
3 months ago /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d… 215MB

Rate this post

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注