阿拉善盟网站建设_网站建设公司_支付系统_seo优化
2025/12/18 20:13:46 网站建设 项目流程

一、Docker环境准备

1. 安装Docker

Ubuntu/Debian系统:

# 更新包索引sudoaptupdate# 安装依赖sudoaptinstall-y apt-transport-https ca-certificatescurlsoftware-properties-common# 添加Docker官方GPG密钥curl-fsSL https://download.docker.com/linux/ubuntu/gpg|sudoapt-keyadd-# 添加Docker仓库sudoadd-apt-repository"deb [arch=amd64] https://download.docker.com/linux/ubuntu$(lsb_release -cs)stable"# 安装Dockersudoaptupdatesudoaptinstall-y docker-ce docker-ce-cli containerd.io# 验证安装sudodocker --version

CentOS/RHEL系统:

# 移除旧版本sudoyum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine# 安装依赖sudoyuminstall-y yum-utils# 添加Docker仓库sudoyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 安装Dockersudoyuminstall-y docker-ce docker-ce-cli containerd.io# 启动Dockersudosystemctl start dockersudosystemctlenabledocker

2. Docker配置优化

# 将当前用户加入docker组(避免每次sudo)sudousermod-aG docker$USER# 需要重新登录生效# 配置Docker镜像加速器sudomkdir-p /etc/dockersudotee/etc/docker/daemon.json<<-'EOF' { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com" ], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }, "storage-driver": "overlay2" } EOF# 重启Dockersudosystemctl daemon-reloadsudosystemctl restart docker

二、创建自定义Docker镜像

1. 编写Dockerfile

# 基于官方镜像 FROM ubuntu:22.04 # 设置环境变量 ENV LANG=C.UTF-8 \ DEBIAN_FRONTEND=noninteractive \ TZ=Asia/Shanghai # 设置时区 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 更新并安装基础软件 RUN apt update && apt install -y \ curl \ wget \ vim \ git \ net-tools \ iputils-ping \ python3 \ python3-pip \ nginx \ supervisor \ && apt clean \ && rm -rf /var/lib/apt/lists/* # 创建工作目录 WORKDIR /app # 复制应用文件 COPY requirements.txt . COPY app.py . # 安装Python依赖 RUN pip3 install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 复制配置文件 COPY nginx.conf /etc/nginx/nginx.conf COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf # 暴露端口 EXPOSE 80 443 # 设置启动命令 CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

2. 创建应用文件

requirements.txt:

flask==2.3.3 gunicorn==21.2.0 redis==4.6.0

app.py:

fromflaskimportFlaskimportsocket app=Flask(__name__)@app.route('/')defhello():hostname=socket.gethostname()returnf"Hello from Docker Container:{hostname}"if__name__=='__main__':app.run(host='0.0.0.0',port=5000)

3. 构建镜像

# 构建镜像docker build -t my-app:latest.# 查看镜像docker images

三、容器操作与管理

1. 运行容器

# 基本运行docker run -d --name my-app -p8080:80 my-app:latest# 带数据卷docker run -d\--name my-app\-p8080:80\-v /host/path:/container/path\-eENV_VAR=value\my-app:latest# 限制资源docker run -d\--name my-app\--memory="512m"\--cpus="1.0"\--restart=always\my-app:latest

2. 容器管理命令

# 查看容器dockerps# 运行中的容器dockerps-a# 所有容器# 容器操作docker start my-app# 启动docker stop my-app# 停止docker restart my-app# 重启dockerrmmy-app# 删除dockerrm-f my-app# 强制删除# 进入容器dockerexec-it my-app /bin/bash dockerexec-it my-appsh# 查看日志docker logs my-app docker logs -f my-app# 实时查看docker logs --tail50my-app# 查看资源使用docker stats my-app

四、Docker Compose多容器编排

1. 创建docker-compose.yml

version:'3.8'services:web:image:nginx:alpinecontainer_name:web-serverports:-"80:80"-"443:443"volumes:-./nginx.conf:/etc/nginx/nginx.conf-./html:/usr/share/nginx/html-./logs:/var/log/nginxnetworks:-app-networkrestart:unless-stoppedapp:build:.container_name:app-backendports:-"5000:5000"volumes:-./app:/app-./data:/dataenvironment:-DB_HOST=database-REDIS_HOST=redisdepends_on:-database-redisnetworks:-app-networkrestart:unless-stoppeddatabase:image:postgres:15container_name:postgres-dbenvironment:POSTGRES_USER:adminPOSTGRES_PASSWORD:secretPOSTGRES_DB:mydbvolumes:-postgres-data:/var/lib/postgresql/data-./init.sql:/docker-entrypoint-initdb.d/init.sqlports:-"5432:5432"networks:-app-networkrestart:unless-stoppedredis:image:redis:7-alpinecontainer_name:redis-cachecommand:redis-server--appendonly yesvolumes:-redis-data:/dataports:-"6379:6379"networks:-app-networkrestart:unless-stoppedvolumes:postgres-data:redis-data:networks:app-network:driver:bridge

2. Compose命令

# 安装Docker Composesudocurl-L"https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname-s)-$(uname-m)"-o /usr/local/bin/docker-composesudochmod+x /usr/local/bin/docker-compose# 使用Composedocker-compose up -d# 启动所有服务docker-compose down# 停止并删除docker-composeps# 查看服务状态docker-compose logs# 查看日志docker-compose build# 重新构建docker-composeexecappbash# 进入服务容器

五、Docker镜像优化最佳实践

1. 多阶段构建示例

# 构建阶段 FROM node:18 AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . RUN npm run build # 运行阶段 FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]

2. 优化建议

# 1. 使用官方基础镜像 FROM python:3.11-slim # 比ubuntu更小 # 2. 合并RUN命令减少镜像层 RUN apt update && apt install -y \ package1 \ package2 \ && rm -rf /var/lib/apt/lists/* # 3. 使用.dockerignore文件 .dockerignore: node_modules .git *.log *.tmp # 4. 使用特定版本标签 FROM ubuntu:22.04 # 而不是ubuntu:latest # 5. 非root用户运行 RUN groupadd -r appuser && useradd -r -g appuser appuser USER appuser

六、Docker网络配置

# 创建自定义网络docker network create my-network# 查看网络docker networkls# 连接容器到网络docker run -d --name container1 --network my-network nginx docker run -d --name container2 --network my-network redis# 容器间通过名称通信# container1中可以直接 ping container2

七、数据持久化

# 创建数据卷docker volume create mydata# 使用数据卷docker run -d\--name db\-v mydata:/var/lib/mysql\mysql:8.0# 备份数据卷docker run --rm\-v mydata:/source\-v$(pwd):/backup\alpinetarczf /backup/backup.tar.gz -C /source.# 恢复数据卷docker run --rm\-v mydata:/target\-v$(pwd):/backup\alpinetarxzf /backup/backup.tar.gz -C /target

八、监控与维护

# 查看容器资源使用docker stats# 查看镜像大小docker images --format"table {{.Repository}}\t{{.Tag}}\t{{.Size}}"# 清理无用资源docker system prune -a# 清理所有未使用的资源docker image prune# 清理未使用的镜像docker volume prune# 清理未使用的卷docker network prune# 清理未使用的网络# 导出/导入镜像docker save my-app:latest>my-app.tar docker load<my-app.tar# 导出/导入容器dockerexportmy-app>my-app-container.tarcatmy-app-container.tar|dockerimport- my-app:backup

九、安全建议

# 1. 使用非root用户# 在Dockerfile中添加:USERnobody# 2. 扫描镜像漏洞docker scan my-app:latest# 3. 限制容器能力docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx# 4. 使用只读文件系统docker run --read-only alpinesh# 5. 设置资源限制docker run --memory="512m"--cpus="1.0"my-app

这个完整的Docker环境制作指南应该能帮助你从零开始搭建和管理Docker环境。根据你的具体需求,可以调整相应的配置。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询