一、Docker 命令分类

  1. Docker 环境信息
docker [version | info]
  1. 容器生命周期管理
docker [create | exec | run | start | stop | restart | kill | rm | pause | unpause]
  1. 容器操作管理
docker [ps | inspect | top | attach | wait | export | prot | rename | stat]
  1. 容器 rootfs 命令
docker [commit | cp | diff]
  1. 镜像仓库
docker [login | pull | push | search]
  1. 本地镜像管理
docker [build | images | rmi | tag | save | load | import]
  1. 容器资源管理
docker [volume | network]
  1. 系统日志信息
docker [event | history | logs]

二、Docker 镜像相关命令

  1. 镜像拉取
# 拉取最新镜像
docker pull 镜像名
# 拉取指定版本镜像
docker pull 镜像名:版本

Tips:
有些镜像后缀除了包含版本号外还会有其他信息常见的包括:

slim:该标识意味着使用了更好的压缩技术(镜像瘦身),使得镜像包体积更小

alpine:该标识意味着使用了 alpine 的 Linux内核,这个内核的特点就是非常小

  1. 查看本地已有镜像
# 方式一(推荐)
docker images
# 方式二
docker image ls

列名含义:

REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:创建时间
SIZE:镜像大小
3. 镜像备份(镜像导出)

docker save 镜像名:版本号 -o 导出后的文件名.tar

Tips:

如果要导出多个镜像用空格隔开即可
-o 参数表示导出,可用 > 代替
4. 导入本地镜像

docker load -i 导入的文件名

Tips:

-i 参数表示导入,可用 < 代替

  1. 镜像查询(从镜像源)
docker search 镜像名
  1. 查看镜像详细信息
# 查看所有信息
docker inspect 镜像名称:版本
# 查看指定信息
docker inspect -f {{".属性名称"}} 镜像名:版本号

Tips:

查看指定信息时 属性名称 必须与与镜像的属性信息名称大小写相同
属性名称 可通过 查看所有信息 命令的返回结果中看到
7. 查看镜像层信息

docker history 镜像名:版本号

Tips:
该命令结果信息显示不好,了解即可

  1. 镜像改名
docker tag 原镜像名:版本号 新镜像名:版本号
  1. 删除镜像
# 普通删除
docker rmi 镜像名:版本号
# 强制删除
docker rmi -f 镜像名:版本号
# 不删除未带 tag 的父镜像
docker rmi -no-prune 镜像名:版本号
# 删除所有镜像
docker rmi $(docker images -q)

Tips:

删除镜像时也可通过 IMAGE ID 的值删除,而不使用 镜像名:版本号 的方式。但由于 docker 客户端显示的是短 ID 所以 IMAGE ID 有时会重复,进而导致删除失败。所以不建议使用这种方式。
10. 清理临时文件和未被引用的镜像

docker image prune

常用参数:

-a:删除所有没用的镜像,而不仅是临时文件
-f:无需确认,强制删除镜像

三、Docker 容器相关命令

  1. 启动容器
# 以终端交互方式启动容器并在停止后自动删除
docker run -it --rm 镜像名:版本号

常用参数:

-d:后台启动容器,并返回容器 ID
-e:设置环境变量,格式为:-e 变量名=变量值
-h:为容器指定 hostname,格式为:-h 自定义hostname (这里的 hostname 可以近似理解为 Windows 中的用户名)
-i:以交互模式启动容器,通常与 -t连用
-P:经容器内部端口随机映射至宿主机端口*(不推荐)*
-p:绑定容器内部指定端至宿主机指定端口,格式为:宿主机端口:容器内端口
-t:为容器分配一个伪终端,通常与 -i 连用
-v:绑定数据卷,格式为:-v 宿主机绝对路径目录:容器内目录的绝对路径 详见:五-2
--name:为容器指定名称,格式为:--name 自定义容器名
--rm:容器停止后自动删除容器。(与 -d 参数互斥)
2. 查看容器日志

docker logs 容器名称

**Tips:**这里可将容器名称替换为容器 ID,不推荐

常用参数:

-f:动态显示
-tail:列出最后N条日志信息,格式为:-tail 条数
3. 查看已有容器

docker ps 容器名称

列名含义:

CONTAINER ID:容器 ID
IMAGE:使用的镜像
COMMAND:启动容器时使用的命令(容器内部)
CREATED:创建时间
STATUS:容器状态,类型:created:已创建、restarting:重启中、running:运行中、removing:迁移中、paused:暂停、exited、停止、dead:死亡
PORTS:容器端口信息和连接类型(tcp/udp)
NAMES:容器名称
常用参数:

-a:显示所有容器,包括未运行的
-q:只显示容器 ID
4. 删除容器

# 删除指定容器
docker rm 容器名
# 删除所有已停止运行的容器
docker rm $(docker ps -aq)
# 删除所有容器,包括正在运行的(有点骚,不推荐)
docker rm -f $(docker ps -aq)
  1. 创建容器
# 创建一个以终端交互方式启动容器并在停止后自动删除
docker create -it --rm 镜像名:版本号

Tips:

create 命令与 run 命令相似,不同之处在于 create 命令只创建,不运行
create 命令不能使用 -d 参数
不推荐,直接用 run 命令就好了,何必脱了裤子放屁
6. 启动容器

# 启动指定容器
docker start 容器名
# 启动所有容器
docker start $(docker ps -aq)
  1. 停止容器
# 停止指定容器
docker stop 容器名
# 停止所有容器
docker stop $(docker ps -aq)
# 强制停止容器
docker kill 容器名
  1. 重启容器
# 重启指定容器
docker restart 容器名
# 重启所有容器
docker restart $(docker ps -aq)
  1. 进入容器
# 有 bash 命令的 Linux 如:CentOS
docker exec -it 容器名 /bin/bash
# 没有 bash 命令的 Linux 如:alpine
docker exec -it 容器名 sh

Tips:

对于有没有 bash 命令,这点需要进行尝试,如果进入报错或以 bash 进入后按 Tab 无法补全命令,则有可能才容器的系统中没有 bash 命令

常用参数:

-i:以交互方式进入
-t:分配一个伪终端
退出容器:进入容器后想退出直接在命令行敲 exit 命令即可
10. 查看容器信息

docker inspect 容器名称

四、Docker 网络相关命令

  1. 自定义网关
# 查看当前已有网络模式(docker 安装完成后,会自动创建 bridge、host、none 三种网络驱动)
docker network ls
# 创建自定义桥接网关
docker network create 自定义网关名
# 启动容器并指定网关
docker run -itd --name 容器名 --network 网关名 镜像名
# 将运行中的容器绑定至自定义网关
docker network connect 网关名 容器名
# 删除自定义网关
docker network rm 网关名
# 将容器与指定网关断开
docker network disconnect 网关名 容器名
# 查看网络详情
docker network inspect 网关名

说明:这种自定义网关的网络连接方式,可以让多个连接在同一个自定义网关上的容器之间,能够通过容器名进互相访问,而不使用易变的容器内部 IP 地址

# 进入某容器
docker exec -it 容器名 /bin/bash
# 通过容器名连接其他容器
ping 容器名
  1. 设置固定IP
# 1) 创建自定义网关
docker network create --subnet 子网地址/24 --gateway 网关地址 自定义网关名
# 2) 启动容器时设置静态IP
docker run -itd --network 网关名 --ip 静态地址 容器名:版本号

示例:

docker network create --subnet 155.155.0.0/24 --gateway 155.155.0.1 my_bridge
docker run -itd --name nginx -p 80:80 --network my_bridge --ip 155.155.0.99 nginx:1.19.3

五、Docker数据卷

  1. 容器内外文件复制
# 复制容器内的文件至宿主机
docker cp 容器名:容器内文件路径 宿主机目标路径
# 复制宿主机文件至容器内
docker cp 宿主机文件路径 容器名:容器内目标路径

说明:cp 命令既可以复制文件也可以复制目录

  1. 数据卷挂载
# 宿主机数据卷挂载(推荐)
docker run -v 宿主机绝对路径目录:容器内目录的绝对路径 镜像名
# 命名数据卷挂载
docker run -v 数据卷名称:容器内目录的绝对路径 镜像名
# 匿名数据卷挂载
docker run -v 容器内目录的绝对路径 镜像名
# 查看数据卷
docker volume ls
# 查看数据卷信息
docker volume inspect 数据卷名称
# 清理无用数据卷
docker volume prune

Tips:

挂载数据卷时推荐使用 docker run 命令去挂载,这种方式最简单
docker 官网推荐尽量对目录进行挂载而不是文件
宿主机中的目录或文件不需要预先存在,在需要时 docker 会自动创建
如果将宿主机的空目录挂载至容器的非空目录时,docker 会将容器内目录下的文件拷贝至宿主机挂载目录
如果将宿主机的非空目录挂载至容器的目录上时,docker 会将容器内资源隐藏,保留宿主机目录中的资源
3. 数据卷容器

# 创建数据卷容器
docker run -d --name 容器名称 -v 宿主机绝对路径目录:容器内目录的绝对路径 镜像名
# 启动容器
docker run --volumes-frome 数据卷容器名 镜像名

Tips:

数据卷容器没有限制,可以是 CentOS 的容器也可以是 hello-world 的容器
创建后的数据卷容器可以停止状态也可以是运行状态,该容器的运行状态对数据卷容器的功能使用没有影响
创建数据卷容器时容器内目录的绝对路径必须与要使用该数据卷容器的容器内目录的绝对路径相同
有些镜像的容器是不支持数据卷容器功能的,换句话说就是:映射在宿主机上的容器内目录中的资源文件带锁,只允许一个应用读写。例如:MySQL

六、Docker-compose

  1. 官网
    https://github.com/docker/compose

  2. 下载地址
    https://github.com/docker/compose/releases/tag/1.29.2

  3. 安装 docker-compose

# 移动文件
mv /home/sir/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
# 修改权限 开发环境可以授予 777
chmod +x /usr/local/bin/docker-compose
# 检查安装情况
docker-compose -v
# 卸载
rm -rf /usr/local/bin/docker-compose
# 重启
reboot
  1. docker-compose 常用命令
# 前台启动服务
docker-compose up
# 后台启动服务
docker-compose up -d
# 停止服务并删除容器
docker-compose down
# 列出所有运行容器
docker-compose ps
# 查看服务日志
docker-compo logs
# 构建或重新构建服务
docker-compose build
# 运行服务
docker-compose start
# 停止服务
docker-compose stop
# 重启服务
docker-compose restart

Tips:

运行 docker-compose 命令时,必须在 docker-compose.yaml 文件夹内
如果 docker-compose 配置文件名不是 docker-compose.yaml 则需要通过 -f 参数来指定配置文件