Docker在CentOS上的自动化部署指南
在CentOS系统上部署Docker前,需先安装并配置Docker环境。以CentOS 7为例,可通过以下命令完成安装:
# 添加Docker官方YUM源
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装Docker CE及必要组件
yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker服务并设置开机自启
systemctl start docker && systemctl enable docker
# 验证Docker安装
docker --version
上述步骤确保系统具备Docker运行环境,为后续镜像构建与容器部署奠定基础。
Dockerfile是容器化的核心配置文件,用于描述应用的运行环境、依赖及启动命令。以下是常见场景的示例:
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["node", "app.js"]
FROM python:3.8-slim
WORKDIR /app
COPY . /app
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 80
CMD ["python", "app.py"]
FROM centos:latest
ENV NAME World
RUN echo "Hello, ${NAME}"
EXPOSE 80
CMD ["echo", "Custom CentOS container ready"]
根据应用类型调整Dockerfile内容,确保镜像包含应用运行所需的所有依赖。
通过Shell脚本自动化Docker镜像构建、容器运行及状态检查,减少手动操作误差。示例如下:
#!/bin/bash
# 定义镜像与容器名称
IMAGE_NAME="my-node-app"
CONTAINER_NAME="my-running-app"
# 构建Docker镜像
echo "Building Docker image: $IMAGE_NAME"
docker build -t $IMAGE_NAME .
# 检查容器是否已存在,存在则停止并删除
if docker ps -a | grep -q $CONTAINER_NAME; then
echo "Container $CONTAINER_NAME exists. Stopping and removing..."
docker stop $CONTAINER_NAME && docker rm $CONTAINER_NAME
fi
# 运行新容器
echo "Running new container: $CONTAINER_NAME"
docker run -d -p 8080:8080 --name $CONTAINER_NAME $IMAGE_NAME
# 检查容器状态
echo "Container status:"
docker ps -a | grep $CONTAINER_NAME
保存为deploy.sh后,赋予执行权限:
chmod +x deploy.sh
运行脚本即可自动完成镜像构建与容器部署。
为实现代码提交后自动部署,可集成Jenkins、GitLab CI/CD或GitHub Actions等工具。以下以GitHub Actions为例:
.github/workflows/deploy.yml文件:name: Deploy to Docker on CentOS
on:
push:
branches:
- main # 当main分支有推送时触发
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# 拉取代码
- name: Checkout code
uses: actions/checkout@v2
# 构建并推送Docker镜像到Docker Hub
- name: Build and push Docker image
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
push: true
tags: your-dockerhub-username/my-node-app:latest
# 通过SSH连接到CentOS服务器执行部署脚本
- name: Deploy to server
run: |
ssh -o StrictHostKeyChecking=no ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} 'bash -s' < deploy.sh
SERVER_USER(服务器用户名)、SERVER_HOST(服务器IP/域名)等敏感信息。
每次向main分支推送代码时,GitHub Actions会自动构建镜像、推送到Docker Hub,并通过SSH在CentOS服务器上执行deploy.sh脚本完成部署。若应用包含多个服务(如Web+数据库),可使用docker-compose.yml定义服务关系,并通过脚本自动化部署:
docker-compose.yml:version: '3.8'
services:
web:
build: .
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
deploy_compose.sh:#!/bin/bash
# 拉取最新镜像并重启容器
docker-compose pull
docker-compose up -d
运行./deploy_compose.sh即可自动部署多容器应用。
USER nonroot)、限制容器资源(--memory、--cpu参数)、定期更新镜像。docker logs -f <container_name>查看实时日志,或集成Prometheus+Grafana监控容器性能。