Dockerを使用してコンテナをデプロイする方法

Dockerを使用してコンテナをデプロイする方法

ウェブサイトを立ち上げるために、ベアメタルから完全なサーバーをインストールする必要がないと想像してください。オペレーティング システムをインストールし、サーバー ソフトウェアをインストールして、複雑なアプリケーションやサイトを展開する代わりに、すべてを自己完結型パッケージで開発し、1 つのコマンドでプッシュすることができます。

[[269248]]

これはコンテナを使用することで得られる多くの利点の 1 つです。開発と展開のサイクルが驚くほど効率的になります。しかし、これらのコンテナをどのように展開するのでしょうか?ここでそのプロセスをご案内したいと思います。 Ubuntu Server 18.04 上のコンテナーとして基本的な NGINX Web サーバーを展開することに焦点を当てます。これらはすべて Docker の助けを借りて実行されます。

1. 何が必要ですか?

NGINX をコンテナとして正常にデプロイするには、次のものが必要です。

  • Docker がインストールされた Ubuntu Server 18.04 の実行中のインスタンス。
  • dockerグループのメンバー

はい、この 2 つの部分があれば準備完了です。

2. ヒント

デプロイするすべてのコンテナは、DockerHub から取得したイメージに基づいています。 1 つの画像をプルダウンして、いつでも使用できます。 DockerHub には、個々のアプリケーションやプラットフォーム用のイメージも多数あります。 NGINX を例に挙げてみましょう。 DockerHub で NGINX を検索すると、約 56,172 件のエントリが見つかります。これは、すべてのエントリが使用可能な画像であることを意味するものではありません。

画像の名前は次のとおりです。

  1. 名前/ 説明的な名前 

たとえば、NGINX の場合、次の名前のミラーが見つかる場合があります。

  1. bitwarden/nginx (リバース プロキシ NGINX イメージ)

おそらく次のようなものが見つかるでしょう:

  1. nginx/nginx-ingress ( Kubernetes用のNGINX Ingress コントローラー)

ご覧のとおり、必要なもののほとんどすべてに画像があります。

今のところ、1 つのミラーにのみ焦点を当てる必要があります。このイメージは、NGINX の公式リリース バージョンです。

3. イメージをプルする

画像を使用する前に、ローカル ドライブに保存する必要があります。これを行うには 2 つの方法があります。

  • pullコマンドを直接使用する
  • 間接的に、コンテナの展開中に。

DockerHub からイメージをプルするには、ターミナル ウィンドウを開いて次のコマンドを発行します。

  1. docker プル nginx

Ingress イメージをプルする場合、コマンドは次のようになります。

  1. docker pull nginx/nginx-ingress

必要なイメージを取得したら、次のコマンドを使用してそのイメージが存在することを確認できます。

  1. Docker イメージ

上記のコマンドを実行すると、取得したすべてのイメージが一覧表示されます (図 A)。


図 A: NGINX と nginx/nginx はどちらも利用可能なイメージです。

ランダムな画像を取得するときは注意してください。なぜ?なぜなら、それらが作られた理由は決して分からないからです。コンテナには、ネットワークやデータに大混乱を引き起こす可能性のある悪意のあるコードが含まれている可能性があります。したがって、公式イメージ (NGINX イメージなど) のみを使用するのが最適です。

4. コンテナの展開

次にコンテナをデプロイします。まだイメージをプルしていない場合は、デプロイフェーズ中に必要なイメージがプルダウンされます。公式の NGINX イメージを取得するので、それを使用します。

コンテナをデプロイするには、次のように docker コマンドを使用します。

  1. docker run --name NAME -p ポート イメージ 

述べる:

  • NAME は、コンテナに付ける名前と同じです (nginx-webserver など、任意の名前を指定できます)。
  • PORTS 使用するポート (形式: ネットワーク ポート:コンテナ ポート)。
  • IMAGE はコンテナのイメージ (例: nginx) に使用されます。

したがって、NGINX コンテナをデプロイするための基本コマンドは次のようになります。

  1. docker run --name nginx-webserver -p 80:80 nginx  

コンテナがデプロイされ、NGINX Web サーバーはポート 80 のローカル ネットワーク上で利用できるようになります。しかし、ポート 80 を使用してサーバーにコンテナをデプロイした場合はどうなるでしょうか?次のようにしてネットワーク ポート 8080 にデプロイできます。

  1. docker run --name nginx-webserver -p 8080:80 nginx  

この時点で、次の質問が表示される場合があります。上記のコマンドのいずれかを実行すると、bash プロンプトに戻りません (図 B)。


図 B: NGINX を利用したサイトにアクセスすると、コンテナーからフィードバックが提供されますが、プロンプトは表示されません。

5. 分離モード

コンテナを実行して bash プロンプトを取得するにはどうすればよいですか?これを行うには、コンテナをデタッチモードで実行する必要があります。その前に、キーボードの組み合わせ [Ctrl] + を使用して現在のコンテナーを終了する必要があります。この組み合わせによりプロンプトが返され、コンテナが強制終了されます。

コンテナが実行中かどうかを確認するには、次のコマンドを使用します。

  1. ドッカーps -a

すべてのコンテナとそのステータスがリストされます (図 C)。

コンテナがまだ実行中の場合は、同じポートに別のコンテナをデプロイする前にコンテナを強制終了する必要があります (そうしないと、ポートの競合が発生し、コンテナをデプロイできなくなります)。実行中のコンテナを強制終了するには、まずコンテナ ID (ランダムな文字列) が必要です。この文字列は、docker ps -a コマンドを発行したときに表示されます。実行中のコンテナを終了するには、次のコマンドを使用します。

  1. docker stop コンテナID

ここで、CONTAINER_ID は問題のコンテナの ID です。

次のコマンドでコンテナを削除できます。

  1. docker rm コンテナID

ここで、CONTAINER_ID は問題のコンテナの ID です。

コンテナ ID 全体を入力する必要はなく、文字列の最初の 4 文字で十分であることに注意してください。

コンテナをデタッチモードでデプロイするには、次のコマンドを実行します。

  1. docker run --name nginx-webserver -p 80:80 -d nginx  

今回はプロンプトが返されるだけでなく、Docker によってコンテナ ID も表示されます (図 D)。


図 D: デタッチ モードで実行されている NGINX コンテナ。

6. 実行中のコンテナへのアクセス

実行中のコンテナで作業したい場合はどうすればよいでしょうか? NGINX に変更を加えたり、NGINX で表示される Web サイトの開発を開始したりしたい場合はどうすればよいでしょうか?したがって、コンテナにアクセスする必要があります。したがって、コンテナ ID が必要になります。 ID を使用して、次のコマンドを発行します。

  1. docker exec -it コンテナID bash

ここで、CONTAINER_ID はコンテナの ID です。

これで、実行中のコンテナ プロンプト (図 E) が表示され、NGINX サーバーの操作を開始できるようになります。


図 E: NGINX コンテナのプロンプト、準備完了。

コンテナを終了するには、exit コマンドを入力するだけです。

7. 思ったより簡単

ここまで読んでいただければ、コンテナの展開は思ったほど難しくないことがお分かりいただけたと思います。 Docker を使用すると、プロフェッショナルなアプリケーションやサービスを数分で起動できます。

<<:  KubeCon 2019のレビュー: クラウドネイティブの登場

>>:  パブリッククラウドに関する10の誤解を払拭

推薦する

弾性スケーリングのための5つの条件と6つの教訓をまとめました

序文弾力的なスケーリングは、クラウド コンピューティング時代がもたらしたコア テクノロジーのメリット...

タイトルタグの記述におけるセパレーターの使用に関する詳細について簡単に説明します。

最適化を行う人は誰でも、タイトルタグの重要性を十分に認識している必要があります。タイトルタグを書くと...

VaiCDNは、「大帯域幅+攻撃がレイテンシに影響しない」、超大帯域幅/実名フリー/モバイルシールド処理、USDT対応など、高防御CDNを提供します。

vaicdn は、超大容量の帯域幅、超強力な防御、モバイル シールド処理のサポート、豊富なシナリオの...

馬化騰の社内講義:製品をいかにして人を引き付けるか

【編集者注】この記事は、徐丹丹の微博から転載した馬化騰による内部講演です。最近、上司たちは頻繁に製品...

嵐に耐えられない検索エンジン最適化プロモーション

馮英建Google は数か月ごとに「ダンス」(GoogleDance)をします。私たちはそれに慣れて...

スマートフォンが SP モデルを推進: 中国電信がワイヤレス音楽業界を改革

長らく収益モデルに制約されてきた中国のオンライン音楽業界は、新たなビジネスモデル革新を起こしつつある...

高齢者介護産業が爆発的に成長し、デジタル高齢者介護の構築に関する予備調査

[[257673]] 2016年には「健康中国2030」計画概要が発表され、医療産業の発展と医療サー...

ウェブサイトのプロモーション体験に関する簡単な説明:外部リンクの効果をどのように変えるか

外部リンクの数にこだわるべきか、それとも外部リンクの質に切り替えるべきでしょうか? 2 つの単純なポ...

業界に影響を与えるエッジコンピューティングのイノベーショントップ10

業界に影響を与えるエッジコンピューティングのイノベーショントップ10を解き明かすエッジコンピューティ...

今夜、Baidu にインデックスされたページから得た考え

午前3時半。超怖いオーディオホラー小説を聴き終わったところです。何気なくチェックしてみたら、Baid...

DigitalOcean - サンフランシスコの新データセンター

DigitalOcean がいかに素晴らしいかは、すでにご存じでしょう。強力な財務サポートがあります...

Webmaster.com の毎日のレポート: 独身の日に大手 e コマース企業 7 社が競い合う; Xiaomi が有料プランを開始

1. 7つの大手電子商取引会社が独身の日に向けて準備中:65,000の新しい宅配会社が戦いに備えてい...

Longhorn、エンタープライズレベルのクラウドネイティブコンテナ分散ストレージ監視

[[419119]]目次Longhornを監視するためのPrometheusとGrafanaの設定L...

Gラインクラウドコンピューティングシリーズ:フルスタッククラウド管理

この記事は、Feng Fan 氏が執筆した WeChat パブリックアカウント「独特の職人技と効果」...

ウェブサイトの可能性を分析するにはどうすればいいですか?

ウェブサイトの潜在能力は非常に重要です。発展の見込みのないウェブサイトは、いつまでも小さなサイトに過...