読者です 読者をやめる 読者になる 読者になる

$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

docker commitでCMDやENVなどを指定する

 現状Dockerfileに書けるCMDやENVなどはdocker commitしてしまうと消えてしまいます(https://github.com/dotcloud/docker/issues/1141)。本当は前のオプションのまま残しておいて欲しいのですが出来ないので、今回はdocker commitの時のこのようなオプションを指定する方法について書きます。

 docker commitには-runオプションがあり、それによってCMDやENVやEXPOSEなどを指定できるようでした。例えば以下の様な使い方が出来ます。http://docs.docker.io/en/latest/commandline/cli/#change-the-command-that-a-container-runs も参考に。

docker commit -run '
{
    "Cmd": [
        "/usr/bin/supervisord",
        "-c",
        "/opt/Sample-App/current/supervisor/supervisord.conf"
    ],
    "Env": [
        "HOME=/",
        "PATH=/opt/ruby/bin:/opt/perl/bin:/usr/sbin:/sbin:/usr/bin:/bin",
        "DEBIAN_FRONTEND=noninteractive"
    ],
    "ExposedPorts": {
        "22/tcp": {},
        "8000/tcp": {}
    }
}' 7dd9480063c8 sample-app

 ちゃんと調べてないですが、ここで指定できるJSONはdocker inspectの時に出てくるConfigというところに保存しているものっぽいですね。

$ sudo docker inspect 7dd9480063c8
[{
    // ...
    "Args": [
        "-c",
        "cd /docker-registry \u0026\u0026 ./setup-configs.sh \u0026\u0026 ./run.sh"
    ],
    "Config": {
        "Hostname": "7dd9480063c8",
        "Domainname": "",
        "User": "",
        "Memory": 0,
        "MemorySwap": 0,
        "CpuShares": 0,
        "AttachStdin": false,
        "AttachStdout": false,
        "AttachStderr": false,
        "PortSpecs": null,
        "ExposedPorts": {
            "5000/tcp": {}
        },
        "Tty": false,
        "OpenStdin": false,
        "StdinOnce": false,
        "Env": [
            "HOME=/",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "Cmd": [
            "/bin/sh",
            "-c",
            "cd /docker-registry \u0026\u0026 ./setup-configs.sh \u0026\u0026 ./run.sh"
        ],
        "Dns": null,
        "Image": "stackbrew/registry",
        "Volumes": {
            "/tmp/registry": {}
        },
        "VolumesFrom": "",
        "WorkingDir": "",
        "Entrypoint": null,
        "NetworkDisabled": false
    },
    "State": {
        "Running": true,
        "Pid": 4793,
        "ExitCode": 0,
        "StartedAt": "2013-12-19T08:56:29.577405721Z",
        "FinishedAt": "0001-01-01T00:00:00Z",
        "Ghost": false
    },
    // ...
}]