Tag: docker

Gentoo distccd Docker

背景 Gentoo の Docker イメージが作りたい。が、 オフィシャルの gentoo/stage3-amd64 の更新頻度が低い( 2021/08/08 時点で以前のアップデートが 1 年前だった ) portage 用のイメージ gentoo/portageがあり、こちらは毎日更新されている。 コマンドや glibc などが置かれているビルド済みの領域は gentoo/stage3-amd64 に置かれているため、実際に使うときには emerge –update –deep –newuse @world とリビルドが必要 リビルドするとイメージのサイズがかなり増える が、できればコンパクトなイメージにしたい。 結論(2021/08/17 時点) docker-slimを使ってイメージをコンパクトにする方法が一番コンパクトになった。 手法 サイズ 備考 ダウンサイジング前 3.04GB 不要なディレクトリの削除 1.8GB emerge が一時的に使うファイル郡 (上記ディレクトリ削除に加えて)不要なパッケージの削除 983MB パッケージ一覧を見ながら不要そうなパッケージを削除 docker-slim 39MB Dockerfile サンプル ここに公開した 手法の比較 不要なディレクトリ削除は emerge が一時的に使うファイル郡を削除するだけなので安全に使える。 Read more...

cheatsheet/docker

やりたいこと コマンド 備考 Github Container Registry にログイン `echo $CR_PAT docker login ghcr.io -u tin-machine –password-stdin` 環境変数 $CR_PAT にパーソナルアクセストークンが入っているものとする 参考 イメージのリストアップ `docker images tac` タグ付け docker tag イメージID ghcr.io/tin-machine/genpi64-distcc-docker:latest push docker push ghcr.io/tin-machine/genpi64-distcc-docker:latest https://github.com/[GithubのID]?tab=packages で docker レポジトリにアクセス可能 ポート開いて実行 docker run -p 3632:3632 ghcr.io/tin-machine/genpi64-distcc-docker:latest Read more...

cheatsheet/docker-slim

オプション 効果 –state-path docker-slim の状態が保持されるパス、docker-slim コマンドが書き込めるパスにする –target 元のイメージ –tag スリムになったイメージのタグ –http-probe デフォルトは enable、ただ distcc の場合、HTTP ポートではないので false にしている –exec docker-slim が動的にアプリケーションの振る舞いを解析する際に実行するシェルスクリプト 例 time docker build . -t genpi64-distcc-large:latest docker-slim --state-path ~/tmp/docker-slim build --target genpi64-distcc-large:latest --tag ghcr.io/tin-machine/genpi64-distcc-docker:latest --http-probe=false --exec "/need.bash" docker push ghcr.io/tin-machine/genpi64-distcc-docker:latest 参考 オフィシャル Read more...

docker

リファレンス  オフィシャル Dockerfile の見直す時に参考にする場所 Dockerfile のベストプラクティス その 1 ) 下記以外にもあるが私が忘れやすいポイントだけ .dockerignore ファイルを使う レイヤの数を最小に 複数行の引数 <= 引数はアルファベット順に 構築キャッシュ <= docker build で –no-cache=true とすると既存キャッシュを使わない CMD <= 常に CMD [“executable”, “param1”, “param2”…] のような形式で使うべきです。 WORKDIR <= 明確さと信頼性のため、常に WORKDIR からの絶対パスを使うべきです。 Distroless が使えないか検討する その 2 LABEL <= ロジェクト内でのイメージ管理をしやすくしたり、ライセンス情報の記録や自動化の助けとするなど、さまざまな目的があります。 参考 マルチステージビルドの利用 現実に効果的な Dockerfile を書くためには、 いつもながらトリッキーなシェルのテクニックや、 レイヤーができる限り小さくなるようなロジックを考えたりすることが必要でした。 つまり各レイヤーは、それ以前のレイヤーから受け継ぐべき生成物のみを持ち、 他のものは一切持たないようにすることが必要であったわけです。 本来 2 つあるRUNコマンドを Bash の&&オペレーターによって連結しています。 これを行うことで、イメージ内に不要なレイヤーが生成されることを防いでいます。 ただこれでは間違いを起こしやすく、保守もやりづらくなります。 保守がやりづらくなる、という認識は docker にもあるようだ。 Read more...

docker-compose/セキュリティ関連

Privileged(特権)ではない方法で、必要な分だけセキュリティを緩める 背景 Privileged(特権)を持った Docker コンテナは root 権限を備えたコンテナであり、 2021 年の Docker では Linux のセキュリティコンピューティングモード(secure computing mode; seccomp)と呼ばれる機構で制限がかけられている。 現在は 300 以上あるシステムコールのうち 44 が制限されている。 どのように制限をかけるか簡単に確認してみた。 環境 docker-compose の実行は Ubuntu Studio 21.04 コンテナは gentoo/stage3-amd64 docker-compose.yml に追加 制限する profile.json の雛形をダウンロード 雛形を修正 docker-compose.yml 修正 docker-compose を起動し直し 手順 wget https://raw.githubusercontent.com/moby/moby/master/profiles/seccomp/default.json default.json を確認する。このリストはホワイトリストで、このリストに含まれていない場合、ブロックされる。 つまり「何か権限が足りない場合」、「このリストに追加」したい。 ただ 2021/08/04 に確認した所、 CAP_SYS_PTRACE に process_vm_readv は追加されていたので、 一旦、修正は加えず、 profile.json を持ちいて起動するように docker-compose.yml を修正して起動する。 docker-compose の修正 version: "3" services: distcc: build: context: ./ container_name: 'distcc' security_opt: # <= security_opt を追加 - seccomp:default. Read more...

cheatsheet/docker-compose

便利な オプション 効果 images イメージ一覧 logs ログ port web 3000 ポート表示 build YAML に「build:」があれば、そのイメージをまとめてビルド pull YAML に「image:」があれば、そのイメージをまとめてプル up -d pull して build してからデーモンとして まとめて起動 up -d hoge hoge と依存するデーモン だけ を起動 stop まとめて終了 rm まとめて削除 キャッシュ使わないでビルド docker-compose build --no-cache 既存のコンテナを作り直す docker-compose up --force-recreate minecraft-touhou 参照 docker-compose コマンドまとめ - Qiita Read more...