【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查看完整参数,根据场景灵活调整即可。

相关推荐
Cosolar10 小时前
LlamaIndex索引类型全解析:原理与实战指南
运维·服务器
方便面不加香菜12 小时前
Linux--基础IO(一)
linux·运维·服务器
鼎讯信通15 小时前
风电光缆运维提质增效:G-4000A 光缆故障追踪仪破解风场巡检难题
运维·网络·数据库
三十..15 小时前
MySQL 从入门到高可用架构实战精要
运维·数据库·mysql
杨浦老苏15 小时前
开源多用户图书追踪系统LibrisLog
docker·群晖·收藏管理
跨境数据猎手16 小时前
大数据在电商行业的应用
大数据·运维·爬虫
linyanRPA17 小时前
影刀RPA店群自动化实战:多店铺活动自动报名与促销管理架构设计
运维·自动化·办公自动化·rpa·python脚本·爬虫自动化·店群自动化
mounter62517 小时前
现代 Linux 内存管理的演进与变革:从传统 LRU 到多代架构 MGLRU
linux·服务器·kernel
会Tk矩阵群控的小木17 小时前
安卓群控系统对于游戏工作室实战教程
android·运维·游戏·adb·开源软件·个人开发
赵渝强老师17 小时前
【赵渝强老师】Kubernetes(K8s)中的金丝雀升级
linux·docker·云原生·容器·kubernetes