Docker 開発ツール & 環境

Dockerを始めてみよう

Dockerとは?

簡単に言うと、Dockerを使うと「どこでも同じように動くアプリケーション」を作れるようになります。

例えば、開発者が自分のPCで作ったアプリをサーバーにデプロイする時、環境の違い(OSのバージョンや設定の差異)で動かないことがよくあります。

Dockerは「コンテナ」という単位で「アプリとその環境」を管理することで、そのような問題を解決するツールです。

Dockerの基本コンセプト

Dockerの基本コンセプトは「build, ship, run」の3ステップで表されます。これは、アプリの開発から運用までの流れをシンプルに実現するための考え方です。

Build(構築)

アプリケーションとその依存関係(ライブラリや設定ファイルなど)を「Dockerイメージ」という形でパッケージ化します。Dockerイメージは、Dockerfileという設定ファイルをもとに作られ、誰が作っても同じ結果になるように再現性が保証されています。

→ 例: 「Pythonのアプリと必要なライブラリをDockerイメージにまとめる」

Ship(配送)

作ったDockerイメージをどこかに運びます。例えば、自分のPCからクラウドサーバーや他の開発者の環境に共有するイメージです。Docker Hubのようなレジストリを使えば、世界中どこでも簡単にイメージを配布できます。

→ 例: 「作ったイメージをサーバーにアップロードしてチームで共有」

Run(実行)

Dockerイメージをコンテナとして実行します。コンテナはイメージをもとに起動するインスタンスで、どこで動かしても同じ環境が再現されるため、「自分のPCでは動いたのにサーバーでは動かない」といった問題が起こりにくいです。

→ 例: 「サーバーでコンテナを起動してアプリを動かす」

Docker Hubとは

Docker Hubは、Dockerイメージを保存、共有、管理するためのオンラインプラットフォーム(レジストリ)です。Docker社が運営しており、イメージの「クラウド上の保管庫」と考えると分かりやすいです。開発者や企業が作ったDockerイメージをアップロードしたり、他の人が公開しているイメージをダウンロードしたりできます。

例えば、Pythonやnginx、MySQLなどの公式イメージがDocker Hubには豊富に揃っていて、誰でも無料で利用可能です。GitHubがコードの共有場所であるのに対し、Docker Hubはコンテナイメージの共有場所と言えます。個人利用からチームでのコラボレーション、大規模な商用利用まで対応しています。

主な機能

  • 公開リポジトリ: 誰でもアクセス可能なイメージを公開。
  • プライベートリポジトリ(※無料は1つのみ): 自分やチームだけで使う非公開イメージを管理。
  • 検索・ダウンロード: 必要なイメージを簡単に探して取得。
  • 自動ビルド: GitHubと連携して、コード更新時に自動でイメージをビルドする機能。

docker hubのアカウント作成手順

  1. https://hub.docker.com/を開く
  2. 右上の「Sign up」をクリック
  3. メールアドレスやパスワードを設定してログインする

PWDにログインしよう

PWD(Play With Docker)は、Docker社が支援するプロジェクトで、Dockerを気軽に試したり学んだりできる無料のオンラインプラットフォームです。

ブラウザ上でDocker環境をすぐに立ち上げられる「遊び場(playground)」として設計されており、ローカルにDockerをインストールすることなくコンテナを操作できます。Dockerを触ってみたいけど環境構築が面倒、という人にはぴったりのサイトです。

  1. https://labs.play-with-docker.com/を開く
  2. 「Login」ボタンを押す
  3. 「Authorize App」と表示される窓が開くので「Accept」を押してdocker hub アカウントと連携する
  4. 「Start」ボタンを押す

すると4時間のセッションが始まる

PWDで仮想マシンを起動しよう

  • 「+ ADD NEW INSTANCE」を押すと仮想マシンが立ち上がり、画面の右側にいろいろ表示される。
  • 下の黒い画面がターミナルなので、試しに「docker version」と打ってみるとClientとServerの情報が表示される。
  • 「clear」というコマンドで表示をクリアできる

Apache Web サーバーを動かす

  1. コマンド「dorcker run -d -p 8800:80 httpd」を打つ
  2. 「curl localhost:8800」というコマンドで「It works!」という返答が来るか確認
  3. 「docker ps」というコマンドでも稼働中のコンテナを確認できる

コマンド「dorcker run -d -p 8800:80 httpd」の分解

  • docker run: Dockerコンテナを起動するための基本コマンド。
  • -d: 「デタッチドモード(detached mode)」で実行。つまり、コンテナをバックグラウンドで動かし、ターミナルをすぐ解放します(前景でログを見続けることはしない)。
  • -p 8800:80: ホストのポート8800をコンテナのポート80にマッピング(ポートフォワーディング)。外部からホストの8800番ポートにアクセスすると、コンテナ内の80番ポートに繋がります。
  • httpd: Apache HTTP Serverの公式Dockerイメージを指定。もしローカルにイメージがなければ、Docker Hubから自動でダウンロードされます。

何が起こるか?

  1. イメージの取得: ローカルにhttpdイメージがなければ、Docker Hubから最新版(httpd:latest)をダウンロードします。既にあれば、そのイメージを使います。
  2. コンテナの起動: httpdイメージをもとに新しいコンテナが作成され、バックグラウンドで起動します。Apacheウェブサーバーがコンテナ内で動き始め、デフォルトではポート80でリクエストを待ちます。
  3. ポートマッピング: コマンドで-p 8800:80を指定しているので、ホストの8800番ポートへのアクセスがコンテナの80番ポートに転送されます。
    注意点: Apacheのデフォルト設定では、ポート80でリッスンするようになっています。間違えて8800:90みたいに書くと、httpdイメージ自体が90番をリッスンする設定になっていないため、デフォルトではうまく動かない可能性があります。
  4. 結果の確認: コマンド実行後、コンテナID(長いハッシュ値)がターミナルに表示され、コンテナはバックグラウンドで動作中。docker psコマンドで確認すると、コンテナが動いているのが分かります。

追加でもう1個起動してみる

  • 続けてコマンド「dorcker run -d -p 8081:80 httpd」を実行(8801にするつもりが間違えて8081になってた)
  • 「docker ps」でコンテナが2個動いてることがわかる
  • 「curl localhost:8800」と「curl localhost:8081」の両方で応答がくる

全体で何が起こるか?

  • 1つ目のコマンドで起動したコンテナ(ポート8800→80)と、2つ目のコマンドで起動したコンテナ(ポート8801→80)が、それぞれ独立して動作します。
  • ホスト側のポート(8800と8801)が異なるため、問題なく共存できます。Dockerはホストの同じポートを複数のコンテナに割り当てることはできませんが、今回は8800と8801で別々なので大丈夫です。
    ※もし2つ目も-p 8800:80にしていたら「ポートが既に使われている」というエラー(bind: address already in use)が出て起動に失敗します。
  • 独立性: 各コンテナは独自のファイルシステム、プロセス、ネットワーク空間を持っているため、デフォルトではお互いに干渉しません。
  • ポートの分離: ホスト側で異なるポート(8800と8801)にマッピングされているので、外部から別々にアクセス可能です。
    • localhost:8800 → 1つ目のコンテナのApacheに接続。
    • localhost:8801 → 2つ目のコンテナのApacheに接続。
    • つまり、2つのコンテナは「別々の箱」として動作し、互いの設定やデータに影響を与えずに独立して動きます。

終了方法

左上の「CLOSE SESSION」を押すだけ

-Docker, 開発ツール & 環境