Docker核心命令与数据持久化完全指南

文章概览

本文全面介绍Docker的核心使用技巧,涵盖镜像管理、容器操作、数据持久化等关键概念。

一、Docker命令体系解析

1.1 Docker命令结构

Docker命令行工具提供了完整的容器生命周期管理能力。执行简单的docker命令即可查看所有可用命令列表:

bash 复制代码
docker

建议的学习路径:镜像管理命令 → 容器管理命令 → 数据卷与网络命令,这样的顺序符合实际使用流程。

1.2 镜像管理核心命令

1.2.1 查看本地镜像
bash 复制代码
docker images

输出包含以下关键信息:

  • Repository:镜像仓库名称

  • Tag:镜像标签(默认latest)

  • Image ID:唯一镜像标识符

  • Created:创建时间

  • Size:镜像大小

1.2.2 搜索镜像
bash 复制代码
docker search <镜像名>

在Docker Hub中搜索镜像,返回结果包含:

  • 仓库名和描述

  • 官方构建标识(OFFICIAL)

  • 自动构建状态

  • 点赞数(STARS)

1.2.3 下载镜像
bash 复制代码
# 下载特定版本
docker pull nginx:1.21

# 下载最新版(默认)
docker pull nginx

版本管理建议 :生产环境务必指定具体版本,避免因latest标签更新导致的不兼容问题。

1.2.4 删除镜像
bash 复制代码
# 删除指定镜像
docker rmi nginx:1.21

# 强制删除(即使有容器使用)
docker rmi -f nginx

二、容器管理实战指南

2.1 容器创建与常用选项

基础创建命令
bash 复制代码
docker run [选项] 镜像名 [命令]
核心选项详解
  1. 后台运行模式

    bash 复制代码
    docker run -d nginx

    -d参数让容器在后台运行,避免终端关闭导致容器停止。

  2. 自定义容器名称

    bash 复制代码
    docker run -d --name=nginx01 nginx

    为容器指定有意义的名称,便于后续管理。

  3. 端口映射

    bash 复制代码
    docker run -d -p 8080:80 nginx

    将宿主机的8080端口映射到容器的80端口,实现外部访问。

  4. 完整示例

    bash 复制代码
    docker run -d --name=nginx01 -p 80:80 nginx:latest

2.2 容器状态监控与管理

查看容器状态
bash 复制代码
# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a
容器详细信息查看
bash 复制代码
# 查看容器完整配置
docker inspect nginx01

# 查看特定信息
docker inspect nginx01 | grep IPAddress
进入容器内部
bash 复制代码
# 交互式进入容器
docker exec -it nginx01 /bin/bash

# 执行单条命令
docker exec nginx01 ls /etc/nginx

2.3 容器生命周期管理

启停操作
bash 复制代码
# 停止容器(优雅停止)
docker stop nginx01

# 启动已停止的容器
docker start nginx01

# 强制停止容器
docker kill nginx01

# 重启容器
docker restart nginx01
删除容器
bash 复制代码
# 删除已停止的容器
docker rm nginx01

# 强制删除运行中的容器
docker rm -f nginx01
自启动配置
bash 复制代码
# 创建时设置自启动
docker run -d --restart=always --name=nginx01 nginx

# 更新已有容器的自启动策略
docker update --restart=always nginx01

2.4 容器内部操作

文件拷贝
bash 复制代码
# 从容器复制到宿主机
docker cp nginx01:/etc/nginx/nginx.conf /opt/nginx/

# 从宿主机复制到容器
docker cp /opt/nginx/index.html nginx01:/usr/share/nginx/html/
日志查看
bash 复制代码
# 查看容器日志
docker logs nginx01

# 实时查看日志
docker logs -f nginx01

# 查看最后N行日志
docker logs --tail 100 nginx01

三、Docker容器数据卷详解

3.1 为什么需要数据卷?

容器在设计上具有以下限制:

  1. 数据易失性:容器停止或删除时,内部数据全部丢失

  2. 文件交换困难:容器与宿主机之间无法直接交换文件

  3. 容器隔离:不同容器之间无法直接共享数据

3.2 数据卷解决方案

数据卷(Volume)是宿主机上的目录或文件,通过挂载方式与容器内部目录建立关联,实现:

  • 数据持久化存储

  • 主机与容器间数据共享

  • 容器间数据共享

3.3 数据卷基本用法

挂载语法
bash 复制代码
docker run -v 宿主机目录:容器目录 镜像名

重要规则

  • 必须使用绝对路径

  • 宿主机目录不存在时会自动创建

  • 首次挂载空目录会覆盖容器目标目录内容

四、实战:应用部署与数据持久化

4.1 MySQL部署实战

步骤1:准备数据卷目录
bash 复制代码
# 创建目录结构
mkdir -p /opt/mysql/{conf,data,logs}
步骤2:下载镜像
bash 复制代码
docker pull mysql:5.7
步骤3:临时启动容器并拷贝配置
bash 复制代码
# 临时启动容器
docker run -d --name=mysql_temp mysql:5.7

# 拷贝配置文件
docker cp mysql_temp:/etc/mysql/ /opt/mysql/conf/

# 删除临时容器
docker rm -f mysql_temp
步骤4:正式启动MySQL容器
bash 复制代码
docker run -d \
  --name=mysql01 \
  -p 3306:3306 \
  -v /opt/mysql/conf:/etc/mysql \
  -v /opt/mysql/data:/var/lib/mysql \
  -v /opt/mysql/logs:/var/log/mysql \
  -e MYSQL_ROOT_PASSWORD=yourpassword \
  mysql:5.7

4.2 Nginx部署实战

目录准备
bash 复制代码
mkdir -p /opt/nginx/{conf,html,logs}
配置文件处理
bash 复制代码
# 启动临时容器
docker run -d --name=nginx_temp nginx

# 拷贝配置文件
docker cp nginx_temp:/etc/nginx/ /opt/nginx/conf/

# 检查软链接
ls -la /opt/nginx/conf/nginx/modules
# 如果软链接失效,重建
ln -sf /usr/lib/nginx/modules /opt/nginx/conf/nginx/modules

# 清理临时容器
docker rm -f nginx_temp
创建测试页面
bash 复制代码
echo "hello nginx" > /opt/nginx/html/index.html
启动Nginx容器
bash 复制代码
docker run -d \
  --name=nginx01 \
  -p 80:80 \
  -v /opt/nginx/conf:/etc/nginx \
  -v /opt/nginx/html:/usr/share/nginx/html \
  -v /opt/nginx/logs:/var/log/nginx \
  nginx
验证部署

访问 http://宿主机IP ,查看是否显示"hello nginx",日志文件位于/opt/nginx/logs/access.log

4.3 Tomcat部署实战

准备数据卷
bash 复制代码
mkdir -p /opt/tomcat
docker run -d --name=tomcat_temp tomcat:9.0
docker cp tomcat_temp:/usr/local/tomcat/ /opt/tomcat/
docker rm -f tomcat_temp
启动Tomcat容器
bash 复制代码
docker run -d \
  --name=tomcat01 \
  -p 8080:8080 \
  -v /opt/tomcat:/usr/local/tomcat \
  tomcat:9.0

五、最佳实践与注意事项

5.1 安全建议

  1. 避免使用root用户:在容器内使用非root用户运行应用

  2. 定期更新镜像:确保使用最新的安全补丁

  3. 限制资源使用:设置CPU和内存限制

    bash 复制代码
    docker run -d --memory=512m --cpus=1.5 nginx

5.2 性能优化

  1. 使用.dockerignore文件:减少构建上下文大小

  2. 合理使用数据卷:避免频繁的I/O操作影响性能

  3. 多阶段构建:减小最终镜像体积

5.3 常见问题解决

端口冲突
bash 复制代码
# 错误:端口已被占用
docker: Error response from daemon: Port is already allocated.

# 解决方案:更换端口
docker run -d -p 81:80 nginx
容器无法启动
bash 复制代码
# 查看容器日志
docker logs 容器名

# 交互式调试
docker run -it --rm 镜像名 sh

六、总结

通过本文的学习,你应该已经掌握了:

  1. Docker核心命令:镜像管理、容器操作、日志查看

  2. 数据持久化方案:数据卷的配置和使用

  3. 常见应用部署:MySQL、Nginx、Tomcat的容器化部署

  4. 最佳实践:安全性、性能和故障排查

Docker的强大之处在于其简洁性和一致性。掌握这些基础命令和概念后,你将能够轻松应对大多数的容器化部署场景。记住,实践是最好的学习方式,多动手尝试,遇到问题查阅官方文档,你的Docker技能会不断提升。

相关推荐
阿里云云原生2 小时前
UModel 查询:阿里云如何通过图模型实现企业级可观测数据的统一建模与分析
阿里云·云原生·云计算·可观测·umodel
张人大 Renda Zhang2 小时前
Spring Cloud / Dubbo 是 2 楼,Kubernetes 是 1 楼,Service Mesh 是地下室:Java 微服务的“三层楼模型”
spring boot·spring cloud·云原生·架构·kubernetes·dubbo·service_mesh
会飞的小蛮猪2 小时前
Kubespray在线部署K8s
云原生·kubernetes·云计算
退役小学生呀2 小时前
二十六、K8s集群备份恢复
linux·云原生·容器·kubernetes·k8s
A-刘晨阳3 小时前
【云原生】Kubernetes 指定节点部署 Pod
运维·云原生·容器·kubernetes·云计算
AI云原生3 小时前
《开箱即用的高性能:openEuler 默认配置下的 Web 服务性能评测》
运维·前端·docker·云原生·开源·开源软件·开源协议
汪碧康3 小时前
【k8s-1.34.2安装部署】一.系统初始化及k8s集群规划
云原生·容器·kubernetes