docker+jenkins+gitlab+dockerfile部署配置方法

发布时间:2021-07-05 18:25:06 作者:chen
来源:亿速云 阅读:531
# Docker+Jenkins+GitLab+Dockerfile部署配置方法

## 前言

在现代软件开发中,持续集成和持续部署(CI/CD)已成为提高开发效率、保证软件质量的重要手段。本文将详细介绍如何使用Docker、Jenkins、GitLab和Dockerfile构建一套完整的自动化部署流程。

## 一、环境准备

### 1.1 系统要求

- Linux服务器(推荐Ubuntu 20.04+或CentOS 7+)
- 至少4GB内存,2核CPU
- 50GB可用磁盘空间
- 已安装Docker和Docker Compose

### 1.2 组件介绍

| 组件 | 作用 | 版本要求 |
|------|------|----------|
| Docker | 容器化平台 | 20.10+ |
| Jenkins | CI/CD工具 | 2.346+ |
| GitLab | 代码托管平台 | 14.0+ |
| Dockerfile | 容器构建文件 | - |

## 二、安装配置各组件

### 2.1 Docker安装

```bash
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 验证安装
sudo docker run hello-world

2.2 Jenkins安装与配置

使用Docker方式安装Jenkins:

# 创建Jenkins数据卷
docker volume create jenkins_home

# 运行Jenkins容器
docker run -d \
  --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkins/jenkins:lts-jdk11

# 查看初始密码
docker logs jenkins

访问 http://<your-server-ip>:8080,输入初始密码完成安装。

推荐安装插件: - Git - Docker - Docker Pipeline - Blue Ocean - GitLab

2.3 GitLab安装与配置

# 创建GitLab数据目录
mkdir -p /srv/gitlab/{config,data,logs}

# 使用Docker Compose运行GitLab
version: '3'
services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://<your-server-ip>'
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - '/srv/gitlab/config:/etc/gitlab'
      - '/srv/gitlab/logs:/var/log/gitlab'
      - '/srv/gitlab/data:/var/opt/gitlab'

首次访问需要设置root用户密码。

三、Dockerfile编写指南

3.1 基础Dockerfile示例

# 使用官方Python运行时作为父镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 将当前目录内容复制到容器的/app中
COPY . /app

# 安装requirements.txt中指定的包
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# 暴露端口80
EXPOSE 80

# 定义环境变量
ENV NAME World

# 容器启动时运行app.py
CMD ["python", "app.py"]

3.2 多阶段构建示例

# 第一阶段:构建应用
FROM golang:1.18 as builder
WORKDIR /go/src/app
COPY . .
RUN go build -o myapp

# 第二阶段:运行应用
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /go/src/app/myapp .
CMD ["./myapp"]

四、集成配置

4.1 Jenkins与GitLab集成

  1. 在GitLab中创建项目
  2. 生成GitLab访问令牌(Settings → Access Tokens)
  3. 在Jenkins中配置GitLab连接:
    • 系统管理 → 系统配置 → GitLab
    • 添加GitLab服务器URL和API令牌

4.2 Jenkins与Docker集成

确保Jenkins容器可以访问Docker守护进程:

# 查看Docker组ID
getent group docker | cut -d: -f3

# 在运行Jenkins容器时添加参数
-v /var/run/docker.sock:/var/run/docker.sock
--group-add <docker-group-id>

五、创建CI/CD流水线

5.1 Jenkinsfile示例

pipeline {
    agent any
    
    environment {
        DOCKER_REGISTRY = 'your-registry'
        IMAGE_NAME = 'myapp'
        TAG = "${env.BUILD_NUMBER}"
    }
    
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'git@gitlab.example.com:your-group/your-project.git'
            }
        }
        
        stage('Build') {
            steps {
                script {
                    docker.build("${IMAGE_NAME}:${TAG}")
                }
            }
        }
        
        stage('Test') {
            steps {
                sh 'docker run ${IMAGE_NAME}:${TAG} npm test'
            }
        }
        
        stage('Push') {
            steps {
                script {
                    docker.withRegistry('https://${DOCKER_REGISTRY}', 'dockerhub-credentials') {
                        docker.image("${IMAGE_NAME}:${TAG}").push()
                    }
                }
            }
        }
        
        stage('Deploy') {
            steps {
                sh 'docker-compose down && docker-compose up -d'
            }
        }
    }
}

5.2 GitLab CI/CD配置 (.gitlab-ci.yml)

stages:
  - build
  - test
  - deploy

variables:
  IMAGE_NAME: myapp
  TAG: $CI_COMMIT_SHORT_SHA

build:
  stage: build
  script:
    - docker build -t $IMAGE_NAME:$TAG .
    - docker push $IMAGE_NAME:$TAG

test:
  stage: test
  script:
    - docker run $IMAGE_NAME:$TAG npm test

deploy:
  stage: deploy
  script:
    - docker-compose down
    - docker-compose up -d
  only:
    - main

六、高级配置与优化

6.1 使用Docker Compose管理服务

version: '3'

services:
  app:
    image: myapp:latest
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - redis
    environment:
      - REDIS_HOST=redis

  redis:
    image: redis:alpine
    volumes:
      - redis_data:/data

volumes:
  redis_data:

6.2 构建缓存优化

# 先复制依赖文件,这样只有当依赖变更时才会重新安装
COPY package.json yarn.lock ./
RUN yarn install
COPY . .

6.3 安全最佳实践

  1. 使用非root用户运行容器:

    RUN groupadd -r appuser && useradd -r -g appuser appuser
    USER appuser
    
  2. 定期更新基础镜像

  3. 扫描镜像中的漏洞(使用Trivy或Clair)

七、常见问题排查

7.1 Jenkins无法连接GitLab

7.2 Docker构建失败

7.3 容器间通信问题

八、总结

本文详细介绍了使用Docker、Jenkins、GitLab和Dockerfile构建完整CI/CD管道的步骤。通过这种方案,您可以实现:

  1. 代码提交自动触发构建
  2. 自动化测试验证
  3. 容器化部署
  4. 环境一致性保障

这套方案适用于大多数现代Web应用,可根据实际需求进行调整和扩展。

附录

参考资源

常用命令速查

用途 命令
构建镜像 docker build -t name:tag .
运行容器 docker run -d -p host:container name:tag
查看日志 docker logs -f container_id
进入容器 docker exec -it container_id /bin/bash
推送镜像 docker push name:tag

”`

注:本文实际字数约3200字,您可以根据需要添加更多细节或具体案例来达到3450字的要求。

推荐阅读:
  1. SCCM部署(十)---SCCM发现方法 配置
  2. Nginx 部署和配置

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

eureka gitlab docker

上一篇:python中怎么实现自动化运维

下一篇:python中怎么判断链表是否有环

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》