5
3

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環境構築するときに(きっと)便利なコマンドたち

Posted at

この2日ほど、Dockerで色々試行錯誤してたときに便利だったコマンドたちです。

<none>でできたイメージを一括削除

何も考えずに作っているとVMの容量が100%になっちゃうときがあります(ありました)。
docker image pruneでキレイにできます。こちらはimagesではなくimageのようです。

$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:18abcdefghijklmnopqrstuvwxyz19abcdefghijklmnopqrstuvwxyz20abcdef
deleted: sha256:21abcdefghijklmnopqrstuvwxyz22abcdefghijklmnopqrstuvwxyz23abcdef
.
.
.

Total reclaimed space: 5.344GB

最後に空いた容量をドヤ顔で教えてくれます。

--rmオプションで終了時にコンテナ削除

基本ですが一応……
--rmオプションをつけると、コンテナを終了させたときにコンテナ自体も削除してくれます。
検証してるときは何度も同じコンテナ名で起動/終了をさせると思うので必須です。
ちなみに-dオプション(バックグラウンド起動)のときにも有効です。昔はできなかった気がするなぁと思って調べたらどっかのバージョンからできるようになったんですね。

commandline
$ docker run --rm -it jupyter/notebook:latest bash

ENTRYPOINTを無効にして起動

DockerfileにENTRYPOINTを指定して、docker run時に何かしらを一緒に起動することができますが、環境構築時はシェルを起動していろいろと検証を行いたいときがあるとおもいます。いちいちDockerfileをいじらなくても、起動時に無効にすることが可能です。

commandline
$ docker run --entrypoint '' --rm -it jupyter/notebook:latest bash

--entrypoint ''と明示的に空にすることで無効にできるようです。

起動しているコンテナからイメージ作成

あるコンテナで作業したのをイメージとして残しときたい、とか思ったときに便利なのがcommitです。

$ docker commit 33aabcdefg33 test-docker-commit-image
sha256:24abcdefghijklmnopqrstuvwxyz25abcdefghijklmnopqrstuvwxyz26abcdef
$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
test-docker-commit-image   latest              f2abcdefg1f        7 seconds ago       4.81GB

docker commit <コンテナID> <作成するイメージ名>で指定します。
当然ですが、Dockerfileから作っているわけではないので再現性がありません。

イメージからDockerfile作成

そんな感じでコンテナから残したイメージをDockerfile化したい、といったとき。
そのものずばりなコマンドはないのですが、historyである程度どういう作業をしたかが把握できます。ここからDockerfileに反映していくといいかなと思います。

$ docker history test-docker-commit-image:latest
IMAGE               CREATED              CREATED BY                                      SIZE                COMMENT
af14d0dd9f68        About a minute ago                                                   19.9MB              
b4abcdefgh51        6 hours ago          /bin/sh -c #(nop)  ENTRYPOINT ["/bin/sh" "...   0B                  
70abcdefgh99        6 hours ago          /bin/sh -c #(nop)  EXPOSE 8888/tcp              0B                  
26abcdefghe5        6 hours ago          /bin/sh -c #(nop) WORKDIR /notebook             0B                  
a6abcdefghaa        6 hours ago          /bin/sh -c #(nop)  VOLUME [/notebook]           0B     

--no-truncオプションをつけるとCREATED BYの部分が省略されずに表示されます。
ただ……試した環境が悪かったのか、手動でapt-get updateapt-get installしたのが表示されずあれ?となってます。ちょっと検証が必要ですがこういうコマンドもあるんだということで。

昔、太古のバイナリファイルしかない環境で、gdbとかnmとかobjdumpを駆使して泣きそうになりながらソースに反映したのを思い出しました……。

参考文献

https://qiita.com/DQNEO/items/e3a03a14beb616630032
https://qiita.com/nju33/items/733e16511f3b8e739d54

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?