GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

UbuntuにDockerをインストールして使用する方法(実際の世界)

UbuntuにDockerをインストールする方法についての情報をお探しの場合は、適切な場所にいます。それだけでなく、ボーナスとして、このチュートリアルでは、基本的なDockerコマンドを実行してコンテナーを実行および管理する方法も示します。

Visual Studio(VS)Codeの便利な機能を使用して、SSHスキルを強化する方法も学習します。始めましょう!

関連: Linuxの世界にいるWindowsGuy:VSCodeとリモートSSH

前提条件

ステップバイステップでフォローしたい場合は、このチュートリアルで、次のものがあることを確認してください。

  1. SSHが有効になっているUbuntuServerLTSの新規インストール (このガイドではUbuntu Server LTS 20.04.1を使用します)
  2. VSCodeを備えたWindowsマシン インストール済み(このガイドではVisual Studio Code 1.52.1を使用します)
  3. インストールされているVSCode公式SSH拡張機能 UbuntuServerLTSインストールに接続します
UbuntuへのDockerのインストール

まず、UbuntuにDockerをインストールしてみましょう。この時点で、チュートリアルは、SSH経由でUbuntuサーバーに接続されたVSCodeが開いているローカルWindowsコンピューターを使用していることを前提としています。この便利な環境をセットアップする方法については、VSコードとSSHの使用に関する最新の記事をご覧ください。 。

以下の例では、VSCodeはホームを使用してUbuntuにリモート接続されています フォルダ(この場合、 / home / homelab )ワークスペースとして開く:

DockerをUbuntuServerにインストールする実際のプロセスは、2つのコマンドです。 Ubuntuは、apt

VS CodeのSSHターミナルウィンドウで、次の2つのコマンドを実行してDockerをインストールします。

sudo apt update -y
sudo apt install docker.io -y

Ubuntu Serverのインストール中に、Dockerをスナップとしてインストールするオプションが提供された場合があります。実行した場合は、最初にsudo snap remove dockerを実行してスナップパッケージを削除します。

以下のアニメーションでDockerのインストールを見ることができます:

Ubuntuは、起動時にサービスを自動的に有効にして開始するように設定するのに十分な機能を備えているため、Dockerの使用を開始する準備が整いました。

UbuntuでのDockerコンテナの作成と実行

Dockerがインストールされたので、Dockerで何ができますか? Dockerコンテナの作成から始めましょう。このチュートリアルでは、Dockerコンテナの良い例として静的Webサーバーをセットアップします。このセクションでは、次のことを行います。

  • DockerHubから新しいコンテナを設定します HTTPサービスを実行するための画像リポジトリ
  • ポートマッピングを使用して、コンテナ内のHTTPポートをUbuntuホストにマッピングします
  • コンテナ内からUbuntuホストに重要なデータをマッピングするようにバインドマウントを設定します
  • コンテナの再起動による永続性の設定

上記の手順のいずれかがわかりにくいと思われる場合でも、心配しないでください。プロセスを理解するのに役立つように、各手順を1つずつ説明します。

Dockerイメージのダウンロード

あなたが尋ねなければならない最初の質問は、このコンテナはどこから来るのかということです。 DockerHubを見てみましょう。

Dockerの大部分は、画像リポジトリを理解することです。 。 Docker内のサービスは、パッケージのように配布されるのではなく、Dockerイメージとして配布されます。

Docker Imageは、発行者が配布したいソフトウェアとファイリングシステム全体のスナップショットです。これは、Windowsの.wimイメージの作成に似ています。

このファイルシステムキャプチャにより、Dockerは非常に人気があります。ソフトウェアはオペレーティング環境全体とともにキャプチャされます。そうすることで、サーバー環境の違いによって生じる問題が解消されます。

画像の最も人気のあるリポジトリ(およびデフォルト)の1つは、 Docker Hubです。 公式Dockerリポジトリとも呼ばれます。イメージリポジトリは、コンテナとして実行するために事前に作成された何千ものDockerイメージをダウンロードできる場所です。

このチュートリアルは静的Webサーバーをセットアップしているため、Webサーバーイメージをダウンロードする必要があります。そこにある2つの最も人気のあるWebサーバーはApachehttpd およびNginx ただし、状況を少し変更して、新しいWebサーバーを紹介する可能性があるため、 Caddyと呼ばれるサーバーを使用してみましょう。 。

Caddyは、そのシンプルさで知られるWebサーバーです。多くの有効なサーバー構成は、ファイル内の1行を使用して展開できます。シンプルは良いことであり、また良い基本的な例にもなります。

  1. まず、Dockerイメージを見つける必要があります。 Windowsマシンで、 https://hub.docker.comに移動します 。
  2. caddyの検索を実行します ページの左上隅にあります。次のようなページが表示されます。

Docker Hubの利点(および欠点)は、Dockerイメージを作成してサイトにアップロードできることです。

選択する画像が信頼できるソースからのものであることを確認するように注意する必要があります。自分のバージョンを選択してDockerHubにアップロードすれば、誰でも画像にマルウェアを配置できます。

3.画像の名前をメモします。上のスクリーンショットでは、名前は caddyです。 まさに。次の手順で画像名を指定するには、この名前が必要です。

UbuntuでDockerを使用してコンテナーを実行する

ダウンロードする画像の名前がわかったら、それをダウンロードしてコンテナを作成します。

イメージからコンテナを起動するには、1つのコマンドが必要です。 Ubuntuサーバーに接続されているSSHターミナルで、次のdocker runを実行します。 コマンド。

以下のコマンドは、 caddyをチェックします ローカルマシン上のイメージ。存在しない場合は、Docker Hubからイメージをダウンロードし、コンテナを作成して起動します。以下のコマンドは-pを使用しています Ubuntuサーバーのリスニングポート80をコンテナのポート80にマッピングするように切り替えます。この機能はポートマッピングと呼ばれます。

sudo docker run -p 80:80 caddy

ほとんどのDockerHubイメージは、 /の命名規則に従います。ただし、Dockerによって「公式」とブランド化された画像には、その前にがありません(上記のキャディーのように)。

上記のコマンドを実行すると、次のように出力され、キャディのログ情報がターミナルに直接表示されます。

ほとんどすべてのdockerコマンドの前にsudoが付いていることに気付くかもしれません。 、コマンドを管理者として強制的に実行します。デフォルトでは、dockerサービスはrootとして実行されます 、およびコンテナまたはイメージに加えるすべての変更は、管理者として行う必要があります。

そして…あなたは稼働しています!これですべてです。 DockerをUbuntuにインストールしてよかったですか?

次に、Windowsコンピューターでhttp:// に移動すると、Caddyのランディングページが表示されます。以下で確認できます(このガイドのIPは http:// homelab-dockerに置き換えられています ):

キャディー コンテナは現在実行中ですが、問題に気付いた可能性があります。そのdockerを実行する コマンドがコマンドラインを引き継ぎます。これ以上コマンドを実行することはできず、セッションが終了すると、実行中のコンテナーは停止します。コンテナをバックグラウンドで実行して(デタッチとも呼ばれます)、この問題を解決しましょう。 コンテナ)。

​​バックグラウンドでのDockerコンテナの実行

これで実行中のコンテナができましたが、コマンドラインがハングしました。他に何もできません。コンテナをサービスのようにバックグラウンドで実行することにより、コンテナを起動するためのより良い方法が必要です。そのためには:

  1. control + c を押して、現在のコンテナを停止します コマンドラインで。これにより、コマンドラインが返されます。
  2. ここで、-dを使用して、前と同じコマンドを再実行します。 今回は以下のようにパラメータを設定します。 DockerがコンテナIDを返し、コマンドラインを返すことがわかります。
sudo docker run -d -p 80:80 caddy

Dockerコマンドを使用したバックグラウンドコンテナの管理

1つ以上のバックグラウンドDockerを実行したら、なんらかの方法でそれらを管理する必要があります。 Dockerには、docker containerを使用してこれを行うためのいくつかの異なるコマンドが用意されています。 コマンド。

  • sudo docker container list -a :すべてのコンテナ(実行中と停止中の両方)とそのステータスを一覧表示します
  • sudo docker container stop <name> :名前(またはID)でDockerコンテナを停止します
  • sudo docker container start <name> :名前(またはID)でDockerコンテナを起動します
  • sudo docker container prune :停止したすべてのコンテナを破棄して削除します

以下のスクリーンショットで、コンテキストで使用されている上記のすべてのコマンドを確認できます。

サーバー上のコンテナーを表示、変更、検査、またはリモートで実行するためのDockerコンテナーコマンドは他にもたくさんあります。 sudo docker container --helpを実行すると、すべてを表示できます。 。

バックグラウンドで実行されているコンテナにウェブサーバーをデプロイしたとしても、カスタムコンテンツをホストする方法はありません。現状では、CaddyはデフォルトのWebページを提供しているだけです。

ここで、バインドマウントと呼ばれる概念でDockerイメージを使用する方法を見てみましょう。 意味のあるデータを含むコンテナをデプロイします。

バインドマウントを使用したコンテナデータの保存

Dockerは、イメージ(およびイメージが生成するコンテナー)の概念を使い捨てまたは一時的として機能します。 。 Caddyソフトウェアが更新された場合は、サービスを更新せず、赤ちゃん全体を浴槽で捨て、完全に新鮮な画像を最初から使用します。

このようなコンテナを廃棄して再作成することの利点は重要です。ソフトウェアの不安定性は、(潜在的に)古いソフトウェアを継続的に更新することによって時間の経過とともに導入されます。 Dockerは毎回新しいイメージを使用することで、更新のたびに安定した信頼性の高い(おそらく)テスト済みのベースを提供します。

この概念は、Windowsアプリケーションソフトウェアを更新するたびにWindowsの新規インストールを使用することと同じです。 Windowsでは楽しいアイデアではありませんが、Dockerには非常に適しています。

ただし、使い捨ての方法論には明らかな問題があります。現在のサービスが吹き飛ばされたときに重要なデータが破棄されることは望ましくありません。 Dockerは、バインドマウントと呼ばれる概念を使用してこの問題を解決します 。

次に、コンテナのバインドマウントを作成する方法を見ていきましょう。

フォルダ構造の作成とクリーンアップ

バインドマウントを使用する前に、このデータを保存する場所を作成する必要があります。このチュートリアルでは、ホームディレクトリにフォルダを作成します。 Ubuntuサーバーに接続したままVSCodeでこれを行うには:

  1. VSコードの空白の領域を右クリックしますエクスプローラー パネルをクリックして、新しいフォルダを選択します。

2.新しいフォルダにcontainers/caddy/filesという名前を付けます。

フォルダ名は、次のdockerコマンドで正しく定義されている限り、あなた次第です。スラッシュを使用することにより、VSCodeはこれを3つのフォルダーの作成として解釈します。 ファイル フォルダはcaddyのサブディレクトリです 、およびキャディー コンテナのサブディレクトリです。 このフォルダ構造を使用する必要はありませんが、同じサーバー上に複数のコンテナがある場合は、この構造の方が理にかなっています。

以前に行っていない場合は、次の方法で以前に作成したコンテナを停止して削除します。

# stop and remove ALL currently running containers.
# The $(sudo docker ps -q) dynamically grabs all running container IDs
sudo docker container stop $(sudo docker ps -q)
sudo docker container prune

このコマンドは、以下のスクリーンショットで確認できます。

バインドマウントを使用したキャディコンテナの展開

これで、Ubuntuサーバー上にフォルダー構造が構築されました。バインドマウントを備えたキャディコンテナを作成するときが来ました。

  1. 行き過ぎる前に、まず、作業しているコンテナが永続データを格納している場所を特定します。その場所は、Dockerイメージを作成したユーザーとその目的によって異なります。

永続データが保存されている場所を見つける最良のオプションは、DockerHub内のドキュメントで問題のイメージを確認することです。 Caddyの場合、ドキュメントはここにあります。 :

2.以下のコマンドを使用してコンテナを起動します。 -v ~/containers/caddy/files:/usr/share/caddy パラメータは、コロンの前のパスをマッピングしています(〜/ containers / caddy / files )コンテナ内のフォルダ( / usr / share / caddy )。これは、ポートマッピングコマンドと非常によく似ています。ただし、ポートではなくフォルダをマッピングする点が異なります。このタイプのコマンドは、バインドマウントと呼ばれます。 。

# bind a folder on the host (the path before the colon) to
# /usr/share/caddy inside the container
sudo docker run -d -p 80:80 -v ~/containers/caddy/files:/usr/share/caddy caddy

チルダ(~ )上記のコードでは、ホームフォルダを参照しています。この記事では、これは/home/homelabと同等です。 。

3.ブラウザを開き、サーバーのhttpアドレスに戻ります。サーバーが404を提供していることに気付くでしょう ページ。現在、 index.html がないため、これは予想されることです。 〜/ container / caddy / filesのファイル 。

4. index.htmlを作成します 〜/ container / caddy / filesのファイル 次のようなVSCodeExplorerウィンドウのUbuntuサーバーで:

<body><h2>hello world!</h2></body>

5.サーバーのHTTPアドレスに移動し、コンテナーが新しい index.htmlを提供していることを確認します。 ページ。

上記のすべてを次のアニメーションで見ることができます:

docker管理コマンドとは異なり、作成するファイル( index.html など) )管理者権限は必要ありません。これは、キャディサーバーが提供しているコンテンツを、ホームフォルダにあるのと同じように所有しているためです。

バインドマウントの検証

素晴らしい!完全に新しいDockerコンテナを使用しているだけでなく、そのコンテナはホームフォルダにローカルに保存されたコンテンツを提供しています。次のコマンドを実行することでこれを証明できます:

  1. 実行中のコンテナを停止して削除します。バインドマウントを使用していなかった場合、この手順により、そのindex.htmlファイルを含むすべてが完全に削除されます。
sudo docker container stop $(sudo docker ps -q)
sudo docker container prune

2.新しいコンテナを作成します。

sudo docker run -d -p 80:80 -v ~/containers/caddy/files:/usr/share/caddy caddy

3.新しいコンテナがhttp://<your server>でindex.htmlファイルを引き続き提供していることを確認します アドレス。

永続的なDockerコンテナの作成

サーバーの再起動時にコンテナが停止する場合、コンテナはそれほど有用ではありません。デフォルトでは、それを起こさないと、それが起こります。これを防ぐために、新しいキャディコンテナを再度生成しましょう。ただし、今回は、Dockerホスト(この場合はUbuntu)が再起動したときに再起動します。

  1. 実行中のすべてのコンテナを停止して削除します。
# stop and remove ALL currently running containers
sudo docker container stop $(sudo docker ps -q)
sudo docker container prune

2. --restart alwaysを使用してキャディコンテナを再起動します パラメータ。この新しいコンテナを、再起動時にホストで開始するように設定します。 --restart alwaysを使用 フラグを設定すると、コンテナは適切なサービスのように動作するようになります。つまり、起動時に自動的に起動します。

sudo docker run -d -p 80:80 -v ~/containers/caddy/files:/usr/share/caddy --restart always caddy

3.サーバーを再起動します。

4.ここで、新しいコンテナが起動し、http://<your server>でindex.htmlファイルを引き続き提供していることを確認します。 アドレス。

以下に適用される次のコマンドを確認できます。

先に進む

この段階では、Docker環境が機能し、イメージとコンテナーの基本を理解している必要があります。コンテナのプル、開始、停止、および基本的な管理を実行できます。また、バインドマウントとポートマッピングを使用して、実行中のWebサービスコンテナを正常に作成しました。

Dockerに関しては、まだカバーすべきことがたくさんあります。次の記事では、Docker Composeを使用した高度なDocker管理について説明しますので、このスペースにご注目ください。


Docker
  1. Ubuntu20.04にDockerをインストールして使用する方法

  2. CentOSにDockerComposeをインストールして使用する方法

  3. UbuntuでDockerをインストールしてDockerコンテナを実行する方法

  1. Ubuntu20.04にDockerをインストールして使用する方法

  2. Ubuntu20.04にWineをインストールして使用する方法

  3. Ubuntu18.04にDockerをインストールして使用する方法

  1. Ubuntu18.04にDockerComposeをインストールして使用する方法

  2. Ubuntu18.04にFFmpegをインストールして使用する方法

  3. Ubuntu18.04にWineをインストールして使用する方法