Dockerノウハウ

ビルド時に特定のRUN以降のキャッシュを無効にする。

  • ARGを適当な場所に入れる。

ARG CACHEBUST=1
  • build時に引数を設定する。

$ docker build -t tagname --build-arg CACHEBUST=$(date +%s) .
  • 参考

    • https://www.chazine.com/archives/4038

コンテナを起動したままにする方法。

  • 以下で起動状態を維持できる。

$ docker run -itd {イメージ名}:{タグ} /bin/sh
$ docker exec -it {イメージ名}:{タグ} /bin/sh # その後、これでログイン
  • docker-composeで、tty:trueとしてもできる。

version: '2'
services:
  sample:
    image: {イメージ名}:{タグ名}
    container_name: sample_container
    tty: true
  • 参考

    • Dockerのコンテナを起動したままにする

      • https://qiita.com/reflet/items/dd65f9ffef2a2fcfcf30

コンテナの自動起動設定

  • docker-composeの場合、restart: alwaysを指定する。

  • docker runコマンド実行時に以下の引数を与えることで、自動起動にできる。

  • 既に起動済みのコンテナにリスタートする用に設定を変更する。

  • container一覧の自動起動設定を取得する。

  • 参考

    • https://www.pressmantech.com/tech/6522

composeでビルドする際に、image名を指定する

  • imageというパラメータを使えばよい。階層は、buildと同じ。

  • 参考

    • https://amaya382.hatenablog.jp/entry/2017/04/03/034002

composeでnvidia-dockerを使う

  • composeのversionが2の場合

  • composeのversionが3の場合

    • deploy配下が必要な部分

  • 以下を参考

    • https://qiita.com/routerman/items/c5f9d7b6d03e44de6be2

WSL2がdocker prune済みの領域を返してくれない

  • 参考

    • https://7me.nobiki.com/2020/10/12/wsl2-docker-re-use-disk-space/

GPGエラー

  • apt updateでGPG エラーが出たら

    • https://qiita.com/HS310164/items/15ebb375726ff4db4eb2

ML向けdockerの工夫点

  • 機械学習なdockerfileを書くときに気をつけとくと良いこと

    • https://nykergoto.hatenablog.jp/entry/2020/07/25/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AAdockerfile%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%A8%E3%81%8D%E3%81%AB%E6%B0%97%E3%82%92%E3%81%A4%E3%81%91%E3%81%A8%E3%81%8F%E3%81%A8%E8%89%AF%E3%81%84%E3%81%93

複数サービスの実行

  • 一つのスクリプトにまとめてそれを実行するのが推奨の方法。

      • https://docs.docker.jp/v19.03/config/container/multi-service_container.html

  • daemonで動かすために、通常のsystemctlコマンドはコンテナ内で普通使えない。

    • 一応使う方法はあるが、今度は通常通りには使えない。

      • https://qiita.com/flour/items/977abe462955e4285d0b

一般ユーザーをコンテナ内に作成する

  • 参考

    • https://qiita.com/nishina555/items/52aef60cfb82fb794b18

SSH接続できるコンテナ環境の作成

  • https://qiita.com/takat0-h0rikosh1/items/ae6d951a4b25d260894c

コンテナ内から別コンテナに通信する

  • 公式

    • https://docs.docker.jp/compose/networking.html#compose-links

  • コンテナサービス名:コンテナ側のポートでアクセスできる。

  • ホスト側のポートだと思ってたので要注意。

shared memory領域の拡張

  • Dockerのshared memoryはデフォルト64MBとなっている。

  • composeファイルに以下のように記載する。

  • 現在の割り当て確認には、コンテナ内でdfコマンドを使えばよい。

デザインパターン

歴史

Last updated