【Docker】知识四

一、容器核心操作(日常用得最多)

1. docker run:创建并启动容器(核心命令)

语法:docker run [选项] 镜像[:标签] [容器内执行命令]核心选项:

-d:后台守护式运行,终端不阻塞

-it:交互式终端,适合调试容器

--name:指定容器名称,替代随机生成名

-p 宿主机端口:容器端口:端口映射,外部访问容器服务

-v 宿主机路径:容器路径[:权限]:挂载目录 / 数据卷,实现数据持久化

--rm:容器停止后自动删除,适合临时任务

示例:

bash 复制代码
# 后台启动Nginx,映射80端口到宿主机8080,命名为nginx-web

docker run -d -p 8080:80 --name nginx-web nginx:latest



# 交互式启动Ubuntu,进入bash,退出即删除容器

docker run -it --rm ubuntu:22.04 /bin/bash



# 启动MySQL,挂载数据卷持久化数据,设置root密码

docker run -d -p 3306:3306 --name mysql-db \

  -v mysql-data:/var/lib/mysql \

  -e MYSQL_ROOT_PASSWORD=123456 \

  mysql:8.0

使用要点:本地无镜像时会自动拉取;默认命令为镜像的CMD,可手动覆盖(如/bin/bash)。

2. docker ps:查看容器状态

语法:docker ps [选项]核心选项:

-a:显示所有容器(含已停止)

-l:显示最近创建的容器

-q:仅输出容器 ID,用于批量操作

--filter "status=exited":筛选已停止的容器

示例:

bash 复制代码
# 查看所有运行中的容器

docker ps



# 查看所有容器(含停止),快速定位已退出容器

docker ps -a



# 仅获取所有容器ID,用于批量删除/停止

docker ps -aq

使用要点:STATUS字段关键:Up xxx(运行中)、Exited (0)(正常退出)、Exited (1)(异常退出)。

3. docker exec:进入运行中的容器(调试必备)

语法:docker exec [选项] 容器名/ID 执行命令核心选项:

-it:交互式进入终端,必选

示例:

bash 复制代码
# 进入nginx-web容器,操作bash终端

docker exec -it nginx-web /bin/bash



# 容器内执行单条命令,无需进入终端(查看Nginx配置)

docker exec nginx-web cat /etc/nginx/nginx.conf

使用要点:退出终端不影响容器运行;区别于docker attach,后者退出会终止容器。

4. 容器启停与删除

(1)docker stop/kill:停止容器

语法:docker stop/kill 容器名/ID区别:stop优雅停止(发SIGTERM,允许收尾),kill强制停止(发SIGKILL,立即终止)

示例:

bash 复制代码
# 优雅停止nginx-web

docker stop nginx-web



# 强制停止所有运行中的容器

docker kill $(docker ps -q)
(2)docker rm:删除容器

语法:docker rm [选项] 容器名/ID核心选项:

-f:强制删除运行中的容器

-v:删除容器关联的匿名数据卷

示例:

bash 复制代码
# 删除已停止的nginx-web容器

docker rm nginx-web



# 强制删除运行中的容器

docker rm -f nginx-web



# 批量删除所有已停止的容器

docker rm $(docker ps -aqf "status=exited")

5. docker logs:查看容器日志(排障核心)

语法:docker logs [选项] 容器名/ID核心选项:

• -f:实时跟踪日志,类似tail -f

• -t:显示日志时间戳

• --tail N:仅显示最后 N 行日志

示例:

bash 复制代码
# 查看nginx-web完整日志

docker logs nginx-web



# 实时跟踪日志并显示时间戳,排查运行问题

docker logs -ft nginx-web



# 仅查看最后100行日志

docker logs --tail 100 nginx-web

二、镜像全生命周期管理

1. docker pull:拉取镜像

语法:docker pull 镜像[:标签]

示例:

bash 复制代码
# 拉取官方最新版Nginx

docker pull nginx



# 拉取指定版本Python(轻量版,体积更小)

docker pull python:3.10-slim

2. docker images:查看本地镜像

语法:docker images [选项] [镜像名]核心选项:

-q:仅输出镜像 ID

--filter "dangling=true":筛选悬空镜像(无标签、无容器引用)

示例:

bash 复制代码
# 查看所有本地镜像

docker images



# 查看所有悬空镜像(可清理释放空间)

docker images -f dangling=true



# 仅获取镜像ID,用于批量删除

docker images -q

3. docker rmi:删除本地镜像

语法:docker rmi [选项] 镜像名/ID核心选项:

-f:强制删除,即使镜像被容器引用

示例:

bash 复制代码
# 删除指定版本的Ubuntu镜像

docker rmi ubuntu:22.04



# 批量删除所有悬空镜像

docker rmi $(docker images -qf dangling=true)



# 强制删除被容器引用的镜像(先删容器再删镜像更安全)

docker rmi -f nginx:latest

4. docker build:基于 Dockerfile 构建自定义镜像

语法:docker build [选项] 构建上下文路径核心选项:

-t 镜像名:标签:指定镜像名称和版本,必选

-f:指定非默认名称的 Dockerfile(如-f Dockerfile.prod)

示例:

bash 复制代码
# 基于当前目录Dockerfile,构建名为my-app:v1的镜像

docker build -t my-app:v1 .



# 使用指定路径的Dockerfile构建

docker build -t my-app:v2 -f ./docker/prod.Dockerfile .

使用要点:上下文路径(.)是 Docker 可访问的文件目录,无关文件可通过.dockerignore排除,提升构建速度。

5. 镜像标签与推送

(1)docker tag:为镜像打标签

语法:docker tag 源镜像 目标镜像

示例:

bash 复制代码
# 给本地镜像打标签,适配私有仓库推送

docker tag my-app:v1 harbor.example.com/my-app:v1
(2)docker push:推送镜像到仓库

语法:docker push 镜像名:标签

示例:

bash 复制代码
# 推送镜像到私有仓库(需先登录)

docker push harbor.example.com/my-app:v1
(3)docker volume ls/rm/prune:管理数据卷

示例:

bash 复制代码
# 查看所有数据卷

docker volume ls



# 删除未被使用的数据卷

docker volume rm mysql-data



# 批量清理所有无用数据卷(强制,无需确认)

docker volume prune -f

2. 挂载数据卷(核心用法)

两种挂载方式:

1.匿名 / 具名卷挂载:-v 卷名:容器路径,推荐用于持久化数据(如 MySQL、Redis)

2.宿主机目录挂载:-v 宿主机绝对路径:容器路径,推荐用于代码、配置文件映射

示例:

bash 复制代码
# 具名卷挂载MySQL数据卷,实现数据持久化

docker run -d -v mysql-data:/var/lib/mysql --name mysql-db mysql:8.0



# 宿主机目录挂载,本地代码实时同步到容器

docker run -d -p 8080:80 -v ./app:/usr/share/nginx/html --name nginx-web nginx

四、网络管理(容器间通信)

1. docker network create:创建自定义网络

语法:docker network create [选项] 网络名核心选项:--driver bridge(默认桥接网络,容器间可通过名称互通)

示例:

bash 复制代码
# 创建名为app-net的桥接网络,用于业务容器互联

docker network create --driver bridge app-net

2. 网络关联与查看

(1)docker network ls/connect:管理网络

示例:

bash 复制代码
# 查看所有Docker网络

docker network ls



# 将容器加入自定义网络(实现容器间通信)

docker network connect app-net nginx-web

docker network connect app-net mysql-db
(2)docker network rm:删除网络

示例:

bash 复制代码
# 删除未被使用的自定义网络

docker network rm app-net

使用要点:同一自定义网络内的容器,无需端口映射即可通过容器名直接访问。

五、系统运维与实用命令

1. 系统信息查看

示例:

bash 复制代码
# 查看Docker版本(客户端+服务端)

docker version



# 查看Docker系统整体信息(存储驱动、镜像加速器、容器数等)

docker info



# 实时查看容器资源占用(CPU、内存、网络IO)

docker stats

2. 资源清理(释放磁盘空间)

语法:docker system prune [选项]核心选项:

-a:清理所有无用镜像(含无标签镜像)

--volumes:同时清理无用数据卷

示例:

bash 复制代码
# 一键清理停止容器、无用网络、悬空镜像(安全常用)

docker system prune -f



# 深度清理,含无用镜像和数据卷(谨慎使用,避免误删数据)

docker system prune -af --volumes

3. 其他实用命令

(1)docker cp:容器与宿主机互传文件

示例:

bash 复制代码
# 从容器复制日志到宿主机

docker cp nginx-web:/var/log/nginx/access.log ./



# 从宿主机复制配置文件到容器

docker cp ./nginx.conf nginx-web:/etc/nginx/conf.d/
(2)docker inspect:查看详细元数据

示例:

bash 复制代码
# 查看容器详细信息(IP、挂载、端口、环境变量等)

docker inspect nginx-web



# 查看镜像构建历史与层信息

docker inspect nginx:latest

核心总结

容器操作:run(核心参数-d/-p/-v/--name)、exec、logs是日常高频,优先掌握;

镜像管理:pull/build/push覆盖全生命周期,prune定期清理冗余镜像节省空间;

数据持久化:优先用具名数据卷,避免宿主机目录挂载的权限与跨平台问题;

容器互联:自定义网络替代默认桥接网络,提升容器间通信安全性与便捷性。

所有命令均可通过docker 命令 --help查看完整参数,根据场景灵活调整即可。

相关推荐
小志biubiu1 小时前
Linux_进程概念(A)-进程部分【Ubuntu】
linux·运维·服务器·ubuntu·操作系统·进程
普通网友1 小时前
Ubuntu 入门及安装全指南
linux·运维·ubuntu
wei_shuo1 小时前
OpenHarmony Linux 命令行工具适配实战:基于 Cursor × WSL 的 tree 2.2.1 交叉编译与 HNP 打包全流程指南
linux·openharmony·tree
冷雨夜中漫步2 小时前
DockerDesktop打包docker镜像时报错
运维·docker·容器
xlp666hub2 小时前
你对 argc 和 argv 的理解有多深?
linux
xdpcxq10292 小时前
嵌入式Linux手动交叉编译
linux·运维·服务器
Web极客码2 小时前
WordPress 被重定向到垃圾站的排查全过程
运维·服务器·网络·wordpress
m0_576116412 小时前
kubectl:k8s集群管理命令和Node节点
docker·容器·kubernetes
ideal-cs2 小时前
总结:Nginx配置文件案例说明
java·运维·nginx·nginx配置文件