当前位置: 首页 > 知识库问答 >
问题:

在Gitlab Runner容器中构建Docker映像

佴普松
2023-03-14

我正在尝试设置一个运行UbuntuLinux18.04作为docker主机的构建服务器。

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

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

我已经成功地设置了所有三个运行的容器,Gitlab runner正在构建angular项目,但我面临的挑战是在Gitlab runner容器中构建docker形象。

Gitlab Runner容器中无法使用Docker命令来构建Docker映像。

这可能吗??

我试图安装docker。Gitio仍然可以在docker的时间内创建容器,但不能在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。配置文件

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;
        }
    }
}

这是我想用来构建的Dockerfile

FROM nginx:alpine

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

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

共有2个答案

司徒钱青
2023-03-14

在我的项目中,我通常在docker文件中执行构建步骤,并在我的页面上使用docker:image。gitlab ci。所以安装的Docker是我对runner唯一的依赖。

寇夜洛
2023-03-14

在gitlab留档中,有一个关于如何在Gitlab-CI管道中构建docker文件的参考。这里描述了最干净、最好的方法,效果非常好。

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

重要提示:确保gitlab runner docker executor的“privileged”设置为true

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

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

.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
 类似资料:
  • 假设我在Fedora中以的身份登录,我将从Dockerfile构建Docker映像。该映像将包含一个LAMP环境。我有一个Apache虚拟主机(VH)默认文件,如下所示: 作为构建过程的一部分,该文件被复制到图像上的适当位置。 我可以从主机获取登录用户名并动态设置到此VH吗?最后,我希望得到以下结果: 我知道我可以从bash中使用获取当前用户的值,但我如何在Docker构建中将其插入/设置到VH文

  • 问题内容: 我有一个Jenkins作为docker容器运行,现在我想使用管道构建Docker映像,但是Jenkins容器总是告诉未找到Docker。 这是我运行詹金斯图像的方式: Jenkins映像的DockerFile是:https : //github.com/jenkinsci/docker/blob/9f29488b77c2005bbbc5c936d47e697689f8ef6e/Dock

  • 使用Compose,如果我运行,它将重建所有容器: 即使在使用缓存重建时,这也需要时间。所以我的问题是: 有没有办法只重建一个特定的容器?

  • 目前,我发现谷歌云构建发生在构建docker图像的时候(不像我想象的那样,它会构建我的图像,然后执行我的图像来完成所有的构建)。那是在这篇文章里 谷歌云构建的快速启动 我有一个Dockerfile现在很简单 我有一个单一的下载和提取下载任何工件(zip文件)从最后的单构建运行构建(只有修改的服务器被构建或依赖于上一个CI构建的变化的服务器被构建,就像下游库可能被更改)。第一行只是列出了我需要在一个

  • 我有一个Jenkins作为docker容器运行,现在我想使用管道构建docker映像,但Jenkins容器总是告诉docker not found。 以下是我如何运行我的詹金斯形象: Jenkins图像的DockerFile是:https://github.com/jenkinsci/docker/blob/9f29488b77c2005bbbc5c936d47e697689f8ef6e/Dock

  • 问题内容: 我想构建一个在其启动日志中显示其构建日期时间的容器。有没有办法将信息从我的构建机器注入到容器中? 问题答案: 构建过程中每个RUN步骤的输出是对文件系统的更改。因此,您可以将日期输出到图像中的文件。容器中的日志只是您运行的命令的标准输出。因此,您可以在入口点中查找日期。 在代码中,您将在Dockerfile的末尾: 在入口点脚本中: