3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DockerイメージをGitLab CI上で作るまでに困った話

Last updated at Posted at 2017-03-10

悩み

ある日、DockerイメージをGitLab CIで作ろうとしました。
よーし、こうしよう(以下に示す.gitlab-ci.ymlは例です。いつもの癖で""が多いのは許して下さい。)

stages:
  - build
  - docker
build:
  image: ubuntu
  stage: build
  script:
    - echo some build tasks here
  artifacts:
    paths:
      - "result.file"
docker:
  image: docker
  stage: docker
  script:
    - "sh -c \"$DOCKER_LOGIN_COMMAND\" > /dev/null"
    - "docker build -t a-docker-image ."
    - "docker push a-docker-image"

失敗しちゃうんですね
じゃあこうだ

stages:
  - build
  - docker
build:
  image: ubuntu
  stage: build
  script:
    - echo some build tasks here
  artifacts:
    paths:
      - "result.file"
docker:
  image: docker
  stage: docker
  script:
    - service docker start
    - "sh -c \"$DOCKER_LOGIN_COMMAND\" > /dev/null"
    - "docker build -t a-docker-image ."
    - "docker push a-docker-image"

これでも駄目
あれれー?
じゃあこうだろ?

stages:
  - build
  - docker
build:
  image: ubuntu
  stage: build
  script:
    - echo some build tasks here
  artifacts:
    paths:
      - "result.file"
docker:
  image: ubuntu
  stage: docker
  script:
    - "apt update ; apt -y install apt-transport-https ca-certificates curl"
    - "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -"
    - "sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\""
    - "apt update ; apt-get -y install docker-ce"
    - service docker start
    - "sh -c \"$DOCKER_LOGIN_COMMAND\" > /dev/null"
    - "docker build -t a-docker-image ."
    - "docker push a-docker-image"

違うんですね。
じゃあStackOverflowで聞いてこよう

image

ここまで来ました。もう投稿ボタンポチで終わりです。
でも、一応ググってみよう、と。

あった

あ っ た
しかもdocs.gitlab.comにあったじゃないですかーヤーダー

そう、これ
じゃあどうするのか

じゃあどうするの?

先に答えを示します。

stages:
  - build
  - docker
# 追加行 始め
variables:
  DOCKER_DRIVER: overlay
services:
  - docker:dind
# 追加行 終わり
build:
  image: ubuntu
  stage: build
  script:
    - echo some build tasks here
  artifacts:
    paths:
      - "result.file"
docker:
  image: docker
  stage: docker
  script:
    - "sh -c \"$DOCKER_LOGIN_COMMAND\" > /dev/null"
    - "docker build -t a-docker-image ."
    - "docker push a-docker-image"

あーやっとできた

コメント除いて4行で良いんです。
DOCKER_DRIVER=overlayの環境変数と、docker:dindというDockerイメージが提供しているサービスを使うよう宣言すればdocker buildできる、という訳です。

最後に

このやり方に到達するまで数時間かかりました。
ググるって大事ですね

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?