首页 > 其他分享 >Docker 与 GitHub:完美结合实现容器化部署与持续集成

Docker 与 GitHub:完美结合实现容器化部署与持续集成

时间:2024-09-21 16:22:07浏览次数:9  
标签:容器 GitHub Actions 构建 镜像 Docker

Docker 与 GitHub:完美结合实现容器化部署与持续集成

使用 Docker 和 GitHub,开发者可以将代码构建、测试和部署流程自动化,从而提高开发效率,确保应用程序的一致性与可靠性。本文将介绍如何使用 Docker 和 GitHub Actions 实现容器化部署与持续集成。

目录

  1. 概述
  2. Docker 基础知识
  • Docker 镜像
  • Docker 容器
  • Dockerfile
  1. GitHub Actions 基础知识
  2. 创建 Docker 镜像
  3. 设置 GitHub Repository Secrets
  4. 配置 GitHub Actions Workflow
  5. 自动化构建与部署
  6. 结束语

概述

借助 Docker 和 GitHub Actions,开发者能够快速构建、测试和部署应用程序。下面,我们将分别介绍 Docker 和 GitHub Actions 的基本知识,并展示如何将它们结合以实现自动化工作流。

Docker 基础知识

Docker 镜像

Docker 镜像是一个轻量级、独立的可执行软件包,包含运行特定应用程序所需的所有内容,包括代码、运行时、库和配置信息。使用镜像可以确保应用在任何环境下都能正常运行。

Docker 容器

Docker 容器是镜像运行时的实例。容器使用操作系统的内核,因此重量很轻,可以快速启动。多个容器可以在同一主机上运行,并共享操作系统内核。

Dockerfile

Dockerfile 是一个文本文件,其中包含构建 Docker 镜像的指令。以下是一个示例:

# 使用官方 Node.js 镜像作为基础镜像
FROM node:14

# 创建并设置工作目录
WORKDIR /usr/src/app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装项目依赖
RUN npm install

# 复制项目文件
COPY . .

# 暴露应用运行端口
EXPOSE 8080

# 启动应用程序
CMD ["node", "server.js"]

GitHub Actions 基础知识

GitHub Actions 是 GitHub 提供的 CI/CD 工具,允许您自动化构建、测试和部署过程。通过定义工作流,您可以在代码被推送到版本库时自动触发这些过程。

创建 Docker 镜像

首先,创建一个名为 Dockerfile 的文件,并根据项目需求定义 Docker 镜像构建指令。确保项目根目录下有一个 Dockerfile

设置 GitHub Repository Secrets

为了在工作流中安全地使用敏感信息(如 Docker Hub 登录凭证),我们需要在 GitHub 仓库中配置 secrets。

步骤详解

  1. 打开 GitHub 仓库页面。
  2. 点击右上角的 Settings
  3. 在左侧菜单中找到 Secrets and variables,然后选择 Actions
  4. 点击 New repository secret 按钮。
  5. 添加 DOCKER_USERNAMEDOCKER_PASSWORD secrets。确保名称和值准确。

配置 GitHub Actions Workflow

在 GitHub 仓库的 .github/workflows 目录下创建一个新的工作流文件,例如 docker-deploy.yml

name: Build and Push Docker image

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout the code
      uses: actions/checkout@v2

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v1

    - name: Cache Docker layers
      uses: actions/cache@v2
      with:
        path: /tmp/.buildx-cache
        key: ${{ runner.os }}-buildx-${{ github.sha }}
        restore-keys: |
          ${{ runner.os }}-buildx-

    - name: Login to DockerHub
      uses: docker/login-action@v1
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}

    - name: Build and push Docker image
      uses: docker/build-push-action@v2
      with:
        context: .
        platforms: linux/amd64,linux/arm64
        tags: user/app:latest
        push: true
        cache-from: type=local,src=/tmp/.buildx-cache
        cache-to: type=local,dest=/tmp/.buildx-cache

上述工作流将在每次代码推送到 main 分支时自动触发:

  1. 检出代码。
  2. 设置 Docker Buildx 以支持多架构构建。
  3. 配置缓存以提高构建速度。
  4. 登录 Docker Hub。
  5. 构建并推送 Docker 镜像到 Docker Hub。

自动化构建与部署

通过上述配置,每当代码推送到 main 分支时,GitHub Actions 会自动执行工作流,并将最新的 Docker 镜像构建并推送到 Docker Hub。这极大地简化了构建、测试和部署的过程,提高了开发效率。

结束语

通过结合使用 Docker 和 GitHub,开发者可以实现自动化的容器化部署和持续集成,确保应用程序的一致性和可靠性。希望这篇文章能帮助你更好地理解并使用 Docker 和 GitHub Actions。如果你有其他问题或需求,欢迎进一步探讨。

标签:容器,GitHub,Actions,构建,镜像,Docker
From: https://blog.51cto.com/u_16123429/12074911

相关文章

  • 828华为云征文|部署 Docker 的图形化管理工具 Portainer
    828华为云征文|部署Docker的图形化管理工具Portainer一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1重置密码2.2服务器连接2.3安全组配置2.4Docker环境搭建三、Flexus云服务器X实例部署Portainer3.1Portainer介绍3.2Portainer部署3.3Portaine......
  • 在一台服务器docker下载mysql和redis镜像,保存到本地,然后在另外一台服务上导入镜像
    要在一台服务器上下载MySQL和Redis的Docker镜像并保存到本地,然后在另一台服务器上导入镜像,您可以按照以下步骤进行操作:步骤1:在第一台服务器上下载MySQL和Redis镜像下载MySQL镜像:dockerpullmysql:latest下载Redis镜像:dockerpullredis:latest步骤2:......
  • 【LeetCode Hot 100】11. 盛最多水的容器
    题目描述首先记录一下题目的解法。使用双指针记录容器的边界,从边界最大的容器开始,i位于最左侧,j位于最右侧。每次向中间移动高度较小的那个指针,并使用一个变量res记录容器最大的容积(即最终的答案)。//C++classSolution{public:intmaxArea(vector<int>&height){......
  • kubeadm搭建K8S容器集群管理系统(一)
    认识各k8s各组件的作用: 1.1Kubernetes概述Kubernetes是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。Kubernetes基于docker容器的云平台,简写成:k8s官方网站:https://kubernetes.io/官方网站非常友好,为......
  • docker私有仓库harbor安装与使用
    Harbor安装与使用Harbor(英文单词:港湾)简介:主要功能和特点:基于角色的访问控制(RBAC):可以为不同的用户和用户组分配不同的权限,增强了安全性和管理的灵活性镜像复制:支持在不同的harbor实例之间复制镜像,方便在多个数据中心或环境中分发镜像图形化用户界面(UI):提供了直观地Web界面,便于......
  • Docker学习
    系列文章目录第一章基础知识、数据类型学习第二章万年历项目第三章代码逻辑训练习题第四章方法、数组学习第五章图书管理系统项目第六章面向对象编程:封装、继承、多态学习第七章封装继承多态习题第八章常用类、包装类、异常处理机制学习第九章集合学习第......
  • Docker详解
    一、概念Docker是一个开源的容器化平台,它可以使我们避免部署对服务器环境的依赖,减少复杂的部署流程。它允许开发者将应用程序及其依赖项打包到一个轻量级,可移植的容器中,然后在任何支持Docker的环境中运行。Docker的出现极大地简化了应用程序的部署和管理,使得开发、测试和生产......
  • openEuler22.03 LTS 离线安装 docker docker-compose
    本文转载自:https://blog.csdn.net/qq_33994039/article/details/140890728其中有几处我这里不能用的地方,标注一下章节5.1:openeuler启动命令:dockerrun-itd--nameopeneuler--privileged=trueopeneuler/openeuler:22.03-lts章节5.2:他那的docker-ce.repo用不了,可以改为......
  • 实现NAS远程下载,Docker部署qBittorrent、Transmission、贝锐花生壳
    与电脑不同,NAS通常都是7*24小时不间断运行,这使得下载资源变得更加便捷,解决了bt、pt下载需要长时间在线、挂机的问题。所以,对于许多选择品牌NAS或自行搭建NAS系统的用户而言,像qBittorrent、Transmission这样的下载管理工具早已成为不可或缺的必备应用。除了可以通过NAS自带的应用中......
  • 一个好用的docker容器管理后台Portainer
    一个好用的docker容器管理后台Portainerdocker源更换阿里云(仅支持阿里云用户使用具备公网访问能力的阿里云产品进行镜像加速)网上找到的—参考链接sudomkdir-p/etc/dockersudotee/etc/docker/daemon.json<<-'EOF'{"registry-mirrors":["https:......