Docker 常用命令

一、Docker容器信息

version

1
2
查看docker容器版本
# docker version

info

1
2
看docker容器信息
# docker info

二、容器生命周期管理

run

1
2
3
4
5
新建并启动容器,参数:-i  以交互模式运行容器;-t  为容器重新分配一个伪输入终端;--name  为容器指定一个名称
# docker run -i -t --name mycentos

后台启动容器,参数:-d 已守护方式启动容器
# docker run -d mycentos

注意:此时使用”docker ps -a”会发现容器已经退出。这是docker的机制:要使Docker容器后台运行,就必须有一个前台进程。解决方案:将你要运行的程序以前台进程的形式运行。

start

1
2
启动一个或多个已经被停止的容器
# docker start redis

stop

1
2
停止运行中的容器
# docker stop redis

restart

1
2
重启容器
# docker restart redis

rm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
删除一个已停止的容器
# docker rm redis

强制删除一个运行中的容器
# docker rm -f redis

删除多个容器
# docker rm -f $(docker ps -a -q)
# docker ps -a -q | xargs docker rm

-l 移除容器间的网络连接,连接名为 db
# docker rm -l db

-v 删除容器,并删除容器挂载的数据卷
# docker rm -v redis

kill

1
2
3
4
5
杀掉一个运行中的容器,
# docker kill mynginx

-s :向容器发送一个信号
# docker kill -s KILL mynginx

pause

1
2
暂停容器中所有的进程
# docker pause nginx

unpause

1
2
恢复容器中所有的进程
# docker unpause nginx

create

1
2
创建一个新的容器但不启动它
# docker create --name nginx nginx:latest

三、容器操作

容器操作可使用CONTAINER ID 或 NAMES。

top

top支持 ps 命令参数,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]

1
2
3
4
5
列出redis容器中运行进程
# docker top redis

查看所有运行容器的进程信息
# for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done

logs

1
2
3
4
5
6
7
8
查看redis容器日志,默认参数
# docker logs rabbitmq

查看redis容器日志,参数:-f 跟踪日志输出;-t 显示时间戳;--tail 仅列出最新N条容器日志;
# docker logs -f -t --tail=20 redis

查看容器redis从2019年05月21日后的最新10条日志。
# docker logs --since="2019-05-21" --tail=10 redis

exec

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
使用run方式在创建时进入
# docker run -it centos /bin/bash

关闭容器并退出
# exit

仅退出容器,不关闭
快捷键:Ctrl + P + Q

在 centos 容器中打开新的交互模式终端,可以启动新进程,参数:-i 即使没有附加也保持STDIN 打开;-t 分配一个伪终端
# docker exec -i -t centos /bin/bash

以交互模式在容器中执行命令,结果返回到当前终端屏幕
# docker exec -i -t centos ls -l /tmp

以分离模式在容器中执行命令,程序后台运行,结果不会反馈到当前终端
# docker exec -d centos touch cache.txt

attach

1
2
直接进入centos 容器启动命令的终端,不会启动新进程,多个attach连接共享容器屏幕,参数:--sig-proxy=false  确保CTRL-D或CTRL-C不会关闭容器
# docker attach --sig-proxy=false centos

ps

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
查看正在运行的容器
# docker ps

查看正在运行的容器的ID
# docker ps -q

查看正在运行+历史运行过的容器
# docker ps -a

显示运行容器总文件大小
# docker ps -s

显示最近创建容器
# docker ps -l

显示最近创建的3个容器
# docker ps -n 3

不截断输出
# docker ps --no-trunc

获取镜像redis的元信息
# docker inspect redis

获取正在运行的容器redis的 IP
# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis

stop

1
2
3
4
5
停止一个运行中的容器
# docker stop redis

杀掉一个运行中的容器
# docker kill redis

commit

1
2
基于当前容器创建一个新的镜像;参数:-a 提交的镜像作者;-c 使用Dockerfile指令来创建镜像;-m :提交时的说明文字;-p :在commit时,将容器暂停
# docker commit -a="DeepInThought" -m="my redis" [容器ID] 新容器名:v1.1

cp

1
2
3
4
5
6
7
8
将rabbitmq容器中的文件copy至本地路径
# docker cp rabbitmq:/[container_path] [local_path]

将主机文件copy至rabbitmq容器
# docker cp [local_path] rabbitmq:/[container_path]/

将主机文件copy至rabbitmq容器,目录重命名为[container_path](注意与非重命名copy的区别)
# docker cp [local_path] rabbitmq:/[container_path]

diff

1
2
检查容器里文件结构的更改
# docker diff mymysql

inspect

1
2
3
4
5
获取容器/镜像的元数据
# docker inspect mysql:5.6

获取正在运行的容器mysql的 IP。
# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql

events

1
2
从服务器获取实时事件,-f :根据条件过滤事件;--since :从指定的时间戳后显示所有事件;--until :流水时间显示到指定的时间为止;
# docker events --since="1467302400"

wait

1
2
阻塞运行直到容器停止,然后打印出它的退出代码
# docker wait CONTAINER

export

1
2
将文件系统作为一个tar归档文件导出到STDOUT
# docker export -o mysql-`date +%Y%m%d`.tar mysql

port

1
2
列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口
# docker port mymysql

四、镜像操作

镜像操作可使用镜像名、镜像ID。

images

列出本地镜像

1
# docker images

含中间映像层

1
# docker images -a

只显示镜像ID

1
# docker images -q

含中间映像层

1
# docker images -qa

显示镜像摘要信息(DIGEST列)

1
# docker images --digests

显示镜像完整信息

1
# docker images --no-trunc

显示指定镜像的历史创建;参数:-H 镜像大小和日期,默认为true;–no-trunc 显示完整的提交记录;-q 仅列出提交记录ID

1
# docker history -H redis
1
2
3
4
5
6
7
8
9
10
11
搜索仓库MySQL镜像
# docker search mysql

--filter=stars=600:只显示 starts>=600 的镜像
# docker search --filter=stars=600 mysql

--no-trunc 显示镜像完整 DESCRIPTION 描述
# docker search --no-trunc mysql

--automated :只列出 AUTOMATED=OK 的镜像
# docker search --automated mysql

pull

1
2
3
4
5
6
7
8
下载Redis官方最新镜像,相当于:docker pull redis:latest
# docker pull redis

下载仓库所有Redis镜像
# docker pull -a redis

下载私人仓库镜像
# docker pull bitnami/redis

rmi

1
2
3
4
5
6
7
8
9
10
11
单个镜像删除,相当于:docker rmi redis:latest
# docker rmi redis

强制删除(针对基于镜像有运行的容器进程)
# docker rmi -f redis

多个镜像删除,不同镜像间以空格间隔
# docker rmi -f redis tomcat nginx

删除本地全部镜像
# docker rmi -f $(docker images -q)

build

1
2
使用 Dockerfile 构建镜像
# docker build -f /docker/dockerfile/centos -t mycentos:1.1

tag

1
2
复制一个镜像
# docker tag nginx:14.1 my/nginx:14

history

1
2
查看指定镜像的创建历史,-H :以可读的格式打印镜像大小和日期,默认为true;--no-trunc :显示完整的提交记录;-q :仅列出提交记录ID。
# docker history my/nginx:14

save

1
2
将指定镜像保存成 tar 归档文件
# docker save -o my/nginx:14.tar my/nginx:14

load

1
2
导入使用 docker save 命令导出的镜像,--input , -i : 指定导入的文件,代替 STDIN;--quiet , -q : 精简输出信息;
# docker load --input my/nginx:14.tar

import

1
2
从归档文件中创建镜像,-c :应用docker 指令创建镜像;-m :提交时的说明文字;
# docker import my/nginx:14.tar my/nginx:14

prune

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
命令用来删除不再使用的 docker 对象
删除所有未被 tag 标记和未被容器使用的镜像
# docker image prune

删除所有未被容器使用的镜像
# docker image prune -a

删除所有停止运行的容器
# docker container prune

删除所有未被挂载的卷
# docker volume prune

删除所有网络
# docker network prune

删除 docker 所有资源
# docker system prune

五、镜像仓库操作

login

1
2
登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
# docker login -u 用户名 -p 密码

logout

1
2
登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
# docker logout

pull

1
2
从镜像仓库中拉取或者更新指定镜像
# docker pull nginx

push

1
2
将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
# docker push nginx:v1

search

1
2
3
从Docker Hub查找镜像,--automated :只列出 automated build类型的镜像;--no-trunc :显示完整的镜像描述;-f <过滤条件>:列出收藏数不小于指定值的镜像。
# docker search nginx
# docker search -f stars=10 nginx
-------------本文结束感谢您的阅读-------------