Docker如何实现Linux自动化部署
导读:1. 准备基础环境 在Linux服务器(如CentOS、Ubuntu)上安装Docker,确保系统支持容器运行。以CentOS为例,步骤如下: 更新系统:sudo yum update -y 安装必要工具:sudo yum install...
1. 准备基础环境
在Linux服务器(如CentOS、Ubuntu)上安装Docker,确保系统支持容器运行。以CentOS为例,步骤如下:
- 更新系统:
sudo yum update -y - 安装必要工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 - 添加Docker镜像源:
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo - 安装Docker CE:
sudo yum install -y docker-ce docker-ce-cli containerd.io - 启动并设置开机自启:
sudo systemctl start docker & & sudo systemctl enable docker。
2. 编写Dockerfile定义应用环境
Dockerfile是自动化部署的核心,用于描述应用的运行环境(基础镜像、依赖、配置、启动命令)。例如:
- Java Spring Boot应用:
FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE=target/*.jar COPY ${ JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"] - Node.js应用:
FROM node:18-alpine WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["npm", "start"] - Python Flask应用:
FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 5000 CMD ["python", "app.py"] ```。
3. 构建与测试Docker镜像
在Dockerfile所在目录执行构建命令,生成镜像:
docker build -t your-app-name:latest .
构建完成后,运行容器测试应用是否正常:
docker run -d -p 8080:8080 --name your-app-container your-app-name:latest
通过docker ps查看容器状态,访问http://服务器IP:8080验证应用功能。
4. 使用CI/CD工具实现自动化触发
通过Jenkins、GitHub Actions等工具,将代码提交与镜像构建、部署流程绑定:
-
Jenkins Pipeline示例:
- 安装Jenkins及Git、Docker插件;
- 创建Pipeline项目,在
Jenkinsfile中定义流程:pipeline { agent any stages { stage('Checkout') { steps { git 'https://github.com/your-repo/your-app.git' } } stage('Build Image') { steps { sh 'docker build -t your-app-name:${ GIT_COMMIT} .' } } stage('Push Image') { steps { sh 'docker login -u your-dockerhub-username -p your-password & & docker push your-app-name:${ GIT_COMMIT} ' } } stage('Deploy') { steps { sh 'ssh user@your-server "docker pull your-app-name:${ GIT_COMMIT} & & docker stop your-app-container || true & & docker rm your-app-container || true & & docker run -d -p 8080:8080 --name your-app-container your-app-name:${ GIT_COMMIT} "' } } } } - 配置Git钩子(如
post-receive),当代码推送到指定分支时自动触发Pipeline。
-
GitHub Actions示例:
在项目根目录创建.github/workflows/deploy.yml文件:name: Deploy to Docker on: push: branches: [ main ] jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${ { secrets.DOCKER_HUB_USERNAME } } password: ${ { secrets.DOCKER_HUB_TOKEN } } - name: Build and push uses: docker/build-push-action@v5 with: context: . push: true tags: your-dockerhub-username/your-app-name:latest - name: Deploy to server run: | ssh user@your-server 'bash -s' < < 'EOF' docker pull your-dockerhub-username/your-app-name:latest docker stop your-app-container || true docker rm your-app-container || true docker run -d -p 8080:8080 --name your-app-container your-dockerhub-username/your-app-name:latest EOF当代码推送到
main分支时,GitHub Actions会自动构建镜像并部署到服务器。
5. 可选:使用Docker Compose编排多容器应用
若应用依赖多个服务(如Web+数据库+缓存),可使用docker-compose.yml定义服务关系,简化部署:
version: '3.8'
services:
web:
build: .
ports:
- "8080:8080"
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: your_db
MYSQL_USER: your_user
MYSQL_PASSWORD: your_password
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
db_data:
部署时,只需在docker-compose.yml所在目录执行:
docker-compose up -d
即可启动所有服务。
6. 安全与管理优化
- 权限控制:避免使用
root用户运行容器,通过--user参数指定非root用户; - 日志管理:使用
docker logs -f your-container-name查看实时日志,或集成ELK(Elasticsearch+Logstash+Kibana)实现集中日志分析; - 监控:使用
docker stats查看容器资源占用,或集成Prometheus+Grafana实现性能监控; - 镜像安全:定期扫描镜像漏洞(如使用
docker scan命令),避免使用未经验证的第三方镜像。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Docker如何实现Linux自动化部署
本文地址: https://pptw.com/jishu/744413.html
