Docker

HOME > Docker

Docker:記事リスト

Dockerのカテゴリーには以下の記事がリストされています。

Dockerボリュームのバックアップと復元|named volumeのデータを別サーバーへ移行する実践手順

「本番サーバーのDockerコンテナを別のサーバーへ移行したい。でもvolume内のDBデータはどうやって持っていけばいい?」
「docker-compose downしたら、MySQLのデータが全部消えた。バックアップはどう取ればいい?」

コンテナを止めてもデータが消えない仕組みがnamed volumeです。しかし、サーバー自体が壊れた場合や誰かがdocker volume rmを実行してしまった場合は、named volumeごとデータが失われます。

この記事では、named volumeをtarアーカイブでバックアップする手順と、別サーバーへの移行・復元の方法を解説します。コンテナを停止してバックアップする安全な方法、停止できない場合のダーティコピー、cronによる定期バックアップ自動化、PostgreSQLの実践例まで体系的にカバーします。

実行環境:Rocky Linux 9.4 / Ubuntu 24.04 LTS、Docker 26.1.x

この記事のポイント

・named volumeのバックアップは docker run --rm -v で一時コンテナを使うのが定石
・本番DBは必ず停止バックアップ。停止できない場合は pg_dump / mysqldump を使う
・別サーバーへの移行は tar + rsync/scp の2ステップで完結する
・cronで夜間に自動バックアップすれば、誤削除・障害時に数分で復元できる

続きを読む "Dockerボリュームのバックアップと復元|named volumeのデータを別サーバーへ移行する実践手順"

Dockerのgraceful shutdown設計|STOPSIGNALとstop_grace_periodでコンテナを安全に終了させる方法

「コンテナを止めるたびにリクエストが強制切断される」「デプロイ後に処理中のデータが壊れる」
その原因の多くは、docker stopがSIGKILLで強制終了しているからではなく、SIGTERMがアプリに届いていないからです。

docker stopは最初にSIGTERMをコンテナのPID 1プロセスに送り、指定時間(デフォルト10秒)が経過してもコンテナが終了しない場合にのみSIGKILLで強制終了します。アプリがSIGTERMを正しく受け取って後始末を完了できれば、強制終了は発生しません。

この記事では、PID 1問題の原因と解決策(tini・init: true)、DockerfileのSTOPSIGNAL命令、Composeのstop_grace_periodの設定を実測例つきで解説します。動作確認はUbuntu 24.04 LTS + Docker 26.1で実施済みです。

この記事のポイント

・docker stopはSIGTERM→10秒待機→SIGKILLの順で終了させる
・PID 1問題でSIGTERMが届かないことが最多の原因
・STOPSIGNALとstop_grace_periodで終了挙動を制御する
・tiniとinit: trueでPID 1問題を根本解消できる

続きを読む "Dockerのgraceful shutdown設計|STOPSIGNALとstop_grace_periodでコンテナを安全に終了させる方法"

docker compose secretsでパスワードを安全に渡す方法|environmentを使わないシークレット設計

「docker-compose.ymlのenvironmentにデータベースのパスワードを直書きしているが、gitにプッシュしても問題ないか?」
「コンテナの中に入ってenvコマンドを実行すると、パスワードを含む環境変数が全部見えてしまう。もっと安全な管理方法があるはずだが、何を使えばいいかわからない」

環境変数でパスワードを渡すと、docker inspectコマンドでコンテナの詳細情報を表示した際に機密情報が平文で表示されます。さらに、docker-compose.ymlをgitで管理していれば、リポジトリの履歴にパスワードが永久に残るリスクも伴います。

この記事では、Docker Composeが提供するsecrets機能を使い、パスワードやAPIキーなどの機密情報をコンテナへ安全に渡す設計を解説します。ファイルベースのsecrets設定、PostgreSQLへの実践適用、複数シークレットの管理、よくあるエラーの対処まで、実際の設定ファイルと動作確認の出力例を交えて網羅します。動作確認環境はUbuntu 24.04 LTS、Docker Engine 27.1、Docker Compose v2.29です。

この記事のポイント

・docker compose secretsはパスワードを /run/secrets/ にtmpfsでマウントする
・docker inspectで機密情報が見えない安全な設計になっている
・compose.ymlのsecretsセクションにfile:でパスを指定するだけで使い始められる
・POSTGRES_PASSWORD_FILE等の_FILE変数対応イメージとそのまま連携できる

続きを読む "docker compose secretsでパスワードを安全に渡す方法|environmentを使わないシークレット設計"

docker contextで複数サーバーのDockerをローカルから一元管理する方法|ssh contextの設定とTLS接続の実践手順

「検証サーバーと本番サーバー、それぞれでDockerを操作するたびにSSHでログインし直している...」
サーバーが増えるほど、この手間は比例して増えていきます。DOCKER_HOST=ssh://...を毎回設定するのも使えますが、スクリプトに埋め込んだ瞬間に管理が難しくなります。

この記事では、docker contextコマンドを使って複数のDockerホストをローカルのPCから一元管理する方法を解説します。SSH contextの作成・切り替えから複数ホストの運用Tips、TLS接続によるセキュアな設定まで、RHEL 9.4 / Ubuntu 24.04 LTSで動作確認した実機の出力例とともに紹介します。

この記事のポイント

・ docker context createでSSH contextを作成し、複数Dockerホストを名前で切り替えられる
・ docker context useで対象ホストに切り替えると、以降のdockerコマンドが全てリモートに向く
・ ~/.ssh/configとの組み合わせで接続先の管理をシンプルに一元化できる
・ DOCKER_CONTEXT環境変数でスクリプト・CI/CDにも安全に組み込める

続きを読む "docker contextで複数サーバーのDockerをローカルから一元管理する方法|ssh contextの設定とTLS接続の実践手順"

Docker Composeのネットワーク設計|サービス名での名前解決・カスタムネットワーク・external接続の実践手順

「docker compose upしたのに、コンテナ同士が通信できない」
「サービス名でDBにアクセスできたが、なぜ動くのか仕組みがわからない」
そんな疑問を抱えたまま使い続けているエンジニアは少なくありません。

Docker Composeはデフォルトで専用ネットワークを自動作成し、サービス名をそのままDNSホスト名として機能させます。しかし本格的な環境では「DBをフロントエンドから直接見えなくしたい」「別のComposeプロジェクトのネットワークに接続したい」といった要件が必ず出てきます。

この記事では、Docker Composeのネットワークの仕組みをゼロから整理し、カスタムネットワーク定義・複数ネットワークによる通信分離・external接続の実践手順まで、実サーバーの確認例を交えて解説します。

動作確認環境: Rocky Linux 9.4 / Ubuntu 24.04 LTS(Docker Engine 26.x・Docker Compose Plugin v2.27)

この記事のポイント

・Composeはdocker compose up時に専用ブリッジネットワークを自動作成しサービス名をDNSホスト名にする
・networks:ブロックでカスタムネットワークを定義しサービスに複数割り当てると通信経路を分離できる
・external: trueでComposeの外側に存在する既存Dockerネットワークに接続できる
・docker network inspectとdocker compose execで通信障害を迅速に切り分けられる

続きを読む "Docker Composeのネットワーク設計|サービス名での名前解決・カスタムネットワーク・external接続の実践手順"

DockerからKubernetesへ進む最初の一歩|minikubeとkindで学ぶコンテナオーケストレーション入門

「docker runは使えるけど、コンテナが増えてきたらどうやって管理すればいい?」
DockerでWebアプリを動かせるようになると、次の壁として現れるのがコンテナ数の増加です。コンテナが3つ、5つ、10と増えてくると、手作業での起動・停止・再起動は現実的ではなくなります。

そこで登場するのがKubernetes(クバネティス)です。Kubernetesはコンテナを自動で管理・スケールさせる「コンテナオーケストレーター」で、現在の本番インフラの標準となっています。

この記事では、手元のPCでKubernetesを動かせる minikubekind を使い、インストールからPod・Deployment・Serviceの作成まで実際のコマンド出力を交えて解説します。

動作確認環境: Rocky Linux 9.4 / Ubuntu 24.04 LTS(minikube v1.33.1・kind v0.23.0・kubectl v1.30.2)

この記事のポイント

・minikube start 1コマンドでKubernetesクラスターが手元のPCで起動できる
・kubectl apply でPodやDeploymentをYAMLファイルから作成・管理できる
・kindはDockerだけで動く軽量クラスターでCI環境のテストに適している
・minikubeとkindの違いを理解して用途に合わせて使い分けられる

続きを読む "DockerからKubernetesへ進む最初の一歩|minikubeとkindで学ぶコンテナオーケストレーション入門"

DockerイメージをCIで自動ビルドしてレジストリへプッシュする手順|GitHub Actionsのタグ戦略とキャッシュ活用

「DockerfileはできたのにCIでビルドする方法がわからない」
「毎回手でdocker buildしてdocker pushするのが面倒だし、push忘れが怖い」

Dockerイメージを手動でビルド・プッシュしていると、誰かが古いイメージのまま本番にデプロイしてしまうリスクがあります。GitにコードをプッシュしたタイミングでDockerイメージが自動的にビルドされてレジストリへ登録される仕組みを作れば、この問題は根本から解消されます。

この記事では、GitHub ActionsでDockerイメージを自動ビルドしてghcr.io(GitHub Container Registry)またはDocker Hubへプッシュする手順を解説します。タグ戦略(semver・sha・latest)、BuildKitのキャッシュ活用(cache-from/cache-to)、よくあるエラーと対処法まで、実際のworkflow.ymlサンプルとともに網羅します。動作確認環境はGitHub Actions ubuntu-24.04 runner、Dockerイメージのベースはubuntu:24.04です。

この記事のポイント

・docker/build-push-actionでビルド~プッシュをワンステップで自動化できる
・ghcr.ioはGITHUB_TOKENだけで認証できるため外部シークレット不要
・cache-type=ghaを使うとGitHub Actionsのキャッシュでビルド時間を大幅短縮できる
・タグはgit sha・semverタグ・latestを組み合わせて再現性と利便性を両立する

続きを読む "DockerイメージをCIで自動ビルドしてレジストリへプッシュする手順|GitHub Actionsのタグ戦略とキャッシュ活用"

docker saveとdocker loadでイメージをオフライン移送する方法|閉域網サーバーへの持ち込み運用

「閉域網のサーバーにDockerイメージを持ち込みたいが、docker pull が使えない」
インターネット非接続の環境(閉域網・エアギャップ環境)でコンテナを動かす場面は、金融・官公庁・製造業の制御系など、セキュリティ要件の厳しい現場では決して珍しくありません。

この記事では、docker savedocker load を使い、インターネット接続のある環境でイメージをtarファイルに書き出し、閉域網サーバーへ安全に持ち込む手順を解説します。
基本コマンドの構文から、複数イメージの一括保存・gzip圧縮による容量削減・転送後の整合性確認・よくあるエラーの対処法まで、現場で即座に使える内容を網羅します。

動作確認環境: Rocky Linux 9.4 / Ubuntu 24.04 LTS(Docker Engine 26.x)

この記事のポイント

・docker save -o image.tar イメージ名 でイメージをtarファイルに保存できる
・docker load -i image.tar でtarファイルからイメージを復元する
・gzipと組み合わせると転送ファイルサイズを50~70%削減できる
・docker images --digests で転送前後のダイジェスト一致を確認して整合性を保証する

続きを読む "docker saveとdocker loadでイメージをオフライン移送する方法|閉域網サーバーへの持ち込み運用"

DockerのENV・ARG・env_fileを正しく使う設計|ビルド時と実行時の値の渡し方とsecrets

「DockerfileにAPIキーを直書きしたら、git logにずっと残ってしまった」
「ENVとARGの違いがよくわからず、とりあえずENVを使っているが本当に安全なのか不安だ」

コンテナ開発を進める中で、環境変数とシークレットの扱いに迷うエンジニアは多い。ENVとARGは書き方が似ているが、値が「どのタイミングで」「どこに」残るかがまったく異なる。誤った使い方をすると、APIキーやパスワードがイメージレイヤーに焼き込まれ、docker historyコマンド一発で誰にでも見えてしまう。

この記事では、DockerのENV・ARG・env_fileの正しい使い分けと、BuildKit secretsを使ったシークレット管理を実例で解説する。docker composeでの設計パターンとよくあるミスへの対策も含め、RHEL 9.4 / Ubuntu 24.04 LTSで動作確認済みだ。

この記事のポイント

・ENVは実行時の変数、ARGはビルド時限定でイメージに残らない
・ARGにシークレットを渡すとdocker historyで漏洩する危険がある
・env_fileで.envを外部化し必ず.gitignoreに追加する
・BuildKit --mount=type=secretならレイヤーにシークレットが残らない

続きを読む "DockerのENV・ARG・env_fileを正しく使う設計|ビルド時と実行時の値の渡し方とsecrets"

docker buildxでマルチアーキテクチャイメージをビルドする方法|ARM・x86両対応のビルド設計

「Raspberry Pi向けに作ったDockerイメージが、x86の本番サーバーでまったく動かない」
「AWS GravitonのARM64インスタンスに移行したいが、既存のイメージがamd64専用で使えない」

そう困っているなら、docker buildxのマルチアーキテクチャビルドが解決策です。
docker buildxを使えば、linux/amd64とlinux/arm64の両方に対応したイメージを1回のビルドで作成し、Docker Hubにpushできます。

この記事では、BuildKitとbuildxの関係から、QEMU設定、builderインスタンスの作成、実際のマルチプラットフォームビルド、Dockerfile内のARG TARGETARCH活用まで、実際のコマンド出力を交えて解説します。

動作確認環境: Ubuntu 24.04 LTS / Rocky Linux 9.4(Docker Engine 27.x・buildx v0.17.x)

この記事のポイント

・docker buildx build --platform linux/amd64,linux/arm64 で両アーキに対応できる
・QEMUを使うとx86マシン上でもARMイメージをクロスビルドできる
・ARG TARGETARCHをDockerfileに組み込むとアーキ別バイナリ配置を自動化できる
・--push オプションでビルドと同時にDocker Hubへマルチプラットフォームpushできる

続きを読む "docker buildxでマルチアーキテクチャイメージをビルドする方法|ARM・x86両対応のビルド設計"

プライベートDockerレジストリを構築する方法|registryコンテナの運用とDocker Hub rate limit対策

「Docker Hubのpull上限(rate limit)に引っかかって、CIパイプラインが止まった」「社内で作ったカスタムイメージをインターネット上に置きたくない」——
こういった問題に直面したことはないだろうか。

Docker Hubは無料プランだと6時間ごとに100回のpull制限がある。開発チームが増えてくると、CIが同時走行するたびにtoomanyrequestsエラーが返ってきてビルドが止まる。

この記事では、Dockerが公式に提供するregistryコンテナを使って、社内LAN上にプライベートDockerレジストリを構築する方法を解説する。docker composeによる基本構成から、TLS証明書・htpasswd認証によるセキュア化、さらにDocker HubのPull through Cacheとして使う設定まで、RHEL 9.4 / Ubuntu 24.04 LTSで動作確認した実行例付きで紹介する。

この記事のポイント

・docker run registry:2 で5分以内にプライベートレジストリを起動できる
・push/pullはイメージに「ホスト:ポート/」タグを付けるだけでよい
・TLS + htpasswd認証でセキュアな社内専用レジストリを構築できる
・pull through cache設定でDocker Hub rate limitを実質回避できる

続きを読む "プライベートDockerレジストリを構築する方法|registryコンテナの運用とDocker Hub rate limit対策"

Dockerコンテナの自動起動設計|restart policyとsystemd連携でサーバー再起動に耐える構成

「サーバーを再起動したら、起動していたDockerコンテナが全部止まっていた」——本番環境での深夜呼び出しの原因として、実際によく起こる問題です。

Dockerコンテナはデフォルトではサーバー再起動後に自動で起動しません。docker restart policy(再起動ポリシー)を正しく設定することで、Dockerデーモンが起動するたびにコンテナも自動で起動させることができます。

この記事では、restart policy の4種類と使い分け、docker-compose.yml での設定方法、systemd ユニットファイルによるコンテナ管理、そして本番環境での推奨設計パターンを段階的に解説します。RHEL 9.4 / Ubuntu 24.04 LTS + Docker 26.x で動作確認済みです。

この記事のポイント

・docker restart policy の unless-stopped がサーバー再起動後の自動起動に本番推奨
・4種類(no / on-failure / always / unless-stopped)を用途に応じて使い分ける
・docker-compose.yml の restart フィールドで複数コンテナに一括設定できる
・起動順序や依存関係の詳細制御が必要な場合は systemd ユニットファイルが有効

続きを読む "Dockerコンテナの自動起動設計|restart policyとsystemd連携でサーバー再起動に耐える構成"

docker system pruneでディスク容量を管理する方法|overlay2肥大の原因調査と安全な削除手順

「df -hで/var/lib/dockerが80%を超えた」「docker psで稼働中のコンテナはほとんどないのに、ディスクが膨らみ続けている」

Dockerを運用していると、こういった状況に必ずぶつかります。原因のほとんどは、停止済みコンテナ・dangling image(タグのない中間イメージ)・未使用ボリュームが/var/lib/docker/overlay2に蓄積していることです。

この記事では、docker system dfで現状を正確に把握してから、docker system pruneの各オプション(--all・--volumes・--filter)を使い分けて段階的に削除する手順を解説します。Ubuntu 24.04 LTS / RHEL 9.4の実機出力を交えながら、CI/CD環境や本番環境での定期prune設計まで網羅します。

この記事のポイント

・overlay2肥大の原因は停止コンテナ・dangling image・未使用volumeの3つ
・docker system dfで種別ごとの使用量を確認してから削除する
・docker system prune --all --volumesで一括削除できるが本番では段階的に実行する
・--filterで「until=168h」と指定して直近7日以上のリソースのみ削除できる

続きを読む "docker system pruneでディスク容量を管理する方法|overlay2肥大の原因調査と安全な削除手順"

trivyでDockerイメージの脆弱性をスキャンする方法|CI組み込みとベースイメージ更新の運用

「Dockerイメージをpullしてコンテナを動かしていたら、セキュリティ監査で「このベースイメージに重大な脆弱性がある」と指摘されてしまった」
そんな経験をしたことはないでしょうか。コンテナ技術が現場に普及した今、イメージに含まれるOS・ライブラリの脆弱性を継続的に把握することは、Linuxサーバー管理と同様に不可欠なスキルになっています。

この記事では、OSSの脆弱性スキャナー trivy(トリヴィ)を使って、DockerイメージのCVE(脆弱性)をスキャンする方法を解説します。インストールから基本スキャン、CI/CD(GitHub Actions)への組み込み、ベースイメージ更新の運用設計まで一通り説明します。動作確認環境:Rocky Linux 9.4 / Ubuntu 24.04 LTS。

この記事のポイント

・trivy image <イメージ名> でDockerイメージの脆弱性を数十秒でスキャンできる
・--severity CRITICAL,HIGH フィルタで優先対応すべきCVEだけ絞り込める
・GitHub Actions の aquasecurity/trivy-action でCI段階に自動スキャンを組み込める
・ベースイメージをalpine/distrolessに変え、定期cronスキャンで継続管理が基本戦略

続きを読む "trivyでDockerイメージの脆弱性をスキャンする方法|CI組み込みとベースイメージ更新の運用"

Dockerのセキュリティ設計|非rootユーザー実行とrootlessモードでコンテナを堅牢化する方法

「本番サーバーのDockerコンテナが侵害されたら、root権限でホストまでやられてしまわないか」
「コンテナ内でrootユーザーのまま動かしているが、これで本当に問題ないのか」

Dockerはデフォルトでコンテナ内をrootユーザーとして動かします。この設計は学習・開発では問題ありませんが、本番環境では深刻なセキュリティリスクを抱えることになります。コンテナの脆弱性を突かれた際、root権限があればホストOS側にも影響が及ぶ可能性があるからです。

この記事では、Dockerセキュリティの根幹となる「非rootユーザー実行」と「Rootless Docker(rootlessモード)」の2つの対策を、Ubuntu 24.04 LTS / RHEL 9.4での実機出力を交えて体系的に解説します。Dockerfileの設計からrootlessモードの導入・制限事項まで、本番環境に耐えうるコンテナ設計を習得しましょう。

この記事のポイント

・Dockerコンテナはデフォルトでrootユーザーとして動作しリスクがある
・USER命令で非rootユーザーに切り替えるのがDockerfile設計の基本
・Rootless DockerはDocker daemon自体を一般ユーザーで動かす強力な防御策
・両方を組み合わせることで本番環境のコンテナセキュリティが大幅に向上する

続きを読む "Dockerのセキュリティ設計|非rootユーザー実行とrootlessモードでコンテナを堅牢化する方法"

Dockerのログ運用設計|loggingドライバとjson-fileローテーションで肥大化を防ぐ方法

「本番のDockerコンテナを数週間動かしたら、/var/lib/dockerのディスクが溢れてサービスが落ちた」
「コンテナIDの長いディレクトリ名の中に2GBを超えるjsonファイルが潜んでいた」

こういった事故は、Dockerのlogging driver(ログドライバ)の設定を理解していないことで起きます。Dockerはデフォルトでjson-fileドライバを使いますが、ローテーション設定がない場合、コンテナが動き続けるほどログファイルは無制限に膨らみます。

この記事では、Dockerのlogging driverの種類と選択基準、json-fileドライバのmax-size/max-fileによるローテーション設定、/etc/docker/daemon.jsonでのグローバル適用、docker-compose.ymlでのサービス別設定まで、Ubuntu 24.04 LTS / RHEL 9.4の実機出力を交えて解説します。

この記事のポイント

・max-size/max-fileでログローテーションを設定できる
・daemon.jsonで全コンテナに一括設定を適用できる
・docker-compose.ymlのloggingセクションで個別設定できる
・本番環境ではjournaldやsyslogへの転送も検討する

続きを読む "Dockerのログ運用設計|loggingドライバとjson-fileローテーションで肥大化を防ぐ方法"

Dockerコンテナのリソース制限と監視|--memory・--cpusとdocker statsでホストを守る設計

「コンテナを複数動かしていたら、ホストのメモリが枯渇してサービスが全落ちした。」
Dockerを本番で使い始めると、こうした事故に一度は直面します。

Dockerはデフォルトでは、コンテナがホストのリソース(メモリ・CPU)を無制限に使用できてしまいます。アプリのバグやメモリリーク、突発的なスパイクで1つのコンテナが暴走すると、同じホスト上の他のコンテナやシステムプロセスが道連れになります。

この記事では、--memory--cpusオプションによるリソース制限の設計と、docker statsを使ったリアルタイム監視の実践方法を解説します。Docker Composeのdeploy.resources設定、cgroupsを使った実体確認まで、本番ホストを守る設計を一通りカバーします。

この記事のポイント

・--memory でコンテナのメモリ上限を設定し、OOM Killerでホストを守る
・--cpus=1.5 でCPU使用量を、--cpu-shares で優先度を制御する
・docker stats --no-stream でリソース使用量をスナップショット確認できる
・Composeではdeploy.resources.limitsでまとめて制限を宣言する

続きを読む "Dockerコンテナのリソース制限と監視|--memory・--cpusとdocker statsでホストを守る設計"

docker buildのキャッシュと.dockerignore設計|Dockerfileの命令順序でCIビルドを高速化する実践手順

「docker build が遅すぎる。ソースコードを1行書き換えただけで全依存パッケージを再インストールしている」——この問題、CIパイプラインを組んだことがある方なら必ず直面します。

原因の多くは Dockerfile の命令順序の誤りと .dockerignore ファイルの未設定にあります。Dockerのビルドキャッシュを正しく活用すると、変更のないレイヤーは再利用されるため、5分かかっていたビルドが30秒以下になることも珍しくありません。

この記事では、Dockerのビルドキャッシュの仕組みから命令順序の最適化、.dockerignoreの設計、BuildKitのキャッシュマウントまで、実務で即使えるノウハウを順番に解説します。RHEL 9.4 / Ubuntu 24.04 LTS + Docker 26.x で動作確認済みです。

この記事のポイント

・Dockerのキャッシュは命令が変わった行以降すべて無効化される
・変更頻度の低い命令(apt install)を上に、ソースのCOPYを最後に書く
・.dockerignoreでビルドコンテキストを削減し転送時間を大幅に短縮できる
・BuildKitの--mount=type=cacheでパッケージキャッシュを永続化できる

続きを読む "docker buildのキャッシュと.dockerignore設計|Dockerfileの命令順序でCIビルドを高速化する実践手順"

Docker Composeのdepends_onとHEALTHCHECK|サービス起動順序を確実に制御する設計パターン

「docker-compose up を実行したのに、アプリコンテナがDB接続エラーで即座に落ちる」——この問題の原因は、DBコンテナのプロセスが起動しても「接続を受け付ける準備」が整う前にアプリが接続を試みることです。

Docker Compose の depends_oncondition: service_healthy を指定し、Dockerfile の HEALTHCHECK 命令を組み合わせると、DBが完全に起動するまでアプリコンテナの起動を遅らせることができます。

この記事では、depends_on の3種類のconditionとHEALTHCHECKの設定方法を、PostgreSQL・MySQL・Redisへの適用例を交えて解説します。curl・nc・独自スクリプトを使ったヘルスチェックパターンとexec形式・shell形式の使い分けも含めて網羅しています。RHEL 9.4 / Ubuntu 24.04 LTS + Docker 26.x / Compose v2.x で動作確認済みです。

この記事のポイント

・depends_on の condition: service_healthy でDBの準備完了を待ってからアプリを起動できる
・HEALTHCHECK 命令でコンテナの「準備完了」基準を定義する(Dockerfile / Composeファイル)
・curl・nc・独自スクリプトで用途に合わせたヘルスチェックを設計できる
・docker inspect でヘルスチェックのログとExitCodeを確認してデバッグできる

続きを読む "Docker Composeのdepends_onとHEALTHCHECK|サービス起動順序を確実に制御する設計パターン"

DockerfileのENTRYPOINTとCMDを正しく使い分ける方法|シェル形式・exec形式の設計指針と実践例

「Dockerfileに ENTRYPOINT と CMD を両方書いたのに、docker run で引数を渡しても動きが変わらない」
「ENTRYPOINT と CMD の違いを調べても同じことしか書いていなくて、結局どちらを使えばいいかわからない」

Dockerfile を書き始めた段階で多くの人がつまずくのが、ENTRYPOINT と CMD の使い分けです。
この記事では、2つの命令の明確な違い、「シェル形式」と「exec形式」の落とし穴、そして実務で役立つ設計パターンを実際のコマンド実行例とともに解説します。
動作確認は Rocky Linux 9 / Ubuntu 24.04 LTS + Docker 26.x で行っています。

この記事のポイント

・ENTRYPOINT は「コンテナが必ず実行するプログラム」を固定する命令
・CMD は「ENTRYPOINT へのデフォルト引数」または単独のデフォルトコマンド
・exec形式(JSON配列)を使わないとシグナルが届かず docker stop が10秒かかる
・両方を組み合わせると「固定コマンド+上書き可能な引数」の柔軟な設計が実現できる

続きを読む "DockerfileのENTRYPOINTとCMDを正しく使い分ける方法|シェル形式・exec形式の設計指針と実践例"

docker execコマンドでコンテナ内を調査・デバッグする方法|docker logs・docker inspectの実践例も

「docker runしたコンテナが起動しているはずなのに、アプリが動かない」
そんな場面で真っ先に使うべきツールが docker exec・docker logs・docker inspect の3つです。

この記事では、Rocky Linux 9 / Ubuntu 24.04 LTS の実機で確認した手順をもとに、Dockerコンテナのデバッグに欠かせない3コマンドの実践的な使い方を解説します。
コンテナ内部への入り方から、ログの絞り込み、設定値の取り出しまで、障害切り分けの現場でそのまま使える内容を網羅しています。

この記事のポイント

・docker exec -it でコンテナ内のシェルにインタラクティブに接続できる
・docker logs -f でリアルタイムのコンテナログをtail感覚で追える
・docker inspect --format でIPアドレスや設定値を1行で取り出せる
・起動に失敗したコンテナはdocker startしてからexecでデバッグする

続きを読む "docker execコマンドでコンテナ内を調査・デバッグする方法|docker logs・docker inspectの実践例も"

Dockerのネットワーク設計入門|コンテナ間通信とbridge・host・noneの使い分け

「複数のコンテナを起動したのに、コンテナ同士が通信できない」
「Docker Composeで組んだWebとDBがつながらず、名前解決でエラーが出る」

こういったトラブルは、Dockerネットワークの仕組みを理解していないことが原因のほとんどです。

Dockerはコンテナ起動時に自動でネットワークへ接続しますが、デフォルトのbridgeネットワークでは「コンテナ名での名前解決」ができません。ここで詰まるエンジニアは非常に多い。

この記事では、Dockerの4つのネットワークモード(bridge・ユーザー定義bridge・host・none)の違いと使い分け、コンテナ間通信の実践手順、Docker Composeでのネットワーク分離設計を、Ubuntu 24.04 LTS / RHEL 9.4の実機出力を交えて解説します。

この記事のポイント

・Dockerデフォルトのbridgeではコンテナ名での名前解決ができない
・コンテナ間を名前で繋ぐには「ユーザー定義bridgeネットワーク」が必須
・Docker Composeは自動でユーザー定義ネットワークを作成しサービス名で通信できる
・本番環境ではfrontend/backendを別ネットワークに分離するのが基本設計

続きを読む "Dockerのネットワーク設計入門|コンテナ間通信とbridge・host・noneの使い分け"

Dockerボリュームとバインドマウントでデータを永続化する方法|コンテナを消してもデータを守る設計

「docker rm でコンテナを削除したら、データベースのデータも全部消えた」
そんな失敗、Dockerを使い始めて一度は経験するはずです。コンテナはプロセスと同じで、停止・削除すると内部に書き込んだデータはすべて消えます。

この記事では、Dockerのボリューム(docker volume)とバインドマウントの仕組みを基礎から解説し、コンテナが消えてもデータを安全に永続化するための実践的な設計手順を紹介します。
Docker Composeでのvolumes定義まで、実際のサーバー出力例を交えて説明します。

動作確認環境: Rocky Linux 9.4 / Ubuntu 24.04 LTS(Docker Engine 26.x・Docker Compose Plugin v2.27)

この記事のポイント

・コンテナのデータはデフォルトで揮発性。永続化にはvolumeかバインドマウントを使う
・docker volume createで名前付きボリュームを作り、-vオプションでコンテナに接続する
・バインドマウントはホストのディレクトリを直接マウントし、開発環境のソース共有に向く
・Docker ComposeではvolumesセクションでDB・アプリのデータを永続化して管理する

続きを読む "Dockerボリュームとバインドマウントでデータを永続化する方法|コンテナを消してもデータを守る設計"

DockerfileのマルチステージビルドとCompose設計|本番イメージの軽量化・セキュリティ・環境分離の実践手順

「Dockerfileを書いてみたけど、イメージが500MBを超えている」「開発環境と本番環境でDockerfileを使い分けたい」
そう感じたことはないでしょうか。

Dockerfileの基本構文は比較的すぐ覚えられますが、本番環境で安全に使えるイメージを作るとなると話が変わります。サイズの肥大化、rootで動くコンテナ、開発用の認証情報が本番イメージに残ったまま——こうした問題は、設計をきちんと理解していないと見過ごしがちです。

この記事では、マルチステージビルドを中心に、本番向けDockerfileの設計と、Docker Composeを使った環境分離の実践手順を解説します。alpine・slim・distrolessといったベースイメージの選び方、.envファイルによる認証情報の安全な管理、override構成・profilesを使った環境切り替えまで、「なぜそう書くのか」という設計の意図まで踏み込みます。

この記事のポイント

・マルチステージビルド+distrolessで本番イメージを1/10以下に軽量化できる
・Dockerfile設計の鉄則はCOPY --from でビルド成果物だけを本番に持ち込むこと
・GoはCGO_ENABLED=0+distroless/staticでバイナリ1本分のイメージを作れる
・コンテナをroot以外のユーザーで動かすことがセキュリティの最低ライン
・.envファイルは自動読み込みされるがGitに含めてはいけない——認証情報はファイルで分離する
・Composeのoverride構成とprofilesで開発・本番・CI環境を1ファイル体系で管理できる

続きを読む "DockerfileのマルチステージビルドとCompose設計|本番イメージの軽量化・セキュリティ・環境分離の実践手順"

OllamaをDockerコンテナで運用する方法|docker-compose.ymlとGPU設定で本番環境に安定デプロイする

「Ollamaをサーバーに直接インストールしたら依存ライブラリが競合して環境が壊れた」
「チームメンバーのUbuntuバージョンが違うせいで、同じ手順を実行しても動かない」

そんな悩みを抱えるインフラエンジニアやサーバー管理者は少なくない。Ollamaは単体でも動作するが、本番運用を見据えるとDockerコンテナ化が断然有利だ。この記事では、docker-compose.ymlを使ってOllamaをコンテナとして立ち上げ、GPUパススルー設定・リソース制限・Open WebUI連携・ヘルスチェック・日常運用コマンドまでをステップ順に解説する。さらに、profilesキーを使ったサービスの選択起動とdocker-compose.override.ymlを活用した開発・本番・CI設定の分離パターン、マージルールの落とし穴まで詳しく紹介する。Ubuntu Server 22.04 LTS + NVIDIA GPUの構成を基本とするが、GPUなしのCPU運用でも手順はほぼ同じだ。

この記事のポイント

・docker-compose.ymlとNVIDIA Container Toolkitで再現性のある運用環境を構築できる
・GPUパススルー・ヘルスチェック・環境変数の外部化で本番品質の構成に仕上げる手順を解説
・profilesキーで特定サービスを選択起動し、COMPOSE_PROFILES変数で環境ごとに制御できる
・docker-compose.override.ymlで開発・本番設定を分離し、本番への誤設定混入を防ぐ方法も紹介
・--env-fileオプションで本番用の.envを明示指定し環境変数を切り替える手順を解説
・compose.ci.ymlと--abort-on-container-exitでCIテスト実行を自動化する手順も解説
・マージルールの落とし穴(配列は追加マージ・マッピングはキー単位上書き)を理解して設定混入を防ぐ
・deploy.resources.limitsでCPU/メモリを制限し、ホスト全体の安定性を守る方法も紹介
・docker statsで実消費量を把握してから制限値を設定する手順を解説
・Open WebUIをcomposeに同梱することでチーム共有UIをワンコマンドで起動できる


OllamaをDockerコンテナで運用する方法|docker-compose.ymlとGPU設定で本番環境に安定デプロイする

続きを読む "OllamaをDockerコンテナで運用する方法|docker-compose.ymlとGPU設定で本番環境に安定デプロイする"

コンテナとは何か|Dockerで理解する仮想マシンとの違いと利点

「コンテナって仮想マシンと何が違うの?」「Dockerが話題になっているけど、自分のPCに入れても大丈夫なの?」
コンテナという言葉はよく耳にするのに、どうもしっくり来ない。仮想マシンとの違いを聞いてもピンとこない。そんな方が多いのではないでしょうか。

この記事では、コンテナと仮想マシンの根本的な違いから、Dockerが実現する軽量・高速な仕組み、DockerfileやDocker Composeを使った実践的な活用方法まで解説します。「コンテナ docker」を調べている完全初心者の方でも、読み終わった後には「なぜエンジニアがDockerを使うのか」が腑に落ちるように構成しています。

この記事のポイント

・コンテナはOSカーネルを共有する軽量な実行環境で、VMより数十倍速く起動する
・Dockerはコンテナを手軽に使うためのツール群(CLI・デーモン・イメージ管理)
・Dockerfileで環境を「コード化」すれば、誰でも同じ環境を再現できる
・Docker Composeを使えば複数コンテナをyaml1ファイルで一括管理できる

続きを読む "コンテナとは何か|Dockerで理解する仮想マシンとの違いと利点"

dockerコマンドの使い方|コンテナ起動・停止・イメージ管理の実践例

「Dockerを使ってみたいけど、どこから手をつけたらいいかわからない」
「コンテナを起動したはいいけど、止め方や削除の方法がよくわからない」

Linuxサーバーを触り始めてしばらく経つと、必ずDockerに出会います。
開発環境の構築、アプリのデプロイ、CI/CDの整備——現場のあらゆる場面でDockerが使われるようになっています。

この記事では、Dockerコマンドの実践的な使い方を、RHEL 9.4 / Ubuntu 24.04 LTSでの動作確認済みの手順で解説します。
インストールから、イメージの取得・コンテナの起動・停止・削除・内部操作、さらにDocker Composeによる複数コンテナ管理まで、現場でよく使う操作を一通りカバーします。

この記事のポイント

・docker run でコンテナを起動、docker stop/rm で停止・削除できる
・docker ps -a で起動中・停止中の全コンテナを一覧表示できる
・docker exec -it でコンテナ内部に入りコマンド実行が可能
・Docker Composeを使えば複数コンテナをymlファイル1つで一括管理できる

続きを読む "dockerコマンドの使い方|コンテナ起動・停止・イメージ管理の実践例"

netBIOS(Network Basic Input∕Output System)

「Windowsのファイル共有がLinuxから見えない」「nmblookupでNetBIOS名を解決しようとしたら何も返ってこない」

このようなトラブルの根本には、NetBIOSの仕組みを理解していないことがあります。NetBIOS(Network Basic Input/Output System)は1983年にIBMが開発し、Microsoftが採用した分散アプリケーション向けのプログラミングインターフェイスです。今なおWindowsのファイル共有(SMB/CIFS)の基盤として現役で動いています。

この記事では、NetBIOSの基本的な仕組みからLinuxでNetBIOS名前解決を実践するコマンド操作まで、実機の出力例を交えながら解説します。

この記事のポイント

・NetBIOSはWindowsネットワークの基盤。SMB/CIFSによるファイル共有で今も現役で動いている
・NetBIOS名前解決にはブロードキャスト・WINSサーバー・lmhostsの3方式がある
・LinuxからはnmblookupコマンドでNetBIOSホスト名の照会・名前解決ができる
・ポート137/138(UDP)と139(TCP)を理解することがトラブル対応の第一歩になる

続きを読む "netBIOS(Network Basic Input∕Output System)"

Linux無料マニュアル(図解60P) 名前とメールで30秒登録