当前位置: 首页 > java >正文

【Docker 新手入门指南】第六章:容器操作

【Docker 新手入门指南】系列文章目录


  • 【Docker 新手入门指南】第一章:前言
  • 【Docker 新手入门指南】第二章:架构概述
  • 【Docker 新手入门指南】第三章:快速安装
  • 【Docker 新手入门指南】第四章:镜像加速
  • 【Docker 新手入门指南】第五章:Hello Word
  • 【Docker 新手入门指南】第六章:容器操作

文章目录

  • 【Docker 新手入门指南】第六章:容器操作
    • 一、🔍 核心概念速览
    • 二、🚀 容器操作全流程
    • 三、⚠️ 常见问题与解决方案
    • 四、🎯 典型场景实操示例
    • 五、📚 效率提升工具


【Docker 新手入门指南】第六章:容器操作

轻量级、可移植、一致性——容器化应用的核心优势,通过以下操作快速掌握容器全生命周期管理。

一、🔍 核心概念速览

概念描述类比
镜像(Image)只读模板,包含应用环境(代码+依赖+系统库)面向对象中的「类」
容器(Container)镜像的运行实例,动态可读写面向对象中的「对象」
核心特性隔离性(Namespace)、资源限制(Cgroups)、轻量性(共享内核)

二、🚀 容器操作全流程

1. 获取镜像

# 拉取指定版本镜像(避免使用latest,推荐固定版本)  
docker pull nginx:1.25-alpine  
  • 技巧:使用 docker search --filter=stars=5 查找高星镜像

2. 启动容器的 3 种模式

  • ▶ 交互式模式(调试场景)
docker run -it --rm \  -v $(pwd):/app \        # 挂载主机目录到容器/app(代码实时同步)  -w /app \               # 设置容器内工作目录  node:20 bash  

关键参数-it(交互+终端)、--rm(退出自动删除容器)

  • ▶ 后台服务模式(生产环境)
docker run -d \  --name=web-server \     # 自定义容器名(便于管理)  -p 8080:80 \           # 端口映射(主机端口:容器端口)  -v nginx-logs:/var/log/nginx \  # 命名卷持久化日志  -e TZ=Asia/Shanghai \   # 注入环境变量(时区/配置)  --restart=always \      # 故障自动重启(生产必备)  nginx:alpine  

最佳实践:避免使用 --privileged 特权模式,最小化容器权限

  • ▶ 一次性任务模式(脚本执行)
docker run --rm alpine echo "Hello Docker!"  

3. 容器生命周期管理

操作命令示例生产场景用途
查看运行中容器docker psdocker ps -q(仅输出ID)批量操作前过滤
进入容器docker execdocker exec -it web-server bash调试日志/临时配置
停止容器docker stopdocker stop -t 30 web-server(等待30秒优雅关闭)版本升级前停机
删除容器docker rmdocker rm $(docker ps -aq -f status=exited)(删除所有已停止容器)释放磁盘空间
监控资源docker statsdocker stats --no-stream(实时统计)性能调优

4. 数据持久化方案

  • ▶ 方案1:绑定挂载(开发场景)
docker run -v $(pwd)/data:/app/data ubuntu  

特点:直接映射主机目录,灵活性高但依赖主机路径

  • ▶ 方案2:命名卷(生产推荐)
docker volume create my-vol  
docker run -v my-vol:/app/data ubuntu  

优势:Docker 自动管理存储路径,支持跨容器共享

5. 网络配置

  • ▶ 单主机容器通信(桥接网络)
# 创建自定义网络  
docker network create app-net  
# 启动容器并加入网络  
docker run -d --network=app-net --name=web nginx  
docker run -d --network=app-net --name=db mysql  

通信方式:容器可通过服务名(如 db)直接访问

  • ▶ 端口映射规则
docker run -p 80:8080 nginx  # 主机80端口 → 容器8080端口  

注意-P(随机映射)用于临时环境,生产环境需显式指定端口

三、⚠️ 常见问题与解决方案

问题1:权限不足(Permission Denied)

# 错误提示  
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock# 解决方法 1:使用 sudo  在 docker 命令前加上 sudo
sudo docker ps#解决方法 2:将用户添加到 docker 用户组
# 添加 docker 用户组
sudo groupadd docker     
# 将当前用户加入到 docker 用户组
sudo gpasswd -a $USER docker
# 更新用户组
newgrp docker
# 测试命令
docker ps

问题2:容器退出后数据丢失

  • 原因:未使用数据持久化(容器层是临时的)
  • 解决
    docker run -v my-vol:/data ubuntu  # 使用命名卷  
    

问题3:端口被占用

# 查看端口占用  
sudo lsof -i :8080  
# 强制停止占用进程  
sudo kill $(lsof -t -i :8080)  

四、🎯 典型场景实操示例

案例:部署Python Flask应用

  1. 编写Dockerfile

    FROM python:3.11-slim  
    WORKDIR /app  
    COPY requirements.txt .  
    RUN pip install --no-cache-dir -r requirements.txt  
    COPY . .  
    EXPOSE 5000  
    CMD ["python", "app.py"]  
    
  2. 构建并运行容器

    docker build -t flask-app .  
    docker run -d -p 5000:5000 flask-app  
    

五、📚 效率提升工具

工具功能官网/仓库
PortainerDocker图形化管理面板portainer.io
Dive镜像分层分析工具github.com/wagoid/dive
ctop容器资源监控github.com/bcicen/ctop

通过以上学习,可快速掌握容器从创建到部署的全流程。建议在实践中遵循「最小化镜像体积」和「数据持久化优先」原则,逐步过渡到使用Docker Compose管理多容器应用。

http://www.xdnf.cn/news/7108.html

相关文章:

  • Spring3+Vue3项目中的知识点——JWT
  • 2.2.1
  • 抖音视频下载工具 v1.1 自用分享
  • 26考研——进程与线程_同步和互斥_同步与互斥的基本概念(2)
  • 【深度学习新浪潮】大模型在哪些垂域已经有比较好的落地?
  • 基于labview的声音采集、存储、处理
  • 创业分析平台Web端-三大前端核心语言详解-首页index
  • 如何在 Windows 11 或 10 家庭版上安装 Windows 沙盒
  • 用DeepSeek辅助法律文件起草
  • 整数的定义和带余除法
  • 【爬虫】DrissionPage-7
  • c/c++数据类型转换.
  • Java 线程池性能优化与监控全攻略
  • 【C++】string的使用【下】
  • 基于 Zookeeper 部署 Kafka 集群
  • 拓展运算符与数组解构赋值的区别
  • 牛客网NC276110题解:小红的数组重排
  • NY337NY340美光固态颗粒NC010NC012
  • 46、什么是Windows服务,它的⽣命周期与标准的EXE程序有什么不同?
  • 网络编程-select(二)
  • SQL脚本规范
  • STM32H562----------启动时钟分析
  • C#中的成员常量:编译时的静态魔法
  • 静态网站部署:如何通过GitHub免费部署一个静态网站
  • 【提高+/省选−】洛谷P1495 —— 【模板】中国剩余定理(CRT)/ 曹冲养猪
  • 【聚类】 K-means
  • 前端获取用户的公网 IP 地址
  • 08 Nginx模块
  • AI:OpenAI论坛分享—《AI重塑未来:技术、经济与战略》
  • 二:操作系统之进程通信(IPC)