跳至主要內容

x.命令集-终极版

Victor Da V约 3098 字

一、镜像仓库

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
# 注意最后面还有一个 空格 和 . 代表当前目录下构建
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