地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

たまーに使うdockerコマンドオプション

たまーに使う系のオプションシリーズ

環境

Docker version 19.03.5, build 633a0ea

build

--secret

Dockerfileの中でプライベートリポジトリなどにssh鍵が必要なケースで使用可能。

単純にADD/COPYでも解決することができるがDockerfileの書き方次第では(仮に削除するようにしても)レイヤ情報として下位層には残ってしまう。

それを回避することができるオプション。(Dockerfileの場合は現在はまだ非推奨命令となっているので1行目に下記の記載が必要。)

## Dockerfile

# syntax = docker/dockerfile:experimental
RUN --mount=type=secret,target=/root/.ssh/鍵のパス

## CLIから実行
$ docker build -t hoge001 --secret id=hoge,src=/コンテナにコピーしたいパス

Dockerfileを改善するためのBest Practice 2019年版

--build-argやらでhistoryに残さないやり方や--squashでレイヤを圧縮するってやり方が今までありましたが今後はこちらが主流になるとのこと。

次バージョンあたりからは標準命令に追加されるのでしょうか?(この辺はよくわかってない。)

--security-opt

SELinuxでは「ラベル」という属性を各種リソースに対し指定するとで、プロセスごとの利用可能リソースを制限できる。

また、AppArmorではプロセスに対し「ドメイン」という属性を設定し、それに対応するプロファイルと呼ばれる設定ファイル中で各種リソースに対するアクセスの可否を記述することで、

各プロセスが利用できるリソースを制限できる。脳死SELinuxを切ったりしてるので正直あまり使わないけどLPIC 3 303あたりの勉強ではとても重宝した。

--security-opt="label=user:USER"   : コンテナの user ラベルを指定
--security-opt="label=role:ROLE"   : コンテナの role ラベルを指定
--security-opt="label=type:TYPE"   : コンテナの type ラベルを指定
--security-opt="label=level:LEVEL" : コンテナの lovel ラベルを指定
--security-opt="label=disable"     : コンテナのラベル割り当てを無効化
--security-opt="apparmor=PROFILE"  : コンテナに適用する apparmor profile を指定
--security-opt="no-new-privileges" : コンテナが新しい権限を得るのを無効化
--security-opt="seccomp=unconfined": コンテナ用の seccomp 制限を無効化
--security-opt="seccomp=profile.json": sccomp フィルタで使うホワイトリスト syscall seccompo Json ファイルを指定

RUN

--oom-score-adj

コンテナに対してホスト側の OOM 優先度を設定 ( -1000 ~ 1000 を指定)

Linux KernelのMemory Overcommitに関連する話でコンテナがOOMの対象になってkillされた際のテストを行うことができる。

本来の動きとしてOOM Killerによって選択されないように優先度を低くするためのオプション(負の値を設定)

単純にOOMの対象外とするならば--oom-kill-disableをつけて実行する方がシンプルで分かりやすい。

qiita.com