x.命令集-终极版

一、镜像仓库
search
docker search 镜像名:从镜像仓库查询某个镜像
下载镜像前可以先去镜像仓库查询一下该镜像(在国内需要配置镜像加速),默认显示 25 个镜像,根据点赞数排列,可以使用 --limit num
指定显示的镜像数量
# 从镜像仓库查询 redis
docker search redis
# 返回结果示例
NAME DESCRIPTION STATS OFFICIAL AUTOMATED
redis Redis is an Open... 10018 [OK]
sameersbn/redis Redis cluster3.0... 80 [OK]
---默认显示25个镜像---
# 带参数的命令
docker search --limit 5 redis
返回结果解析
- NAME:镜像名称
- 没带斜杠的一般是官方打包的镜像, 一般下载官方镜像
- 带斜杠的,斜杠前的字符就是镜像的作者
- DESCRIPTION:镜像说明,描述信息
- STATS:点赞数量
- OFFICIAL:是否是官方镜像
- AUTOMATED:司法是自动构建的
pull
docker pull 镜像名: TAG:下载镜像
TAG 是可选的,表示版本号标签,如果省略了 TAG,就会下载最新版,等价于 镜像名:latest
# 下载最新版
docker pull redis
# 指定下载的版本
docker pull redis:6.0.8
push
docker push 镜像名:将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker push crpi-xdtbezpej8zb5h98.cn-shenzhen.personal.cr.aliyuncs.com/nore/ubuntu:1.1
二、本地镜像管理
images
docker images:列出当前主机上的镜像
- -a: 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
- –digests : 显示镜像的摘要信息
- -q:只显示镜像 ID
# 列出本地主机上的镜像
docker images
# 返回结果示例
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 3 years ago 13.3kB
redis latest 7614ae9453d1 2 months ago 113MB
redis 6.0.8 16ecd2772372 13 months ago 104MB
# 带参数的命令
docker images -a
docker images -q
返回结果解析:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的版本号
- 同一仓库源可以有多个 TAG 版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY: TAG 来定义不同的镜像。
- latest 表示最新的版本
- IMAGE ID:镜像 ID
- CREATED:镜像创建时间
- SIZE:镜像大小
对镜像的任何操作如果不指定版本标签,将默认使用 latest 版本。
rmi
docker rmi 镜像名: TAG 或 id:删除镜像
- -f:表示强制删除(可以用来删除被容器使用的镜像)
注意:通过镜像名和镜像 id 都可以删除镜像,如果是使用镜像名删除的,需要指定 TAG 版本,如果不指定,默认删除的是 lastest 版本(非 lastest 版本必须指定版本号)
该命令也可以删除多个镜像,直接空格继续添加要删除的镜像
# 删除镜像
docker rmi redis
docker rmi redis 3218b38490ce
# 强制删除镜像(哪怕该镜像还有容存在)
docker rmi -f redis
# 批量删除镜像
docker rmi -f redis mysql:8.0.3
# 删除全部镜像[谨慎操作]
docker rmi -f $(docker images -qa)
tag
该命令用来给 docker 镜像打标签,其实就是重命名(重命名包括版本号)
docker tag SOURCE_IMAGE[:TAG]
TARGET_IMAGE[:TAG]
docker tag item:1.2 172.20.218.216:5000/item:1.2
PS:为 Docker 镜像打上新标签时,实际上是在为同一镜像创建了一个新的引用。原始的标签并不会消失,还会继续存在于你的本地镜像列表中。如果你不再需要旧的标签,你可以使用 docker rmi
命令来删除它。
build
docker build [OPTIONS] PATH:使用 Dockerfile 创建镜像
- PATH:包含 Dockerfile 的目录路径或 ,
.
表示当前目录 - 常用 OPTIONS
- -t:
--tag
,为创建的镜像指定镜像名:TAG
- -t:
# 注意最后面还有一个 空格 和 . 代表当前目录下构建
docker build -t myos:1.2 .
history
docker history 镜像名/ID:查看镜像内的历史记录
$ docker history nginx:v2
IMAGE CREATED CREATED BY SIZE COMMENT
07e334658 54 seconds ago nginx -g daemon off; 95 B 修改了默认首页
save
docker save 镜像名/ID:将指定镜像保存成 tar 归档文件
- -o :输出到的文件。
# 将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
load
docker load 镜像归档文件:导入使用 docker save
命令导出的镜像。
- –input , -i : 指定导入的文件,代替 STDIN。
- –quiet , -q : 精简输出信息。
# 导入镜像
docker load --input fedora.tar
import
docker import - 镜像用户/镜像名: 版本:从 tar 包中的内容创建一个新的文件系统再导入为镜像 [对应 docekr export]
cat ubuntu.tar.gz | docker import - nore/ubantu:latest
镜像用户、镜像名、版本可以随意指定,不影响容器的内容,该容器的 id 和内容和打包前是完全一样的。
三、容器生命周期
run
docker run [OPTIONS 选项] 镜像 [ 容器命令] [命令参数]:根据镜像新建一个容器,并运行
注意:镜像的版本如果不是 lastest,就需要指定版本号 image:tag
OPTION 选项细节如下:
- --name = "容器名":为容器指定一个名称
- 该容器名可以用来操作容器(使用容器 ID 也可以进行同样的操作)
- 如果不指定系统会随机分配一个毫无意义的名字
- 容器启动方式(不指定则仅执行一次容器就停止)
- -d:在后台运行容器并返回容器 ID,也即启动守护式容器(后台运行)
- -i:以交互模式运行容器,通常与 -t 同时使用;
- -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
- -it:启动交互式容器,前端会有个伪终端,等待交互
- 指定端口映射
- -P: 随机端口映射,大写 P
- -p:指定端口映射,小写 p【推荐】
# 拉取镜像
docker pull ubuntu
docker pull redis:6.0.8
# 创建容器并运行
docker run hello-word
docker run -it ubuntu /bin/bash
docker run -d redis:6.0.8
docker run 背后的工作
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载启动;
- 利用镜像创建并启动一个容器;
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层;
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去;
- 从地址池配置一个 ip 地址给容器;
- 执行用户指定的启动命令;
- 执行完毕后容器可能被中止(与容器启动方式有关)
create
docker create [OPTION] 镜像 [: Tag]:创建一个新的容器但不启动他
create 和 run 的区别就是 create 仅创建容器而不启动它。
docker create --name mynginx nginx:latest
start/stop/restart
- docker start 容器名/ID: 启动一个或多个已经被停止的容器。
- docker stop 容器名/ID : 停止一个运行中的容器。
- docker restart 容器名/ID : 重启容器。
docker start 69ca8e178f30
docker restart 69ca8e178f30
docker stop 69ca8e178f30
start(restart)和 run 的区别
docker start 命令并不能指定容器的启动方式,也不能指定容器启动时执行的命令和参数。容器的启动方式和启动时的容器命令都是由 docker run 命令指定的。
docker start 会自动采用该容器创建时指定的启动方式和容器命令。
对于 -it
前台交互式方式创建的容器,start 命令启动后,不会进入交互页面,相当于自动执行了 ctrl + p + q
,想进入交互页面,就使用 docker exec
命令。
退出容器
以交互式的方式进入容器后,进行容器的退出。
有两种退出的方式
- exit:run 进去容器,exit 退出,容器停止
ctrl + p + q
:run 进去容器,ctrl+p+q 退出, 容器不停止
特别注意,如果不想让容器停止,就使用 ctrl + p + q
快捷键退出。
比如:使用交互方式启动 Nginx,然后使用 ctrl + p + q
退出,不停止 Nginx 服务。
rm/kill
- docker rm 容器名/ID:删除一个或多个容器
- -f:强制删除(即时容器还在运行)
- -v:同时删除容器挂载的数据卷
- docker kill 容器名/ID:强制停止容器(相当于 docker rm -f)
# 强制删除多个容器
docker rm -f db1 db2
# 删除容器,并删除容器挂载的数据卷
docker rm -v 65d4a94f7a39
## 删除所有已经停止的容器
docker rm ${docker ps -a -q)
docker ps -a -q | xargs docker rm
# kill 容器
docker kill tomcat10
pause/unpause
- docker pause 容器名/ID:暂停容器中所有的进程
- docker unpause 容器名/ID:恢复容器中所有的进程
docker pause db01
cker unpause db0
四、容器操作
exec
docker exec -it 容器名/ID [bashShell]:进入运行中的容器
exec 是在容器中打开新的终端,并且可以启动新的进程用 exit 退出,不会导致容器的停止, 推荐使用该方式 ,以免误操作中止了服务。
# 以交互的方式创建ubantu
docker run -it ubuntu /bin/bash
root@3b3e0ef6c95d:/
# 使用 `ctrl+p+q` 退出交互式界面(ubantu依然在运行)
[root@ali-1 ~]
# 使用 exec方式进入之前的交互式界面进程
docker exec -it 3b3e0ef6c95d /bin/bash
# 执行exit命令
root@3b3e0ef6c95d: exit
# 查看容器,发现ubantu容器依然在运行
docker ps
attach
attach 命令会直接进入容器启动命令的终端,不会启动新的进程,用 exit 退出,会导致容器的停止。
# 以交互的方式进入ubantu shell
docker run -it ubuntu /bin/bash
root@3b3e0ef6c95d:/
# 使用 `ctrl+p+q` 退出交互式界面(ubantu依然在运行)
[root@ali-1 ~]
# 使用 attach 方式进入之前的交互式界面进程
docker attach 3b3e0ef6c95d
# 执行exit命令
root@3b3e0ef6c95d: exit
# 查看容器,发现ubantu容器已经被终止
docker ps
export
docker export 容器 ID > 文件名.tar:将整个容器内容导出,作为一个 tar 归档文件。
docker export 3b3e0ef6c95d > ubuntu.tar.gz
默认导出到当前目录
commit
docker commit [OPTION] 容器ID或容器名
要创建的镜像名:版本
:提交容器副本使之成为一个新的镜像
- -a:镜像的作者(也可以使用--author)
- -m:创建镜像的描述信息(也可以使用--message)
- -p:在commit时,将容器暂停。
$ docker commit -a="nore" -m="修改了默认首页" webserver nginx:v2
# 返回信息
sha256:07e33465974800ce65751acc279adc6ed2dc5ed4e0838f8b86f0c87aa1795214
cp
docker cp 容器 ID: 容器内路径 主机目录:从容器内拷贝文件到主机上。
一般用于容器的备份
docker cp 3b3e0ef6c95d:/usr/a.txt /tmp/a.txt.bak
五、容器信息
ps
docker ps [OPTIONS]:列出当前所有正在运行的容器
- -a:列出当前所有正在运行的容器+历史上运行过的
- -l:显示最近创建的容器。
- -n:显示最近 n 个创建的容器。
- -q:静默模式,只显示容器编号
docker ps
# 返回示例:容器id、所属镜像、执行的命令、容器创建时间、容器状态、暴漏的端口、容器名
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9cf8ed71f52 ubantu "/bin/bash" 8 hours ago UP 7 hours elastic
top
docker top 容器 ID:查看容器内运行的进程
docker top d9cf8ed71f52
logs
docker logs 容器名/ID:查看容器日志
- –tail : 仅列出最新N条容器日志
PS:尤其是容器启动错误,可以通过该命令查看错误原因。
docker logs d9cf8ed71f52
port
docker port 容器名/ID:列出指定的容器的端口映射。
docker port mymysql
diff
docker diff 容器名/ID:检查容器里文件结构的更改
docker diff mymysql
X. 其他
inspect
docker inspect 镜像名或 id(容器名或 id):获取容器/镜像的元数据
docker inspect tomcat
system df
docker system df:查询镜像(Images)、容器(Containers)、数据卷(Local Volumes)、构建缓存(Build Cache)所占用的空间
docker system df
# 返回示例
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 2 1 515.6MB 515.6MB (99%)
Containers 1 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
events
docker events:获取实时事件
- -f:根据条件过滤事件
- -since:从指定的时间戳后显示所有事件
# 显示docker 2016年7月1日后的所有事件。
docker events --since="1467302400"
docker 引擎命令
# 查看docker:信息、版本、帮助命令
docker info
docker version
docker --help
docker 具体指令 --help
# 启动、停止、重启、查看状态
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
# 设置开机启动
systemctl enable docker