Docker をインストールして構成するにはどうすればよいですか?
この記事は、クラウドでのコンテナ化されたワークロードのデプロイと管理に関するウェビナー シリーズを補足するものです。このシリーズでは、コンテナのライフサイクル管理、マルチコンテナ アプリケーションのデプロイ、ワークロードのスケーリング、Kubernetes の理解など、コンテナの基本を紹介するとともに、ステートフル アプリケーションを実行するためのベスト プラクティスについても紹介します。
このチュートリアルでは、このシリーズの最初の部分「コンテナーの概要」で紹介された概念とコマンドについて説明します。
#はじめに
Docker は、コンテナ化されたアプリケーションをデプロイおよび管理するためのプラットフォームです。コンテナーは、その柔軟性により開発者、管理者、devops エンジニアの間で人気があります。 Docker には 3 つの基本コンポーネントがあります。 Docker エンジン Docker ツール Docker レジストリ Docker エンジンは、コンテナーを管理するためのコア機能を提供します。基盤となる Linux オペレーティング システムと連携して、コンテナのライフサイクルを処理するための単純な API を公開します。 Docker Tools は、Docker Engine によって公開される API と対話する一連のコマンド ライン ツールです。これらは、コンテナーの実行、新しいイメージの作成、ストレージとネットワークの構成、およびコンテナーのライフサイクルに影響を与えるその他の多くの操作の実行に使用されます。 Docker Registry は、コンテナー イメージが保存される場所です。各イメージには、一意のタグによって識別される複数のバージョンを含めることができます。ユーザーはレジストリから既存のイメージをプルし、新しいイメージをプッシュします。 Docker Hub は、Docker, Inc. によって管理されるマネージド レジストリです。レジストリを独自の環境で実行して、イメージをエンジンに近づけることも可能です。このチュートリアルが終わるまでに、DigitalOcean Droplet に Docker をインストールし、コンテナーを管理し、イメージを処理し、永続性を追加し、プライベート レジストリをセットアップすることができます。 前提条件このチュートリアルに従うには、次のものが必要です。Ubuntu 16.04 初期サーバー セットアップ チュートリアルに従って、Ubuntu 16.04 ドロップレットをセットアップします。これには、sudo 非 root ユーザーが含まれます。そしてファイアウォール。 Docker Hub アカウント。この Docker Hub の概要は、開始するのに役立ちます。 デフォルトでは、docker コマンドには root 権限が必要です。ただし、docker グループの docker ユーザーとして docker を実行すると、sudo プレフィックスなしでコマンドを実行できます。 この方法でドロップレットを構成するには、コマンド sudo usermod -aG docker ${USER} を実行します。これにより、現在のユーザーが docker グループに追加されます。次に、コマンド su - ${USER} を実行して、新しいグループ メンバーシップを適用します。 このチュートリアルでは、サーバーが sudo プレフィックスなしで docker コマンドを実行するように構成されていることを想定しています。
ステップ 1 - Docker のインストール
ドロップレットに SSH 接続した後、次のコマンドを実行して、インストールされている可能性のあるすべての Docker 関連パッケージを削除してから、Docker をインストールします公式リポジトリから:sudo apt-get remove docker docker-engine docker.io sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -sudo apt-key fingerprint 0EBFCD88sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"sudo apt-get update sudo apt-get install -y docker-ceDocker をインストールした後、次のコマンドを使用してインストールを確認します。
docker info上記のコマンドは、環境にデプロイされた Docker エンジンの詳細を表示します。次のコマンドは、Docker ツールがインストールされ、正しく構成されていることを確認します。 Docker エンジンとツールのバージョンが出力されるはずです。
docker version
ステップ 2 - コンテナの起動
Docker コンテナは、レジストリに保存されている既存のイメージから起動されます。 Docker 内のイメージは、プライベートまたはパブリックのリポジトリに保存できます。プライベート リポジトリでは、イメージをプルする前にユーザーの認証が必要です。公開画像には誰でもアクセスできます。 hello-world という名前のイメージを検索するには、次のコマンドを実行します。docker search hello-world名前 hello-world に一致するイメージが複数存在する可能性があります。最大の星を選択します。これは画像のポップさを示します。 次のコマンドを使用して、ローカル環境で利用可能なイメージを確認します。
docker imagesまだコンテナをロールアウトしていないため、イメージはありません。これで、イメージをダウンロードしてローカルで実行できるようになりました。
docker pull hello-world docker run hello-worldイメージをドラッグせずに docker run コマンドを実行すると、Docker エンジンは最初にイメージをプルしてから実行します。 docker image コマンドを再度実行すると、ローカルで使用可能な hello-world イメージがあることがわかります。 もっと意味のあるコンテナ、Apache Web サーバーを起動しましょう。
docker run -p 80:80 --name web -d httpddocker run コマンドに追加のオプションが渡されることに気づくかもしれません。これらのスイッチの説明は次のとおりです。
-p – これは、コンテナのポート 80 をホストのポート 80 に公開するように Docker エンジンに指示します。 Apache はポート 80 でリッスンするため、ホスト ポートで公開する必要があります。 --name - このスイッチは、実行中のコンテナに名前を割り当てます。これを省略すると、Docker Engine はランダムな名前を割り当てます。 -d - このオプションは、コンテナーをデタッチ モードで実行するように Docker エンジンに指示します。これがないと、コンテナーがフォアグラウンドで起動し、シェルへのアクセスがブロックされます。コンテナーをバックグラウンドにプッシュすることで、コンテナーの実行中もシェルを使用し続けることができます。
要验证我们的容器是否确实在后台运行,请尝试以下命令:
docker ps
输出显示名为web的容器正在运行,端口80映射到主机端口80 。
现在访问Web服务器:
curl localhost
让我们停止并用下面的命令删除正在运行的容器:
docker stop web docker rm web
运行docker ps再次确认容器已被终止。
第3步 - 添加存储到容器
容器是短暂的,这意味着当容器终止时,存储在容器内的任何东西都将丢失。 要将数据保存在容器的寿命之外,我们需要将容器附加到容器中。 卷是主机文件系统的目录。
首先在主机上创建一个新目录:
mkdir htdocs
现在,让我们用一个新开关启动容器来挂载htdocs目录,并将其指向Apache Web服务器的文档根目录:
docker run -p 80:80 --name web -d -v $PWD/htdocs:/usr/local/apache2/htdocs httpd
-v开关将容器中的htdocs目录指向主机的文件系统。 对这个目录所做的任何更改都将在两个位置都可见。
通过运行以下命令从容器中访问目录:
docker exec -it web /bin/bash
该命令以交互模式将我们的终端连接到容器的外壳。 你应该看到你现在被丢在容器内。
导航到htdocs文件夹并创建一个简单的HTML文件。 最后退出shell返回主机:
cd /usr/local/apache2/htdocs echo '<h1>Hello World from Container</h1>' > index.htmlexit
再次执行curl localhost命令显示Web服务器正在返回我们创建的页面。
我们不仅可以从主机访问这个文件,但我们也可以修改它:
cd htdocs cat index.html echo '<h1>Hello World from Host</h1>' | sudo tee index.html >/dev/null
再次运行curl localhost ,确认Web服务器正在提供从主机创建的最新页面。
使用以下命令终止容器。 ( -f迫使Docker先停止而不停止。)
docker rm -f web
第4步 - 建立图像
除了从注册表中运行现有的图像,我们可以创建自己的图像,并将其存储在注册表中。
您可以从现有的容器中创建新的图像。 首先提交对容器所做的更改,然后将图像标记并推送到注册表。
让我们再次启动httpd容器并修改默认文档:
docker run -p 80:80 --name web -d httpd docker exec -it web /bin/bash cd htdocs echo '<h1>Welcome to my Web Application</h1>' > index.htmlexit
该容器现在运行一个自定义的index.html 。 你可以使用curl localhost来验证它。
在我们提交更改后的容器之前,最好停止它。 停止后,我们将运行commit命令:
docker stop web docker commit web doweb
使用docker images命令确认图像的创建。 它显示了我们刚刚创建的doweb图像。
要在Docker Hub中标记和存储此映像,请运行以下命令将映像推送到公共注册表:
docker login docker tag your_docker_hub_username/doweb docker push
您可以通过从浏览器或命令行在Docker Hub中搜索来验证新映像。
第5步 - 启动私人注册表
可以在私人环境中运行注册表以保持图像更加安全。 它也减少了Docker引擎和映像库之间的延迟。
Docker Registry是一个可以像任何其他容器一样启动的容器。 由于注册表拥有多个图像,因此最好将存储卷附加到该图像上。
docker run -d -p 5000:5000 --restart=always --name registry -v $PWD/registry:/var/lib/registry registry
请注意,容器是在后台启动的,端口5000暴露, registry目录映射到主机文件系统。 您可以通过执行docker ps命令来验证容器正在运行。
我们现在可以标记一个本地图像,并将其推送到私人注册表。 我们首先从Docker Hub中取出busybox容器并对其进行标记。
docker pull busybox docker tag busybox localhost:5000/busybox docker images
以前的命令确认busybox容器现在用localhost:5000标记,所以将图像推送到私有注册表。
docker push localhost:5000/busybox
将图像推送到本地注册表,让我们尝试从环境中删除它,并从注册表中拉回。
docker rmi -f localhost:5000/busybox docker images docker pull localhost:5000/busybox docker images
我们经历了拉动图像,标记,推送到本地注册表,最后拉回来的整个圈子。
可能有些情况下您想要在专用主机中运行私有注册表。 在不同的机器上运行的Docker引擎会与远程注册表进行通信,以获取和推送图像。
由于注册表不安全,我们需要修改Docker引擎的配置以启用对不安全注册表的访问。 为此,编辑位于/etc/docker/daemon.json
的daemon.json文件。 创建文件,如果它不存在。
添加以下条目:
编辑/etc/docker/daemon.json
{
"insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]}
将REMOTE_REGISTRY_HOST
替换为远程注册表的主机名或IP地址。 重新启动Docker引擎以确保应用配置更改。
结论
本教程帮助您开始使用Docker。 它涵盖了安装,容器管理,映像管理,存储和私有注册表等基本概念。 本系列即将发布的会议和文章将帮助您超越Docker的基础知识。
相关参考:docker教程
以上がDockerをインストールして設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。