LoginSignup
1
0

More than 5 years have passed since last update.

cloud buildでの docker runコマンドの volume指定について

Posted at

cloud buildでの docker runコマンドの volume指定について

Google Cloud Buildeはビルドスクリプトを容易に記述できて便利なのですが、docker runコマンドで volumeをマウントしようとすると大変です。

理由は、Cloud Build自体がコンテナで実行されており、その中からビルドステップをコンテナで実行しているため docker runコマンドで指定するホスト側のパスは Cloud Buildのホストのパスを指定する必要があるためです。

dockerを起動させたホスト側のパスは、以下のように docker volume inspectコマンドで確認することが可能です。


$ docker volume ls -q --filter name=homevol|cloudbuild_ | xargs docker volume inspect
[
    {
        "CreatedAt": "2018-09-22T04:56:00Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/cloudbuild_vol_25da440e-a131-497c-8da5-a8ee5d20f565/_data",
        "Name": "cloudbuild_vol_25da440e-a131-497c-8da5-a8ee5d20f565",
        "Options": {}, 
        "Scope": "local"
    },
    {
        "CreatedAt": "2018-09-22T04:55:59Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/homevol/_data",
        "Name": "homevol",
        "Options": null,
        "Scope": "local"
    }
]

cloud buildでは、ホームディレクトリの volumeに対して homevol という名前を割り当てています。

    // homeVolume is the name of the Docker volume that contains the build's
    // $HOME directory, mounted in as /builder/home.
    homeVolume = "homevol"
    homeDir    = "/builder/home"

例えば、cloud buildのビルドステップのコンテナでのホームディレクトリ /builder/home に対応するホスト側のパスは以下のように取得できます。


$ docker volume inspect --format '{{ .Mountpoint }}' homevol
/var/lib/docker/volumes/homevol/_data

以下の cloud builのスクリプト cloudbuild.yaml は1つ目のステップでホームディレクトリに testファイルを作成し、2つ目のステップでホームディレクトリを /mntにマウントして docker runを実行し、1つ目のステップで作成したファイルを表示するものです。


steps:
- id: create-test-file
  name: ubuntu
  entrypoint: bash
  args:
  - -c
  - |
    cat << EOF > /builder/home/test
    hello
    world
    EOF
- id: cat-test-file-in-docker
  name: gcr.io/cloud-builders/docker
  entrypoint: bash
  args:
  - -c
  - |
    docker run -v $(docker volume inspect --format '{{ .Mountpoint }}' homevol):/mnt ubuntu cat /mnt/test

Docker in Dockerの環境において、--volume オプションで volumeをマウントする場合も、同じ方法で対応可能です。

1
0
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
1
0