在 Gitlab Runner 容器中构建 Docker 图像

Building Docker Image within Gitlab Runner Container

我正在尝试将 运行 Ubuntu Linux 18.04 的构建服务器设置为 docker 主机。

主机有三个 docker 个容器 运行 - Docker 注册表 - Gitlab 服务器 - Gitlab Runner(构建 Angular 应用程序)

我希望 Gitlab Runner 容器使用 nginx 构建 docker 图像并编译 Angular 代码并将其推送到 Docker 注册表。

我已经设法设置了所有三个容器 运行 并且 Gitlab runner 正在构建 angular 项目但是我面临的挑战是在 Gitlab Runner 容器中构建 docker 图像。

Docker 命令在 Gitlab Runner 容器中不可用,无法构建 docker 图像。

这可能吗??

我尝试在 Gitlab Runner 容器中安装 docker.io,因此在构建时间后,它可以使用 docker 命令,但仍然不走运。它仍然说 docker 不可用。

这是我的 .gitlab-ci.yml 文件

stages:
 - build

build:
  stage: build
  image: node:10.9.0
  script:
    - npm install -g @angular/cli
    - npm install -g typescript
    - npm install
    - ng build --prod
    - docker image build -t tag/to/image .
    - docker push tag/to/image
  tags:
    - angular
  cache:
    paths:
      - node_modules/
  artifacts:
    expire_in: 1 week
    paths:
      - dist/*
  only:
    - master

这是我的 nginx.conf 文件

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    server {
        listen 80;
        server_name  localhost;

        root   /usr/share/nginx/html;
        index  index.html index.htm;
        include /etc/nginx/mime.types;

        gzip on;
        gzip_min_length 1000;
        gzip_proxied expired no-cache no-store private auth;
        gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        location / {
            try_files $uri $uri/ /index.html;
        }
    }
}

这是我要用来构建的Docker文件

FROM nginx:alpine

COPY nginx.conf /etc/nginx/nginx.conf

WORKDIR /usr/share/nginx/html
COPY dist/ .

在我的项目中,我通常在 Docker 文件中执行构建步骤,并在我的 .gitlab-[=14 上使用 docker:image =] 所以安装的 Docker 是我对跑步者唯一需要的依赖。

在 gitlab 文档中有关于如何在 Gitlab-CI 管道中构建 docker 文件的参考。 描述了最干净、最好的方法 here,它工作得非常好。

在我们的例子中,我们需要在我们的管道中进行一些额外的编译,所以我们使用了 python:3.6.5 docker 图像并在其中安装了 docker。

重要提示:确保你的 gitlab-runner docker 执行器 'privileged' 设置为 true

executor = "docker"
[runners.docker]
  privileged = true

首先我们在gitlab的顶部定义了"install_docker"-ci.yml

.install_docker: &install_docker |
      apt-get update
      apt-get -y install apt-transport-https ca-certificates curl software-properties-common
      curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
      add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
      apt-get update
      apt-get -y install docker-ce

然后我们在作业内部需要的时候使用它

script:
  - *install_docker