Docker基础命令速查指南:从入门到实践

Docker是什么?

“Docker”一词指代了多个概念,包括开源社区项目、开源项目使用的工具、主导支持此类项目的公司 Docker Inc.,以及该公司官方支持的工具。这些技术和公司的同名可能会造成混淆。

以下简要说明 Docker 以便区分:

  • IT 软件”Docker”是支持创建和使用 Linux® 容器的容器化技术。
  • 开源 Docker 社区致力于改进这类技术,并免费提供给所有用户,使之获益。
  • Docker Inc. 公司凭借 Docker 社区产品起家,主要负责提升社区版本的安全性,并将技术进步与广大技术社区分享。此外,它还专门对这些技术产品进行完善和安全固化,以服务于企业客户。
  • 借助 Docker,您可将容器当做轻巧、模块化的虚拟机来使用。同时,您还将获得高度灵活性,实现对容器的高效创建、部署及复制,并在环境之间迁移它们,从而有助于您针对云来优化应用。

镜像管理

搜索镜像

1
docker search 镜像的名字

拉取镜像

1
docker pull 镜像的名字

查看本地镜像

1
2
3
4
5
docker images 
docker image ls
docker images -q 只列出镜像的id
docker images --format “{{.ID}}--{{.Repository}}” 格式化显示镜像
docker images --format “ table {{.ID}}\t{{.Repository}}\t{{.Tag}}" 以表格形式显示

删除镜像

1
2
3
docker rmi 镜像id
批量删除镜像
docker rmi `docker images -qa`

导入镜像

1
2
3
4
#导入打包后的镜像
docker image load -i /opt/centos7.8.2003.tar
#导入打包压缩后的镜像
zstd -dc /opt/centos-stream9.tar.zst | docker image load

导出镜像

1
2
3
4
5
6
#打包
docker image save centos-stream9:cs9 > /opt/centos-stream9.tar
#打包并压缩
docker image save centos-stream9:cs9 | zstd -o /opt/centos-stream9.tar.zst

#注意:打包时会占用临时空间

查看镜像详细信息

1
docker image inspect 镜像id

查看一个镜像的历史

1
2
3
4
5
6
docker history [OPTIONS] IMAGE

#OPTIONS
--no-trunc:显示完整命令(默认会截断长命令)
-q:只显示镜像 ID
--format:自定义输出格式(比如只关心大小)

容器管理

启动容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
docker run  -p 85:80 nginx   //容器的端口映射85是宿主机的端口,80是容器的端口
docker run -p 0.0.0.0:85:80 nginx #只做ipv4地址端口映射
docker run -P nginx 随机端口映射
docker run - it --rm -d --name test --ip 192.168.159.152 容器id/名字 bash/sh
-i 交互式命令操作
-t 开启一个终端
bash 在进入容器后执行的命令 //其实就相当于shell解释器
--rm 容器挂了后自动删除容器记录
-d 在后台运行
--name test 给容器起一个名字叫test
--restart=always //容器挂了后自动重启
--net //网桥名字
--ip //分配容器的ip
--cups=0.5 //限制cpu的使用率
--privileged=true //表示启用容器的超级权限,启用超级权限的时候需要以/usr/sbin/init命令启动不然超级权限不会生效

注意事项:

  • docker run 等于创建加启动,如果镜像不存在在本地则会去下载镜像

  • 容器内的进程必须处于前台运行状态,否则容器会直接退出

  • 如果容器内,什么事也不做,容器也会挂掉,容器内,必须有一个进程在前台运行,//例如docker run nginx 容器会直接挂掉

进入容器

1
docker exec -it 容器id bash   //进入正在运行的容器

查看运行的容器

1
docker ps

查看停止的容器

1
docker ps -a

容器的重启、停止、启动

1
docker restart/stop/start 容器id

查看容器的详细信息

1
docker container inspect 容器id

查看容器端口转发情况

1
docker port 容器id

查看容器内进程信息

1
docker top 容器id

查看容器内资源

1
docker stats 容器id

查看容器的具体信息

1
docker inspecet 容器id

传输本地文件到容器中

1
docker cp 本地文件路径 容器ID:容器中的存储路径

传输容器中的文件到本地

1
docker cp 容器ID:容器中的路径 本地存储路径

退出容器

1
exit

只删除容器,volume保留

1
2
3
docker rm 容器id
#强制删除容器
docker rm -f 容器id

阻塞容器

1
2
#用于阻塞docker容器,并在容器退出是打印退出码,当容器不在运行的时候,直接输出0;可以用来监控容器是否正常退出
docke wait 容器ID/容器名字

删除容器,同时删除volume

1
2
docker rm -v 容器ID 
docker rm --volumes 容器ID

查看容器资源使用情况

1
docker stats <container_name_or_id>

容器打包成镜像

1
2
3
4
5
6
7
8
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

docker commit -a 'LML' -m 'This is a container image' 容器ID 容器打包后的镜像名字:标签
Option 功能
-a 指定新镜像作者
-c 使用 Dockerfile 指令来创建镜像
-m 提交生成镜像的说明信息
-p 在 commit 时,将容器暂停|

容器打包成tar包

1
2
3
docker save -o tar包名称.tar 待打包镜像名称:待打包镜像版本
演示:
docker save -o mysql-lml-docker.tar mysql-lml-docker:v1.0

tar包载入镜像

1
2
3
docker load [OPTIONS] tar包名称.tar
演示:
docker load -i mysql-lml-docker.tar

日志管理

查看容器日志

1
2
3
4
所有日志
docker logs 容器id
相当于tail -f,实时的刷新日志
docker logs -f 容器id

网络管理

列出所有网桥

1
docker network ls

查看网络信息

1
docker network inspect 网络类型

创建新的网桥

1
docker network create --subnet=192.168.159.0/24 NetTest

删除创建的网桥

1
docker network rm net_name

将容器加入自建网络中

1
docker network connect 网络名称 容器名称

将容器退出自建网络中

1
docker network disconnect 网络名称 容器名称

命名卷管理

列出所有的volume

1
docker volume ls

删除未使用的volume

1
docker volume prune

查看volume信息

1
docker volume inspect 命名卷名字

删除volume

1
docker volume rm 命名卷的卷名

创建volume

1
docker volume create 命名卷名字

进阶命令

查看所有的容器和镜像大小

1
docker system df

回收悬空的镜像

1
docker image prune -a

删除所有已停用的容器

1
docker container prune

回收孤儿卷(无容器使用)

1
docker volume prune

批量删除(网络,数据卷,镜像…)

1
2
3
docker system prune        # 仅中间层 + 停止容器
docker system prune -a # 再加“无用”镜像
docker system prune -a --volumes # 连无用卷一起

启停全部容器

1
docker stop/start $(docker ps -aq -f "status=running/exited/created/paused")