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

发布时间:2026/6/29 18:53:23
【云原生与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\--memory512m\--cpus1\--restartunless-stopped\myapp:1.0# 查看运行中的容器dockerpsdockerps-a# 包含已停止的# 进入容器dockerexec-itmyappbash# 查看日志dockerlogs-f--tail100myapp# 查看容器资源使用dockerstats myapp# 复制文件dockercpmyapp:/app/config.yaml ./config.yaml# 停止/删除dockerstop myappdockerrmmyapp五、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.8services:app:build:.ports:-8080:8000environment:-DB_HOSTdb-REDIS_HOSTredisdepends_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的三位一体——镜像负责打包容器负责运行网络负责通信。掌握这三点容器化应用的日常运维没有任何问题。