【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管理多容器应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值