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

【云原生与DevOps】01-Docker从入门到实践:镜像、容器、网络三位一体

专栏:云原生 & DevOps
难度:入门
标签:Docker容器镜像Docker网络云原生


前言

容器化已经是现代运维的基础技能。本文系统梳理Docker的三大核心——镜像、容器、网络,让你建立完整的知识框架。


一、Docker 核心概念

镜像(Image) → 容器(Container) | | 只读层叠加 运行时实例 (Dockerfile构建) (可读写层)
  • 镜像:一个只读的模板,包含运行应用所需的所有内容
  • 容器:镜像的运行实例,有自己的进程、网络和文件系统
  • Registry:镜像仓库(Docker Hub、Harbor、阿里云ACR)

二、镜像操作

# 拉取镜像dockerpull nginx:1.24-alpine# 查看本地镜像dockerimages# 构建镜像dockerbuild-tmyapp:1.0.# 给镜像打标签dockertag myapp:1.0 registry.example.com/myapp:1.0# 推送镜像dockerpush registry.example.com/myapp:1.0# 查看镜像层信息dockerhistorynginx:1.24-alpine# 删除镜像dockerrmi nginx:1.24-alpine# 清理所有未使用的镜像dockerimage prune-a

三、Dockerfile 最佳实践

# 使用精简基础镜像 FROM python:3.11-slim # 合并RUN指令减少层数 RUN apt-get update && apt-get install -y \ curl \ && rm -rf /var/lib/apt/lists/* # 先复制依赖文件,充分利用构建缓存 WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 再复制源码(改代码不用重装依赖) COPY . . # 用非root用户运行 RUN useradd -m appuser USER appuser # 暴露端口 EXPOSE 8000 # 使用exec格式(可接收信号) CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0"]

四、容器操作

# 运行容器dockerrun-d\--namemyapp\-p8080:8000\-v/data/app:/app/data\--memory=512m\--cpus=1\--restartunless-stopped\myapp:1.0# 查看运行中的容器dockerpsdockerps-a# 包含已停止的# 进入容器dockerexec-itmyappbash# 查看日志dockerlogs-f--tail=100myapp# 查看容器资源使用dockerstats myapp# 复制文件dockercpmyapp:/app/config.yaml ./config.yaml# 停止/删除dockerstop myapp&&dockerrmmyapp

五、Docker 网络

# 查看网络dockernetworkls# 创建自定义网络(推荐,容器间可用名称通信)dockernetwork create--driverbridge mynet# 将容器加入网络dockerrun-d--namedb--networkmynet postgres:15dockerrun-d--nameapp--networkmynet myapp:1.0# app容器内可以直接用 db 作为主机名访问数据库# psql -h db -U postgres# 查看网络详情dockernetwork inspect mynet

网络类型对比:

类型用途
bridge默认,单机容器互通
host共享宿主机网络栈,性能最好但隔离性差
none无网络,最高安全隔离
overlay跨主机通信(Swarm/K8s使用)

六、Docker Compose(多容器应用)

# docker-compose.ymlversion:'3.8'services:app:build:.ports:-"8080:8000"environment:-DB_HOST=db-REDIS_HOST=redisdepends_on:db:condition:service_healthyrestart:unless-stoppeddb:image:postgres:15-alpinevolumes:-postgres_data:/var/lib/postgresql/dataenvironment:POSTGRES_PASSWORD:secrethealthcheck:test:["CMD","pg_isready","-U","postgres"]interval:10sretries:5redis:image:redis:7-alpinecommand:redis-server--appendonly yesvolumes:-redis_data:/datavolumes:postgres_data:redis_data:
# 启动所有服务dockercompose up-d# 查看服务状态dockercomposeps# 查看日志dockercompose logs-fapp# 停止并删除dockercompose down-v

结语:Docker的三位一体——镜像负责打包,容器负责运行,网络负责通信。掌握这三点,容器化应用的日常运维没有任何问题。

http://www.gsyq.cn/news/1603137.html

相关文章:

  • MSP430FR5969 LaunchPad开发板:FRAM与超低功耗设计实战指南
  • 大模型幻觉怎么治?引用溯源兜底实操
  • Shell 脚本从入门到写出第一个自动化脚本
  • 【WorkBuddy专栏50】代码开发技术体系深度分析——前端、后端、全栈、移动端、数据工程,WB和CODEBUDDY谁更擅长?
  • 第01篇:从一颗芯片看透智能座舱——座舱MCU的“世界观”
  • 基于物联网、时序模型、大模型和智能问数,设备预测性维护【智能体】应用案例
  • Web安全实战:路径遍历漏洞原理、复现与防御指南
  • 基于微信小程序的贵阳市特色农产品交易系统的设计与实现
  • 用 Claude Opus 4.8 辅助故障复盘:从告警日志到可验证 RCA 的一套工作流
  • 年薪73W,AI产品经理面经
  • Steam成就管理器完整指南:如何安全解锁与重置游戏成就
  • OBS-ASIO插件深度解析:专业音频采集的技术实现与架构设计
  • PCIe拓扑探秘:从Root Complex到Switch,构建高效数据通路
  • Codex++安全边界探秘的技术文章大纲
  • 5分钟快速上手:手机号逆向查询QQ号完整指南
  • 从零构建边缘音频终端:基于 ESP32-S3 软硬解耦的全栈闭环实践
  • 写论文的神助攻!全能一键生成论文工具,秒出初稿不费力
  • llamafactory sft微调坑 继续训练 ,为什么 `save_steps: 40` 没有生效,实际 100 步才保存
  • 信息学奥赛经典算法精讲:从“冒泡排序”例题看降序排列的实现与优化
  • 为什么你开了 ChatGPT 会员却觉得不值?真正拉开差距的是使用方法
  • 终极自动化中文字幕下载方案:ChineseSubFinder完整指南
  • 想把语雀、飞书、知识星球资料导入 ima?可以这样做
  • Mode-Step 网格如何拆开工作流边界
  • 将工作流引擎接入 AI 编排平台的实践
  • Python开发实习生指南:简历投递、实习内容与个人项目的本质区别
  • JavaEE安全纵深防御:JNDI注入攻防演进与高版本JDK绕过实战
  • 终极Dify工作流宝库:让AI应用开发像搭积木一样简单
  • AI Agent:从RAG到多智能体
  • Gliding Horse 工具结果压缩体系:如何用“指针”驯服上下文膨胀
  • 自进化的 Agent 记忆层 —— PowerMem 简易操作手册