Docker运维核心指南

一、基础概念

三大核心组件

  • 镜像(Image):不可变的模板(含OS+软件+配置)
  • 容器(Container):镜像的运行实例(隔离进程空间)
  • 仓库(Registry):镜像存储中心(Docker Hub / 私有仓库)

关键技术

  • 联合文件系统(OverlayFS)
  • Namespace隔离(PID/Network/Mount)
  • Cgroups资源限制

二、安装部署(Ubuntu示例)

一键安装脚本

下面展示一些 内联代码片
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

配置镜像加速

sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://xxxx.mirror.aliyuncs.com”]
}
EOF
systemctl restart docker

三、高频命令速查

镜像管理

docker image ls --filter “dangling=false” # 显示有效镜像
docker image prune -a --filter “until=24h” # 清理24小时前镜像

容器操作

docker run -d --name myapp --memory 512m -p 8080:80 -v /data:/app/data myimage:tag
docker exec -it myapp bash # 进入运行中容器
docker logs --tail 100 -f myapp # 实时尾部日志

网络配置

docker network create --driver=overlay mynet
docker network inspect mynet

四、Dockerfile优化技巧

多阶段构建示例(减小镜像体积)

FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o app .

FROM alpine:latest
COPY --from=builder /app/app /
CMD ["/app"]

五、生产级实践

安全加固

禁止容器以root运行

RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser

启用Content Trust

export DOCKER_CONTENT_TRUST=1

监控方案

使用cAdvisor+Prometheus

docker run -d --name=cadvisor
–volume=/:/rootfs:ro
–volume=/var/run:/var/run:ro
–publish=8080:8080
google/cadvisor:latest

Ansible运维实战手册

一、架构解析

核心组件
Inventory:主机清单(支持动态获取)
Playbook:声明式编排文件(YAML格式)
Module:原子操作单元(超过3000+内置模块)

二、快速安装

控制节点安装

python3 -m pip install ansible-core
echo “[defaults]” > ansible.cfg
echo “inventory = ./hosts” >> ansible.cfg

配置SSH免密登录

ssh-keygen -t rsa
ssh-copy-id user@target-host

三、Inventory进阶

分组与变量继承

[web_servers]
web[01:10].example.com ansible_port=2222

[web_servers:vars]
ansible_user=deploy

[docker_hosts:children]
web_servers
db_servers

四、Playbook设计模式

  • name: 部署高可用Web集群
    hosts: web_servers
    vars:
    app_version: “v2.3.1”
    tasks:
    • name: 安装Docker
      apt:
      name: docker-ce=5:20.10.73-0ubuntu-focal
      state: present
      when: ansible_os_family == ‘Debian’

    • name: 部署容器
      docker_container:
      name: webapp
      image: “myrepo/webapp:{{ app_version }}”
      ports: “80:8080”
      env:
      NODE_ENV: production

五、高阶技巧

Role结构化

roles/webapp/
├── defaults
│ └── main.yml
├── tasks
│ ├── install.yml
│ └── config.yml
└── templates
└── nginx.conf.j2

Vault加密敏感数据

ansible-vault encrypt group_vars/prod_secret.yml
ansible-playbook --ask-vault-pass site.yml

Docker+Ansible联动方案

  1. 集群部署
  • name: 初始化Docker Swarm集群
    hosts: manager_nodes
    tasks:

    • docker_swarm:
      state: present
      advertise_addr: “{{ ansible_default_ipv4.address }}”
      listen_addr: “0.0.0.0:2377”
  • name: 加入工作节点
    hosts: worker_nodes
    tasks:

    • docker_swarm:
      state: join
      remote_addrs: “manager01:2377”
      join_token: “SWMTKN-1-0xxxx…”
  1. 滚动更新策略
  • name: 蓝绿部署Web服务
    docker_service:
    name: webapp
    image: myapp:v2
    replicas: 6
    update_config:
    parallelism: 2
    delay: 10s
    order: start-first

排障工具箱

Docker常见问题

容器启动失败

docker inspect --format=’{{json .State}}’ mycontainer | jq
journalctl -u docker.service --since “10 minutes ago”

网络连通性检查

docker run --rm --net container:myapp busybox ping database

Ansible调试技巧

  • debug:
    msg: “Current Java version: {{ java_version.stdout }}”
    when: java_version is changed

详细日志记录

ANSIBLE_DEBUG=1 ansible-playbook playbook.yml

推荐学习路径

官方文档

Docker: https://docs.docker.com/
Ansible: https://docs.ansible.com/
进阶书籍

《Docker Deep Dive》
《Ansible for DevOps》
实战项目

使用Ansible部署K8s集群
构建CI/CD Pipeline(Docker+Jenkins+Ansible)

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐