从零开始:镜像仓库搭建与Nginx容器化实验指南
2025.10.10 18:32浏览量:1简介:本文通过镜像仓库搭建、Nginx容器化部署及私有仓库创建三大实验模块,系统讲解Docker核心操作与私有化部署方案,适合开发运维人员学习实践。
一、镜像仓库基础与Docker命令体系
1.1 镜像仓库的核心作用
镜像仓库是容器化部署的基石,承担镜像存储、分发与版本管理功能。公有仓库如Docker Hub提供海量开源镜像,但企业级应用需考虑私有仓库建设,以保障数据安全与访问控制。典型应用场景包括:
- 内部微服务镜像集中管理
- 离线环境镜像同步
- 敏感数据镜像隔离
1.2 核心Docker命令解析
掌握基础命令是开展实验的前提,以下为高频操作示例:
# 镜像操作docker pull nginx:latest # 拉取最新版Nginx镜像docker images # 列出本地镜像docker rmi nginx:latest # 删除指定镜像# 容器操作docker run -d -p 80:80 --name web nginx # 后台启动Nginx容器docker ps -a # 查看所有容器状态docker stop web # 停止指定容器docker rm web # 删除容器实例# 网络管理docker network create mynet # 创建自定义网络docker run -d --network mynet ... # 指定网络启动容器
二、Nginx容器化部署实验
2.1 基础镜像部署
通过标准镜像快速启动Nginx服务:
docker run --name nginx-demo -p 8080:80 -d nginx
验证服务:
curl http://localhost:8080# 应返回Nginx欢迎页面
2.2 自定义配置部署
创建配置目录并准备nginx.conf
mkdir -p /data/nginx/confcat > /data/nginx/conf/nginx.conf <<EOFevents {worker_connections 1024;}http {server {listen 80;location / {root /usr/share/nginx/html;index index.html;}}}EOF
启动自定义配置容器
docker run --name nginx-custom \-p 8081:80 \-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \-v /data/nginx/html:/usr/share/nginx/html \-d nginx
2.3 多容器负载均衡实验
构建包含2个Nginx实例的负载均衡集群:
# 启动第一个实例docker run --name nginx1 -d -p 8082:80 nginx# 启动第二个实例docker run --name nginx2 -d -p 8083:80 nginx# 使用Nginx官方镜像构建负载均衡器cat > loadbalancer.conf <<EOFhttp {upstream backend {server host.docker.internal:8082;server host.docker.internal:8083;}server {listen 80;location / {proxy_pass http://backend;}}}EOFdocker run --name lb -p 80:80 \-v $(pwd)/loadbalancer.conf:/etc/nginx/nginx.conf \-d nginx
三、私有仓库搭建与镜像管理
3.1 本地私有仓库部署
使用registry官方镜像快速搭建:
docker run -d -p 5000:5000 --name registry registry:2
验证仓库:
curl http://localhost:5000/v2/_catalog# 应返回{"repositories":[]}
3.2 镜像标记与推送
标记本地镜像
docker tag nginx:latest localhost:5000/my-nginx:v1
推送至私有仓库
docker push localhost:5000/my-nginx:v1# 可能需要配置insecure-registries(非HTTPS环境)
3.3 安全加固方案
生产环境需考虑以下安全措施:
- 启用HTTPS认证
```bash生成自签名证书
mkdir -p /data/certs
openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout /data/certs/domain.key -x509 -days 365 \
-out /data/certs/domain.crt -subj “/CN=registry.example.com”
启动安全仓库
docker run -d -p 5000:5000 —name secure-registry \
-v /data/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
2. 基本认证配置```bash# 创建认证文件mkdir -p /data/authdocker run --entrypoint htpasswd httpd:2 -Bbn testuser testpass > /data/auth/htpasswd# 启动带认证的仓库docker run -d -p 5000:5000 --name auth-registry \-v /data/auth:/auth \-e REGISTRY_AUTH=htpasswd \-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \-e REGISTRY_AUTH_HTPASSWD_PATH="/auth/htpasswd" \-v /data/certs:/certs \-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \registry:2
四、进阶实验:CI/CD集成
4.1 自动化构建流程
结合GitLab CI实现镜像自动构建:
# .gitlab-ci.yml 示例stages:- build- deploybuild_image:stage: buildimage: docker:latestservices:- docker:dindscript:- docker build -t myregistry.example.com/myapp:$CI_COMMIT_SHA .- docker push myregistry.example.com/myapp:$CI_COMMIT_SHAdeploy_staging:stage: deployimage: alpine:latestscript:- apk add --no-cache curl- curl -X POST http://k8s-master/deploy --data "image=myregistry.example.com/myapp:$CI_COMMIT_SHA"
4.2 镜像扫描与安全
集成Trivy进行漏洞扫描:
# 安装Trivywget https://github.com/aquasecurity/trivy/releases/download/v0.45.0/trivy_0.45.0_Linux-64bit.debsudo dpkg -i trivy_0.45.0_Linux-64bit.deb# 扫描镜像trivy image myregistry.example.com/myapp:latest
五、最佳实践建议
镜像管理策略:
- 采用语义化版本控制(v1.0.0)
- 定期清理未使用的镜像层
- 使用多阶段构建减小镜像体积
仓库运维规范:
- 建立镜像命名规范(项目/模块:版本)
- 设置镜像保留策略(保留最近5个版本)
- 实施镜像签名机制
性能优化方案:
- 配置仓库缓存加速
- 使用CDN分发热门镜像
- 对大镜像启用分块传输
本实验体系完整覆盖了从基础容器操作到企业级私有仓库建设的全流程,通过12个可复现的实验模块,帮助开发者系统掌握Docker核心技能。建议结合实际项目需求,逐步实施从简单部署到自动化运维的演进路线。

发表评论
登录后可评论,请前往 登录 或 注册