江湖夜雨十年灯

Dockerhub & Github 私有部署

李二花 / 2024-01-15


推送镜像

问:如何根据 dockerfile 打包镜像推送到自己的 dockerhub.

答:要根据 Dockerfile 打包镜像并推送到您自己的 Docker Hub 账户,请按照以下步骤操作:

1. 创建 Dockerfile

确保您已经在项目的根目录中创建了一个 Dockerfile。这个文件包含了构建 Docker 镜像所需的所有指令。

2. 构建镜像

打开终端或命令提示符,切换到包含 Dockerfile 的目录。使用以下命令构建 Docker 镜像,其中 your_image_name 是您想要给镜像命名的名称,tag 是您给镜像指定的标签(通常用于版本控制,例如 latestv1.0):

docker build -t your_dockerhub_username/your_image_name:tag .

请将 your_dockerhub_username 替换为您的 Docker Hub 用户名,your_image_name 替换为您想要的镜像名称,tag 替换为您想要的标签。

3. 登录 Docker Hub

在推送镜像之前,您需要登录到 Docker Hub。在终端或命令提示符中执行以下命令,并按提示输入您的 Docker Hub 用户名和密码:

docker login

4. 推送镜像到 Docker Hub

登录成功后,使用以下命令将镜像推送到您的 Docker Hub 账户:

docker push your_dockerhub_username/your_image_name:tag

确保替换 your_dockerhub_usernameyour_image_nametag 为您之前构建镜像时使用的相应值。

5. 验证

登录到您的 Docker Hub 账户,检查是否成功推送了镜像。

注意事项

以上是将 Docker 镜像打包并推送到 Docker Hub 的基本步骤。希望这对您有所帮助!

拉取部署

问:dockerhub 私有仓库的镜像如何拉取部署

答:要从 Docker Hub 的私有仓库拉取镜像并部署,您需要执行以下步骤:

1. 登录 Docker Hub

首先,您需要在您的机器上登录到 Docker Hub。这一步骤确保您有权限从私有仓库拉取镜像。在终端或命令提示符中执行以下命令:

docker login

按提示输入您的 Docker Hub 用户名和密码。成功登录后,您将能够从您的私有仓库拉取镜像。

2. 拉取镜像

登录成功后,使用以下命令从私有仓库拉取您需要的镜像:

docker pull your_dockerhub_username/your_image_name:tag

请将 your_dockerhub_username 替换为您的 Docker Hub 用户名,your_image_name 替换为您想要拉取的镜像名称,tag 替换为镜像的标签(例如 latestv1.0)。

3. 部署镜像

拉取镜像后,您可以使用 docker run 命令来运行镜像,从而部署您的应用或服务。命令格式如下:

docker run [options] your_dockerhub_username/your_image_name:tag

[options] 是可选的 Docker 运行参数,例如 -d 用于后台运行容器,-p 用于端口映射等。根据您的具体需求选择合适的参数。

注意事项

通过以上步骤,您可以从 Docker Hub 的私有仓库拉取镜像并在您的机器上部署。

GitHub Actions 自动化

我想通过 github 私有仓库里放置的一个项目的 dockerflie, 每当我提交到 main 分支时,自动的打包 dockerfile 镜像,然后推送我个人的私有 dockerhub 上,这个如何使用 action 等工具完成

要实现您的需求,您可以使用 GitHub Actions,这是 GitHub 提供的一个 CI/CD(持续集成/持续部署)服务,允许您在代码仓库中定义自动化的工作流程。以下是一个步骤说明和示例工作流程配置,用于实现当您向 master 分支提交代码时自动构建 Docker 镜像并推送到 DockerHub 的功能。

前提条件

  1. DockerHub 账号和仓库:确保您有一个 DockerHub 账号,并且在 DockerHub 上创建了一个私有仓库用于存放您的镜像。
  2. GitHub 仓库:确保您的项目托管在 GitHub 上,并且 Dockerfile 已经放置在项目的根目录或您指定的目录中。

设置步骤

  1. 在 DockerHub 获取访问令牌

    • 登录到 DockerHub,进入 Account Settings > Security,创建一个新的 Access Token。记下这个 Token,您将需要它来配置 GitHub Actions。
  2. 在 GitHub 仓库设置 Secrets

    • 进入您的 GitHub 仓库,选择 Settings > Secrets > Actions,点击 New repository secret
    • 添加以下两个 Secrets:
      • DOCKER_USERNAME:您的 DockerHub 用户名。
      • DOCKER_PASSWORD:您刚刚创建的 DockerHub Access Token。
  3. 创建 GitHub Actions 工作流程

    • 在您的 GitHub 仓库中,创建一个新的文件 .github/workflows/docker-build.yml
    • 将以下 YAML 配置粘贴到该文件中,并根据需要进行调整:

      name: Build and Push Docker image
      
      on:
      push:
      branches:
      - master  # 或者 main,根据您的默认分支名称调整, 这里的 on 就是触发条件
      
      jobs:
      build-and-push:
      runs-on: ubuntu-latest
      steps:
      - name: Check out the repo
      uses: actions/checkout@v2
      
      - name: Log in 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: .  # Dockerfile 所在的目录,如果不在根目录,需要调整
        file: ./Dockerfile  # Dockerfile 的路径,根据实际情况调整
        push: true
        tags: yourusername/yourrepository:latest  # 修改为您的 DockerHub 用户名和仓库名
        platforms: linux/amd64,linux/arm64
      

完成

一旦您提交了上述 GitHub Actions 的配置文件,并向 master 分支推送了代码,GitHub Actions 就会自动触发上述工作流程,构建 Docker 镜像并推送到您在 DockerHub 上配置的私有仓库中。

请确保替换 YAML 文件中的 yourusername/yourrepository 为您的 DockerHub 用户名和仓库名,以及根据您的项目结构调整 Dockerfile 的路径。

Gitlab 自动部署:

我想通过 gitlib 私有仓库里放置的一个项目的 dockerflie, 每当我提交到 master 分支时,自动的打包 dockerfile 镜像,然后推送我个人的私有 dockerhub 上,这个如何使用 action 等工具完成

要通过 GitLab 私有仓库实现您的需求,您可以使用 GitLab CI/CD,这是 GitLab 内置的持续集成、持续部署和持续交付服务。下面是如何设置 GitLab CI/CD 来自动构建 Docker 镜像并将其推送到 DockerHub 的步骤说明。

前提条件

  1. DockerHub 账号和仓库:确保您有一个 DockerHub 账号,并且在 DockerHub 上创建了一个私有仓库用于存放您的镜像。
  2. GitLab 仓库:确保您的项目托管在 GitLab 上,并且 Dockerfile 已经放置在项目的根目录或您指定的目录中。

设置步骤

  1. 在 DockerHub 获取访问令牌

    • 登录到 DockerHub,进入 Account Settings > Security,创建一个新的 Access Token。记下这个 Token,您将需要它来配置 GitLab CI/CD。
  2. 在 GitLab 仓库设置 CI/CD 变量

    • 进入您的 GitLab 仓库,选择 Settings > CI / CD,展开 Variables 部分。
    • 添加以下两个变量:
      • DOCKER_USERNAME:您的 DockerHub 用户名。
      • DOCKER_PASSWORD:您刚刚创建的 DockerHub Access Token。
  3. 创建 GitLab CI/CD 配置文件

    • 在您的 GitLab 仓库根目录下,创建一个 .gitlab-ci.yml 文件。
    • 将以下 YAML 配置粘贴到该文件中,并根据需要进行调整:

      stages:
      - build
      
      docker-build:
      image: docker:latest
      stage: build
      services:
      - docker:dind
      script:
      - docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD"
      - docker build -t yourusername/yourrepository:$CI_COMMIT_REF_NAME .
      - docker push yourusername/yourrepository:$CI_COMMIT_REF_NAME
      only:
      - master
      

完成

一旦您提交了上述 GitLab CI/CD 的配置文件,并向 master 分支推送了代码,GitLab CI/CD 就会自动触发上述工作流程,构建 Docker 镜像并推送到您在 DockerHub 上配置的私有仓库中。

请确保替换 YAML 文件中的 yourusername/yourrepository 为您的 DockerHub 用户名和仓库名,以及根据您的项目结构调整 Dockerfile 的路径。$CI_COMMIT_REF_NAME 是 GitLab CI/CD 提供的一个环境变量,它会根据触发构建的分支或标签的名称来动态设置镜像标签,这样您就可以为每个分支或标签构建不同的镜像了。

这样,每次向 master 分支提交代码时,GitLab CI/CD 将自动构建 Docker 镜像并将其推送到 DockerHub。

例子:

#!/bin/bash

# Docker 登录
# 注意:这种方式存在安全隐患,推荐使用凭证存储或其他安全方式
DOCKER_USERNAME="your docker hub name"
DOCKER_PASSWORD="your docker hub password"
echo $DOCKER_PASSWORD | docker login --username $DOCKER_USERNAME --password-stdin

# 拉取新的镜像
# 替换your_image_name为你的镜像名称
docker pull lierhua/next-web:latest

# 容器名称或ID,这里假设为container1和container2
CONTAINER1="container1_name"
CONTAINER2="container2_name"

# 停止运行中的容器
docker stop $CONTAINER1
docker stop $CONTAINER2

# 移除已停止的容器(可选)
docker rm $CONTAINER1
docker rm $CONTAINER2


# 启动新的容器,根据你的需求配置启动参数
# 替换以下参数以匹配你的配置
docker run --name $CONTAINER1 -d --restart unless-stopped -p 3001:3000 \
   lierhua/next-web:latest

docker run --name $CONTAINER2 -d --restart unless-stopped -p 3002:3000 \
   lierhua/next-web:latest

echo "Containers have been restarted successfully."