この記事は、クラウドでコンテナ化ワークロードをデployおよび管理するためのWebinar系列の一部です。series covers the fundamentals of containers, including container lifecycle management, deploying multi-container applications, scaling workloads, and understanding Kubernetes, as well as highlighting best practices for running stateful applications. 今回のtutorialは、Seriesの第一回であるGetting Started with Containersに対応しています。
本教程包括该系列中介绍的第一节关于容器的基本概念和命令,涵盖了容器生命周期管理、部署多容器应用程序、扩展工作负载以及了解Kubernetes等主题,同时介绍了运行有状态应用程序的最佳实践。
Introduction
Docker is a platform for deploying and managing containerized applications. Containers are popular among developers, administrators, and DevOps engineers because of the flexibility they provide.
Docker consists of three key components:
- Docker Engine
- Docker Tools
- Docker Registry
The Docker Engine provides the core capabilities for managing containers. It interacts with the underlying Linux operating system to expose simple APIs to handle the lifecycle of containers.
Docker Tools are a set of command-line tools that communicate with the API exposed by the Docker Engine. They are used to run containers, create new images, configure storage and networks, and perform other operations that affect the lifecycle of a container.
Docker Registryは、コンテナーイメージが格納される場所です。各イメージには、ユニークなタグを通じて複数のバージョンを持つことができます。ユーザーは、レジストリから既存のイメージをプルし、新しいイメージをプッシュします。Docker Hubは、Docker, Inc.が管理するホステッドレジストリです。また、イメージをエンジンに近く保つために、自分の環境内でレジストリを実行することも可能です。
このチュートリアルの終わりまでに、DigitalOcean DropletにDockerをインストールし、コンテナーを管理し、イメージと連携し、永続性を追加し、プライベートレジストリを設定することができます。
前提条件
このチュートリアルを追うには、以下が必要です:
-
このUbuntu 16.04初期サーバーセットアップチュートリアルに従って設定されたUbuntu 16.04 Droplet 1台。これには、sudo非ルートユーザーとファイアウォールが含まれます。
-
Docker Hubアカウント
。Docker Hubの概要を読むことで、始めるのを助けられます。
デフォルトで、docker
コマンドはroot権限が必要です。しかし、sudo
接頭詞を省略してコマンドを実行することができます。docker
コマンドをdockerグループのユーザーとして実行します。
この方法でDropletを設定するには、sudo usermod -aG docker ${USER}
コマンドを実行します。これにより、現在のユーザーがdocker
グループに追加されます。その後、新しいグループメンバーシップを適用するためにsu - ${USER}
コマンドを実行してください。
このチュートリアルは、サーバーがdocker
コマンドをsudo
接頭詞なしで実行するように設定されていることを前提としています。
手順1 — Dockerのインストール
DropletにSSHを接続した後、既にインストールされているdocker関連のパッケージを削除し、公式のリポジトリからDockerをインストールするための以下のコマンドを実行します。
Dockerをインストールした後、以下のコマンドでインストールを確認してください。
上記のコマンドは、環境にデプロイされたDockerエンジンの詳細を表示します。次のコマンドは、Dockerツールが正しくインストールされており、設定されていることを確認します。Dockerエンジンとツールのバージョンが表示されるべきです。
##ステップ2 — コンテナの起動
Dockerコンテナは、レジストリに保存されている既存のイメージから起動されます。Dockerのイメージは、プライベートまたはパブリックリポジトリに保存されることができます。プライベートリポジトリでは、イメージを取得する前にユーザーが認証する必要があります。パブリックイメージは、誰でもアクセスできます。
名前がhello-world
のイメージを検索するには、以下のコマンドを実行します:
名前がhello-world
と一致する複数のイメージが存在する可能性があります。最大のスター数を持つものを選択してください。これは、イメージの人気を示します。
以下のコマンドで、ローカル環境で利用可能なイメージを確認します:
まだコンテナを起動していないため、イメージはありません。今すぐイメージをダウンロードし、ローカルで実行しましょう:
docker run
コマンドを実行する際にイメージをプルしないで、Dockerエンジンはまずイメージをプルし、その後実行します。docker images
コマンドを再度実行すると、ローカルにhello-world
イメージが利用可能であることがわかります。
もっと意味のあるコンテナを起動してみましょう:Apacheウェブサーバーです。
docker run
コマンドに渡される追加のオプションについて気づいたことがあるかもしれません。以下は、これらのスイッチの説明です:
- このコードはDocker Engineを使って、コンテナーのポート80をホストの80番目のポートに exposureします。Apacheは80番目のポートでListenerを起動しているために必要です。
--name
オプションはコンテナーに名前を与えます。無ければDocker Engineはランダムな名前を与えます。-d
オプションはコンテナーをdetachedモードで运行させます。このオプションを省略した場合、コンテナーは前台で起動され、shellを使用することができなくなります。Detached modeで起動することで、shellを使うことができます。
実行してみましょう:
出力から見て、名前がweb
であり、80番目のポートがホストの80番目のポートにマッピュされていることがわかります。
Webサーバーへアクセスしましょう:
次に、実行してみましょう:
出力から見て、名前がweb
であり、80番目のポートがホストの80番目のポートにマッピュされていることがわかります。
Step 3 — Adding Storage to Containers
コンテナは一時性であり、コンテナが終了した後に保存されたデータは失われます。持久化数据を保持するには、コンテナに卷(volume)を附加する必要があります。卷はホストのファイルシステムから直接アクセス可能なディRECTORYです。
先にホスト上に新しいディRECTORYを作成します:
次に、コンテナを新しく起動し、htdocs
ディRECTORYをApache Webサーバーのドキュメントルートとして mounting します:
-v
オプションはコンテナ内のhtdocs
ディRECTORYをホストのファイルシステムに対応させ、このディRECTORY内の変更は両方の場所で見えます。
コンテナ内では以下のコマンドを実行しておく:
このコマンドはターミナルをコンテナのshellに入り、interactiveモードでコンテナ内に入ります。あなたはその後、ホストに戻ります:
コンテナ内でhtdocs
フォルダに移動し、簡単なHTMLファイルを作成します。最後にexitコマンドを使用してshellから退出します:
exitコマンドを使った後、ホストでも同じHTMLファイルを見ることができます。
次回curl localhost
を実行すると、Webサーバーは私たちがホスト側で作成したページを返します。
再度curl localhost
を実行してみると、Webサーバーは最新のページを返します。
コンテナを終了するために次のコマンドを使用します。(-f
はDockerを強制終了するために使用されます。)
第四步:画像の作成
除了从注册中心运行现有的镜像外,我们还可以创建自己的镜像并将其存储在注册中心。
你可以从现有的容器创建新的镜像。对容器的更改首先被提交,然后对镜像进行标记并推送到注册中心。
让我们再次启动httpd
容器,并修改默认文档:
现在容器正在以自定义的index.html
运行。您可以使用curl localhost
来验证它。
在提交更改之前,最好先停止容器。停止后,执行commit命令:
确认创建了名为doweb
的图像。可以使用docker images
命令查看它。
为了将此图像标记并存储在Docker Hub中,请运行以下命令将其推送到公共注册中心:
可以在浏览器或命令行中搜索Docker Hub以验证新图像。
第五步:私有Registry的启动
private環境でレジストリを运行することが可能です。これにより画像の安全性を上げ、Docker Engineとimage repository之间のlatencyを減らすことができます。
Docker RegistryはContainerとして起動できるようになっています。 registryは多くのimageを保持しており、そのためにvolumeをattachすることが良いです。
注意してくださいが、containerはbackgroundで起動され、port 5000
をexposeしており、registryディRECTORYはホストファイルシステムにmappedされています。 containerの起動を確認するには、docker ps
コマンドを実行してください。
現在、containerは运行中であり、docker ps
コマンドでverifyできます。私たちは今、local imageをtagしてpushしてみましょう。先にDocker Hubからbusybox
containerをpullしてください。
前のコマンドは、busybox
containerがnow tagged with localhost:5000
であることを示しています。 imageをprivate registryにpushします。
imageをpushした後、local registryからpullしてみましょう。 imageをpullした後、削除してからpullして戻します。
私たちはfull cycle of pulling the image, tagging it, pushing it to the local registry, and finally pulling it back.
There may be cases where you want to run the private registry on a dedicated host. Docker Engine running on different machines will talk to the remote registry to pull and push images.
レジストリが安全ではないため、Docker Engineの設定を変更してアクセスすることが必要です。これを行うには、/etc/docker/daemon.json
ファイルを編集します。存在しなければ新規に作成します。
以下の記述を追加します:
{
"insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]
}
“`json
{
“registry”: {
“host”: “REMOTE_REGISTRY_HOST”,
“port”: “5000”
}
}
“`
上記の値は、远程レジストリのホスト名やIPアドressを置き換えてください。変更後、Docker Engineを再起動して configurations changes を適用します。
### Conclusion
This tutorial has helped you get started with Docker. It covered the essential concepts including the installation, container management, image management, storage, and private registry. The upcoming sessions and articles in this series will help you go beyond the basics of Docker.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-docker