Docker は、コンテナ内でアプリケーションを実行するためのツールです。コンテナーは、アプリの実行に必要なすべての依存関係とコードを 1 つのファイルにパッケージ化し、どのマシンでも同じように実行できます。
ドッカーとは何ですか?
Docker は仮想マシンと概念が似ていますが、はるかに軽量です。 Docker は、個別のオペレーティング システム全体を実行する (これは大きなオーバーヘッドになります) 代わりに、同じホスト オペレーティング システムを使用し、ソフトウェア レベルでのみ仮想化する コンテナ を実行します。
Docker Engine は Linux 、Windows、macOS 上で実行され 、Docker コンテナーとして Linux と Windows をサポートします。 Linux の正確な特徴は実際には重要ではありません。 Linux のほとんどのバージョンは同じカーネルを実行し、ユーザー ソフトウェアが異なるだけです。 Docker はこのユーザー ソフトウェアをコンテナーにインストールし、Ubuntu 上で CentOS コンテナーを実行できるようにします。ただし、カーネルが異なるため、たとえば Ubuntu 上で FreeBSD を実行することはできません。
Docker コンテナ イメージには、アプリの実行に必要なもののみが含まれています。アプリが nginx と Node.js を使用する場合、コンテナー イメージにはそれらが含まれますが、Linux で一般的に見られる他のすべてのユーザーランド アプリに負担をかける必要はありません。
Docker はなぜそれほど便利なのでしょうか?
Docker は、Git や NPM などのツールが提供するのと同じ種類のバージョン管理とパッケージ化を採用しており、それをサーバー ソフトウェアに使用できるようにします。コンテナーは単一のイメージであるため、コンテナーのさまざまなビルドのバージョン追跡が非常に簡単になります。すべてが含まれているため、すべての依存関係の管理がはるかに簡単になります。
Docker を使用すると、開発環境が本番環境とまったく同じになり、他の人の開発環境もまったく同じになるため、「私のマシンでは壊れている!」という問題が軽減されます。
別のサーバーをクラスターに追加する場合、そのサーバーを再構成したり、必要なすべての依存関係を再インストールしたりすることを心配する必要はありません。コンテナーを構築したら、そのコンテナー ファイルを誰とでも共有でき、いくつかのコマンドで簡単にアプリを起動して実行できます。 Docker を使用すると、特に Kubernetes や Docker Swarm などのオーケストレーション エンジンを使用すると、複数のサーバーの実行が非常に簡単になります。
Docker を使用すると、新しいサービスにデプロイするためのコードを整理することもできます。アプリケーションに使用している Web サーバーがあるとします。おそらくそのサーバーには多くのものがインストールされており、静的コンテンツをホストするための nginx Web サーバーがあり、バックエンドにいくつかのものを保存するためのデータベースがあり、Express で実行されている API サーバーがあるかもしれません。 jsも同様です。理想的には、これらを別々のアプリケーションに分割して、別々のサーバーで実行することができますが、開発が面倒になる可能性があります。
Docker はこれをクリーンアップするのに役立ちます。 Web サーバーをパッケージ化して nginx コンテナーで実行したり、API サーバーをパッケージ化して Node.js コンテナーで実行したり、データベースをパッケージ化して独自のコンテナーで実行したりできます (ただし、それはおそらく 最良のアイデアではありません が、可能です)。これら 3 つの Docker コンテナーを使用して、すべてを同じマシン上で実行できます。サーバーを切り替える必要がある場合は、それらのコンテナを新しいサーバーに移行するのと同じくらい簡単です。拡張する必要がある場合は、これらのコンテナーの 1 つを新しいサーバーに移動するか、サーバーのクラスター全体にデプロイできます。
単一の VPS 上で複数のアプリを実行したい場合も、Docker を使用すると費用を節約できます。各アプリに異なる依存関係がある場合、すべてが混ざり合った感謝祭のディナープレートのように、サーバーが乱雑になりやすくなります。 Docker を使用すると、たとえば、すべてが分離された高校の給食トレイのように、PHP の別々のバージョンを使用して複数の別々のコンテナーを実行できます。
Dockerをどのように使用しますか?
本番環境では、 AWS ECS 、 Azure Container Instances 、 DigitalOcean Docker Droplets など、Docker コンテナをホストするサービスが多数あります。プロバイダーがマネージド Docker ホスティングを提供していない場合は、いつでも自分で VPS にインストールできます。
開発時、Docker コンテナは実行が簡単で、必要なコマンドはいくつかだけです。開始するには、ホスト OS に Docker エンジンをインストールする必要があります。 Windows と macOS の場合は Docker Desktop を使用できますが、 Linux の場合はパッケージ マネージャーから Docker コミュニティ エディションをインストールする必要があります 。 Ubuntu のような Debian ベースのディストリビューションの場合、次のようになります。
sudo apt-get インストールドッカー
どちらのインストール方法でも、コマンド ラインから Docker にアクセスできるようになります。動作していることを確認するには、次のコマンドを実行します。
docker run hello-world
Docker は、多くの有用なコンテナー イメージのオンライン リポジトリである Docker Hub からこのチュートリアル イメージを取得する必要があります。これらのイメージの多くは、アプリをインストールするためのベースとして使用できます。
nginx をベースにした簡単な Web サーバーを作成してみましょう。 Nginx は、開始点として使用できる Docker Hub 上のビルドを提供します。ファイルを保存する新しいディレクトリを作成し、それを開きます。
mkdir ~/dockertest && cd ~/dockertest
ベースの nginx イメージに加えられた変更は、Dockerfile を使用して行われます。 Dockerfile はコンテナーの makefile のようなもので、Docker が変更を加えて新しいイメージをビルドするときに実行するコマンドを定義します。 Dockerfile は、拡張子なしで単に
Dockerfile
と呼ばれます。
touch Dockerfile
でこのファイルを作成し、テキスト エディタで開きます。これを次の場所に貼り付けます。
nginxから
html /usr/share/nginx/html をコピーします
最初の行は、このイメージをハブからの nginx イメージに基づいて作成するように Docker に指示する Docker コマンドです。 2 行目は、このローカル フォルダー (
~/dockertest/html
) からディレクトリを Docker イメージにコピーする別のコマンドで、この場合は nginx の HTML フォルダーを置き換えます。
Dockerfile では多くのコマンドを実行できます。たとえば、アプリで依存関係をインストールする必要がある場合は、
RUN cd src/ && npm install
のようなことを実行できます。アプリがインストールをブートストラップして起動して実行するために必要なものはすべて、Dockerfile で定義されます。
実際には
./html
ディレクトリをまだ作成していないので、次のコマンドを実行してください。
mkdir html && touch html/index.html
ディレクトリとエントリ HTML を作成します。
index.html
を開き、ダミーの HTML を貼り付けます。
<!DOCTYPE html>
<html>
<本文>
Docker 内の nginx からこんにちは!中には、あなたのコンピューターはありますか?
</body>
</html>
これで、イメージをクックする準備が整いました。プロジェクトのルート (
html
フォルダーではなく
~/dockertest
内) にいることを確認して、次を実行します。
docker build -t dockertest 。
末尾のピリオドは、現在のディレクトリを開始点として使用することを示します。 Docker は Dockerfile を見つけて作業を開始する必要があります。ただし、これには数秒しかかかりません。完了したら、次のように実行できます。
docker run --name DockerTest -p 8080:80 -d dockertest
これにより、作成した「dockertest」イメージを使用して、DockerTest という新しいコンテナーが起動します。
-p
フラグは、ローカル ポートをコンテナ内のポートにバインドします。この場合、nginx のデフォルトの HTTP ポート (ポート 80) がローカル マシンのポート 8080 にバインドされます。 Web ブラウザで
localhost:8080
を開くと、nginx が実行されていることが確認できます。
さらに構成が必要な場合は、
COPY nginx.conf /etc/nginx/nginx.conf
を含めて nginx の構成ファイルを編集し、独自の構成ファイルを作成できます。編集のたびにイメージを再構築する必要があるため、構成ファイルを直接編集するよりも構成が難しくなります。ただし、開発で使用しているのと同じコンテナを本番環境にデプロイできるという追加の利点を考えると、これはかなり公平なトレードオフです。
既存のアプリケーションのネットワーキング、展開、コンテナ化に関するさらに詳しいチュートリアルが必要な場合は、 このガイドを読むこと をお勧めします。





