Docker is an invaluable tool for managing containers, but it can be challenging to grasp its inner workings, especially for newcomers. While modern hosting platforms like Vercel and Netlify often eliminate the need for writing Dockerfiles for NodeJS processes, understanding Docker optimization becomes crucial when handling your infrastructure. By achieving optimal efficiency, you can save both tim
Building minimal Docker images to deploy Rust brings up a lot of benefits: it's not only good for security (reduced attack surface) but also to improve deployment times, reduce costs (less bandwidth and storage), and reduce the risk of dependency conflicts. Table of contents Code FROM scratch (15.9MB) FROM alpine (21.6MB) FROM gcr.io/distroless/cc (33MB) FROM buster-slim (79.4MB) Conclusion The co
HERP における開発では Nix が広く活用されている.Nix は非常に便利な代物なのだが,ドキュメントの貧弱さ,急峻な学習曲線,企業における採用事例の乏しさなどが相まって,広く普及しているとは言い難く,ましてや国内企業での採用事例を耳にする機会はほとんどない.しかし,Nix の利便性は,複数人での開発においてこそ,その本領が発揮されると考えている.この記事は,HERP における活用事例の紹介を通じて,Nix の利便性ならびに企業での活用可能性について紹介することを目的としている. Nix とは# Nix は "the purely functional package manager" と銘打たれたパケッジマネジャーである.GNU Linux および macOS 上で利用できる. ビルド# Nix は the purely functional "package manager" なの
これは、node.js on Docker の構成で 2〜3日ハマってしまった時の話です。忘れないように記録しておきます。なお、将来は改善・改良されているかもしれませんのでご注意ください。 何が起こったのか node.js の Docker コンテナを、"docker stop" でコンテナを止めようとしても正常に停止せず、10秒くらい経過した後に強制終了してしまうという症状が発生しました。いつも等しくそうなるので、状態とかタイミングとかそういった要因ではなく、そもそも根本的に何かがおかしいと考えられます。 1. node on Docker の構成 Docker コンテナ上で node.js が動いているだけの極めてシンプルな構成でこの問題が発生しました。 node.js で動くアプリは、"Hello World" を出すだけの超簡単な hello.js です。こんな感じです。 cons
この記事は Kubernetes2 Advent Calendar の20日目の記事です。 ここで書いたことは 2019/12/20 時点での情報を元にしており、今後新しいバージョンで仕様が変更になる可能性があるのでご注意ください。 はじめに kaniko とはコンテナビルドツールの一つで、docker のセキュリティやキャッシュの問題を解決するために開発されました。 この記事では、 docker のセキュリティの問題について軽く紹介した後に、それを kaniko がどのように解決したかを説明します。 また、最後に使用中に発生した問題もご紹介します。 kaniko とは? https://github.com/GoogleContainerTools/kaniko kaniko とは docker daemon に依存せずにコンテナイメージがビルドができるツールです。 コンテナイメージとし
golangで書いたプログラムをDockerで動かしOOMが発生した際になるべく情報を残して殺される方法を紹介します。 2020/08/16追記: この記事の内容はgolangに関してはやや現実的ではなくなってしまいました。 詳しくは続編を参照してください。 TL;DR golang製のプログラムは仮想メモリ(VSZ)の確保に失敗するとgoroutineのダンプを吐いて死ぬ DockerのOOMはRSSベースで検出時にSIGKILLを投げてくる Docker利用時にVSZで制限をかけるスクリプトを書いた golang製のプログラムはlinux-amd64において最低でも101MBのVSZを要求する VSZの制限がそれより小さいと当然起動できない 実際のRSSは3MB程度で起動する Background コンテナ内で動いているプロダクション上のgolang製のプログラムが時々OOMに殺されて
Utility to simplify running applications in docker containers. dockerize is a utility to simplify running applications in docker containers. It allows you to: generate application configuration files at container startup time from templates and container environment variables Tail multiple log files to stdout and/or stderr Wait for other services to be available using TCP, HTTP(S), unix before sta
今まで Docker Hub 上で最新の Vim のビルドが行われるように設定していたが、ふと思い立って過去のバージョンについても一通りタグに残ってると良さそうだと思って設定した際の記録。 ちなみにこの作業を開始したのは 2018 年 1 月です。どんだけかけとるんだ。 作業前の状態 Docker には Build Trigger 機能があり、URL を叩くことで任意のタイミングでビルドを走らせることができる。 この機能を使い、IFTTT の RSS Feed サービスで Vim のコミット Feed を監視して、新しいコミットがあった際にトリガーを実行し、Webhooks サービスを使って Docker の Build Trigger の URL を叩くことで、latest が常に最新の Vim のバージョンになるようにしていた。 これだと常に最新版の Vim のイメージは作られるが、過
Googleは2018年7月10日(米国時間)、コンテナを効果的に作成するための7つのベストプラクティスを「Google Cloud Platform」の公式ブログで紹介した。概要は以下の通り。 (1)コンテナごとに1つのアプリケーションをパッケージングする コンテナは、内部で1つのアプリケーションが実行されるときに最も効果的に機能する。このアプリケーションは、親プロセスが1つでなければならない。例えば、同じコンテナでPHPとMySQLを実行してはならない。コンテナごとに1つのアプリケーションをパッケージングすれば、アプリケーションのライフサイクルに合わせてコンテナのライフサイクルを管理できる。 (2)PID 1とシグナル処理、ゾンビプロセスを適切に扱う KubernetesとDockerは、コンテナ内のアプリケーションを停止するために、Linuxシグナルを送信する。このシグナルは、プロセ
Dockerコンテナでプログラムを定期実行したいとき、それぞれの言語で実装されたタスクスケジューラを使うほか、手っ取り早くcronを使ってしまう方法もあります。しかしDockerで使うにはやや面倒な点があります。 cronで実行するプログラムにコンテナに設定した環境変数を渡したい環境変数が独立しているのはcronのよくあるハマりどころですねファイルに書き出して読み込んで、とやるのは面倒ログは標準出力・標準エラー出力に書き出したい標準出力に出せばdocker logsで扱えるし、ファイルだとローテートが面倒このようなとき、BusyBoxに含まれるcrondを使うと、以上の課題を解決してシンプルに定期実行することができます。 インストール#Debian系ではapt-get install busybox-staticでインストールし、busybox crondで起動します。 Alpine Li
3月末に参加した「JAWS-UG コンテナ支部」で知った ECR (Amazon EC2 Container Registry) の便利ツール Amazon ECR Docker Credential Helper を試した.Amazon ECR Docker Credential Helper を使うと ECR のログインを省略できる. kakakakakku.hatenablog.com github.com 前提 以下のバージョンを満たす必要がある. Docker 1.11 以上 Go 1.5 以上 今回は以下のバージョンで試した. Docker 17.05 Go 1.8.1 普通に ECR を使う場合 get-login — AWS CLI 1.16.106 Command Reference aws ecr get-login コマンドを叩くと返ってくる docker login
以前に私が書いた「 Dockerの本番運用:失敗の歴史) 」という記事は、非常に多くの反響を呼びました。 その後、長い議論を交わして、何百件ものフィードバックや何千件ものコメントを読み、さまざまな人々や主要事業者とも顔を合わせました。Dockerでの試みが増えるほど、その失敗談は増えていきます。そうした現状を、今回アップデートしておきたいと思います。 この記事では、最近の交流や記事から得た教訓を紹介しますが、その前に簡単におさらいをして軽く背景を説明しましょう。 免責事項:対象読者 たくさんのコメントから、世の中には10種類の人々が存在するということが明らかになりました。 1) アマチュア 実際のユーザがいない試用版のプロジェクトやサイドプロジェクトを実行している人々です。Ubuntuのベータ版を使用するのが当然だと考えており、「安定したもの」は古いものと見なすようなタイプです。 注釈:書
DockerHub の言語系のイメージは(alpine のもあるけれども)debian ベースのものが多いですが cron でスクリプトを定期的に実行しようとして、 RUN apt-get update && apt-get install -y cron とかすると、 cron から実行するスクリプトにコンテナの環境変数が渡されない コンテナの開始時に環境変数をファイルに書いて cron から実行するスクリプトで読んだり スクリプトの標準出力や標準エラーがどこに行くのかよくわからない スクリプトはログをファイルに出力して tail -f したり そのログだれがローテートするの? とか、とてもつらそうです。 ので、cron の代わりに michaloo/go-cron を使ってみたりしてたのですが、下記の記事を見まして、 alpine linuxでcron用コンテナを作る - Qiita
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く