kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Docker

Trivy の Misconfiguration Scanning で Dockerfile の設定ミスを検出しよう

Trivy の「Misconfiguration Scanning」を使うと Dockerfile の設定ミス(セキュリティ課題やベストプラクティス乖離など)を検出できる❗️今回は Trivy を活用した Dockerfile のスキャンを試した作業ログをまとめる aquasecurity.github.io ちなみに Trivy …

コンテナイメージの zstd 圧縮を試してみた

コンテナイメージを zstd (Zstandard) で圧縮するとどのぐらいサイズを小さくできるのかに興味があって試してみた❗️今回は BuildKit(docker buildx コマンド)で zstd 圧縮をする.zstd 自体の詳細は以下のドキュメントなどを読むと良さそう docs.docker.co…

Fargate でも使える!FireLens の init プロセスを活用して設定ファイルを S3 から読み込む

Amazon ECS で FireLens (Fluent Bit) を使ってログをルーティングするときに Fluent Bit の「設定ファイル」を書いて挙動をカスタマイズしたくなる場面は多くある.そして FireLens は設定ファイルタイプ config-file-type として s3 と file をサポートし…

Dockerfile の ARG を使って FROM を変数化する

コンテナイメージを作るときに Dockerfile の FROM に指定する「イメージ名」や「タグ名」をビルドごとに変えて設定したく,Dockerfile の ARG を使って実現できた.試しながら学んだポイントをまとめる❗️ Dockerfile 例 例えば,以下の Dockerfile では ARG…

Docker Desktop の Extensions を実装してみよう

2023年1月にリリースされた Docker Desktop v4.16.0 (release notes) で GA になった「Docker Extensions」の Extensions は段々と種類が増えてきて,Disk Usage / Aqua Trivy / LocalStack など,最近使う機会もあったりする.今回は "Quickstart" ドキュメ…

CKS 対策にもおすすめ /「Docker/Kubernetes 開発・運用のためのセキュリティ実践ガイド」を読んだ

コンテナワークロードにおけるセキュリティ対策の理解を深めるため「Docker/Kubernetes 開発・運用のためのセキュリティ実践ガイド」を読んだ.実は本書は 2021年7月頃 に1度読み終わっていたけど,実際に気になった部分を試したり,CKS (Certified Kubernet…

Dockerfile で新しく使えるようになった構文「ヒアドキュメント」で複数行の RUN をシュッと書く

2021年7月30日に Docker Blog に公開された以下の記事を参考に「Dockerfile で新しく使えるようになった構文 "heredocs"」を試す.Dockerfile で「ヒアドキュメント」を使うと,今まで RUN と && \ を組み合わせて複数コマンドを 1 レイヤーにまとめていた T…

docker run コマンドの --pid オプションで PID namespace を共有する

docker run コマンドで使える --pid オプションを試す.Docker では以下のドキュメントに書いてある通り,デフォルトでは PID namespace でコンテナ同士を隔離する.よって,コンテナ同士でプロセスを共有することはできず,各コンテナでは PID 1 を含む「プ…

Docker と seccomp を組み合わせてシステムコールを制限する

seccomp (Secure computing mode) はプロセスに対してシステムコールを制限する Linux kernel の機能で,今回は「Docker と seccomp」を組み合わせて試す.ドキュメントは以下にある. docs.docker.com seccomp デフォルトプロファイル まず,Docker はデフ…

簡単に Docker Hub の情報を取得できる Docker Hub CLI Tool(hub-tool コマンド)

「Docker Hub CLI Tool(hub-tool コマンド)」を使うと,Docker Hub の情報取得を CLI で行えるようになる.2020年12月にリリースされて,2021年1月に OSS として GitHub リポジトリも公開された.個人的には「イメージタグを検索する hub-tool tag ls コマ…

nginxdemos/nginx-hello イメージを使うと簡単に「コンテナ ID」を確認できる

コンテナを複数起動して,ロードバランサーなどを使って「期待通りに振り分けできているよ!」という挙動をデモで見せたいときがある.実際に最近あった.例えば nginx:alpine イメージを使うと,全て同じ index.html から Welcome to nginx! とレスポンスを…

Docker Compose で複数コンテナの準備完了を TCP / HTTP で待機できる「dockerize」を試した

Docker Compose を使って複数コンテナを起動するときに,タイミングによっては接続エラーになってしまう場合がある.具体的な例としては「データベースコンテナ」の起動が遅いために「アプリケーションコンテナ」が接続エラーになってしまうことが挙げられる…

GitHub Actions と hadolint を組み合わせて Dockerfile の静的解析を自動化しよう!

GitHub Actions と hadolint (Haskell Dockerfile Linter) を組み合わせて,今まで雑に実装してきた Dockerfile の静的解析を自動化する環境を作った.できる限り Dockerfile Best Practices を意識していることもあり,警告はあまり多く出なかったけど,や…

Dockerfile に HEALTHCHECK を設定すると「ヘルスチェック機能」が使えるようになる

今回は Docker で使える「ヘルスチェック機能」を試す.Release Note を読むと,機能としては Docker 1.12 から使えるらしく,3年前からあったなんて...!仕組みとしては,Docker デーモンからコンテナに指定したコマンドを定期的に実行する. Dockerfile 構…

Docker Experimental Features を有効化すると使える docker build の --squash オプション

Docker コンテナを本番運用する場合,コンテナイメージのサイズをできる限り小さくすることを意識すると思う.具体的には「レイヤー」を意識することにより,Dockerfile に記述する RUN を減らしたり,一時ファイルを消す場合に同じ RUN で rm をする.最近…

さぁ!コンテナを設計しよう /「分散システムデザインパターン」を読んだ

4月に出版された「分散システムデザインパターン」を読んだ.サブタイトルに「コンテナを使ったスケーラブルなサービスの設計」とある通り,コンテナを設計/運用するときに,どのようなデザインパターンを知っておくと良いのか?という点を学べる内容になっ…

FaaS フレームワーク「OpenFaaS」を実践的に学べる公式ワークショップ

Docker Swarm と Kubernetes をサポートしている FaaS フレームワークとして「OpenFaaS」がある.CNCF Cloud Native Landscape を見ても Serverless カテゴリに入っている.OpenFaaS は前から気になっていたけど,今まで試したことがなく,最近 GitHub に Op…

Docker 公式のセキュリティ診断ツール「Docker Bench for Security」を試した

最近 Docker 関連のセキュリティツールを調査する機会があり,今回は「Docker Bench for Security」を試したログを残しておく.「Docker Bench for Security」は Docker から公式に提供されているセキュリティ診断ツールで,具体的には「CIS Docker Communit…

HTML の Lint ツール「htmllint」を CircleCI で実行する

HTML を実装しながら Lint を実行するため「htmllint」を使うことにした.類似ライブラリに「HTMLHint」もある. github.com htmllint と htmllint-cli 「htmllint」を CLI で実行する場合は「htmllint-cli」を使う. github.com 以下のように npm で htmlli…

依存パッケージを更新するサービス「Dependabot」で Dockerfile の更新をチェックする

Dependabot は依存パッケージの更新を定期的にチェックし,更新があった場合にプルリクエストを作成してくれるサービスで,現時点で「Ruby, JavaScript, Python, PHP」など,多くのプログラミング言語がサポートされている.他にも「Go, .NET」などは BETA &…

コンテナのデザインパターンを学べる論文「Design patterns for container-based distributed systems」を読んだ

2016年に USENIX Conference で発表された論文「Design patterns for container-based distributed systems」を読んだ.タイトルの通り,コンテナのデザインパターンがまとまっていて,これからコンテナ設計をする人も,既にコンテナを運用している人も,デ…

GitHub の README.md をバッジでオシャレにできる Shields.io と dockeri.co

最近 GitHub リポジトリに「バッジ」を設定するため「Shields.io」というサービスを使った.README.md をオシャレにできて,とても便利だったので紹介しようと思う.ただ数年前からあったサービスらしく,今まで使ったことがなかった! shields.io バッジの…

たった 19.9MB!mkr の公式 Docker イメージが公開された

今月のアップデートで,Mackerel コマンドラインツール mkr の公式 Docker イメージが公開された. mackerel.io mkr monitors { pull / diff / push } 2年前に記事を書いているけど,CircleCI と mkr を組み合わせて Infrastructure as Code にした Mackerel…

「Japan Container Days v18.04」に参加して1日中コンテナのことを考えていた

今日は「Japan Container Days v18.04」に参加してきた.正直「Container Days」と言うよりも「Kubernetes Days」って感じだったけど,1日ずっとコンテナのことばかりを考えていた.発表テーマも多岐にわたっていて,バランスが非常に良かったと思う.僕が参…

ECS コンテナインスタンスをモニタリングするときは mackerel-agent v0.49.0 以上にすると良さそう

例えば ECS コンテナインスタンスなど,Docker ホストとして使っているインスタンスを Mackerel でモニタリングする場合,以下のように disk と interface と filesystem のメトリクスが非常に多くなってしまう.Mackerel では,メトリクス数が 200 を超える…

事前にデータ投入をした MySQL Docker イメージを作る場合は /docker-entrypoint-initdb.d を活用すると便利

事前にデータ投入をした MySQL Docker イメージが必要になり,最初は「Dockerfile で頑張る感じかなぁ...」なんて考えながら調査をしていたら,公式の MySQL Docker イメージに「カスタムスクリプトを実行する機能」が用意されていることを知って,全て解決…

Mackerel で ECS の動的ポートマッピングに対応したタスクのメトリクスを取得する

前回書いた記事に続き,Mackerel を使って ECS のメトリクスを取得する方法を検証していて,今回は「パターン2 : コンテナインスタンスに mackerel-agent をインストールする」の検証結果をまとめる.前提としては前回と同じで,ALB の動的ポートマッピング…

mackerel-agent タスクをコンテナインスタンスごとに起動して ECS のメトリクスを取得する

最近 Mackerel を使って ECS のメトリクスを取得する方法を検証している.ポイントとしては,ALB の動的ポートマッピングを使うところで,コンテナインスタンスの中で複数のタスク(コンテナ)が起動されるため,全てのタスクのメトリクスを取得する必要があ…

docker login をせずに ECR を操作できる awslabs/amazon-ecr-credential-helper

3月末に参加した「JAWS-UG コンテナ支部」で知った ECR (Amazon EC2 Container Registry) の便利ツール Amazon ECR Docker Credential Helper を試した.Amazon ECR Docker Credential Helper を使うと ECR のログインを省略できる. kakakakakku.hatenablog…

CircleCI + ecs-deploy で ECS にデプロイをする

引き続き ECS のデプロイを調査していて,今回は導入された話を比較的よく聞く ecs-deploy を試した.AWS CLI と jq に依存しているけど,Shell 100% で実装されているため,実行環境の構築が不要という手軽さが1番のメリットだと思う. github.com ちなみに…