Docker和Ansible最全运维指南
docker image prune -a --filter “until=24h” # 清理24小时前镜像。docker image ls --filter “dangling=false”# 显示有效镜像。docker logs --tail 100 -f myapp# 实时尾部日志。构建CI/CD Pipeline(Docker+Jenkins+Ansible)docker exec -it
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联动方案
- 集群部署
-
name: 初始化Docker Swarm集群
hosts: manager_nodes
tasks:- docker_swarm:
state: present
advertise_addr: “{{ ansible_default_ipv4.address }}”
listen_addr: “0.0.0.0:2377”
- docker_swarm:
-
name: 加入工作节点
hosts: worker_nodes
tasks:- docker_swarm:
state: join
remote_addrs: “manager01:2377”
join_token: “SWMTKN-1-0xxxx…”
- docker_swarm:
- 滚动更新策略
- 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)
更多推荐
所有评论(0)