Dockerをゼロから学ぶ

Dockerをゼロから学ぶ

[編集者注] Dockerはオープンソース化されて以来、大手企業から幅広い注目を集めています。おそらく今では、インターネット企業は、自社の運用・保守システムが Docker (または Pouch など) に基づいていない場合、自らをインターネット企業と呼ぶことを恥ずかしく思うでしょう。

この記事では、Docker の基本的な概念、初歩的な使用方法、Docker を使用すると効率が大幅に向上するシナリオについて簡単に紹介します。

原理

Docker に関する最も単純で、やや誤った理解は、「Docker は非常に優れたパフォーマンスを備えた仮想マシンである」というものです。

上で述べたように、これは多少誤った発言です。 Docker は従来の仮想マシン技術よりもはるかに高度です。具体的には、Docker はホスト マシン上のハードウェア セットを仮想化してからオペレーティング システムを仮想化することはありません。代わりに、Docker コンテナ内のプロセスをホスト マシン上で直接実行できるようになります (Docker はファイル、ネットワークなどを分離します)。このようにして、Docker は「より軽量になり、より高速に実行され、同じホスト マシン上でより多くのインスタンスを作成できるようになります。」

Docker には、イメージ、コンテナ、リポジトリという 3 つの主要な概念があります。

  • イメージ: 「善人カード」を取得する傾向があるプログラマーは、イメージの概念に精通している必要があります。しかし、Windows の ISO イメージと比較すると、Docker のイメージは、単純に積み重ねられた一連のファイルではなく、階層化され、再利用可能です (圧縮されたソース コード パッケージと Git リポジトリの違いに似ています)。
  • コンテナ:コンテナの存在は、イメージのサポートと切り離せません。実行時にイメージを運ぶものです (インスタンスとクラスの関係に似ています)。 Docker の仮想化技術を利用して、コンテナ用にポート、プロセス、ファイルなどの独立した「スペース」が作成されます。コンテナは、ホストマシンから分離された「コンテナ」です。コンテナは、ポート、ボリューム、ネットワークなどを介してホストと通信できます。
  • リポジトリ: Docker のリポジトリは Git のリポジトリに似ており、リポジトリ名とタグがあります。ローカルでイメージをビルドした後、ウェアハウスを通じてイメージを配布できます。よく使用される Docker ハブには、https://hub.docker.com/、https://cr.console.aliyun.com/ などがあります。

関連コマンド

1. インストール

Dockerのインストールは非常に便利です。 macOS、Ubuntu などにはワンクリックインストールツールまたはスクリプトがあります。詳細については、公式の Docker チュートリアルを参照してください。

インストール後、ターミナルに docker と入力します。使用方法の説明が表示されれば、ほとんどの場合インストールは成功していることになります。

2. ベースイメージを見つける

DockerHub などの Web サイトでは多くの画像が提供されています。通常は、そこからベースイメージとして画像を見つけて、その後の操作を続行します。

ここでは、Ubuntu ベースイメージを例にしてノード環境を構成します。

「リンクが長すぎる」ため、Docker Hubへの国内アクセスが遅くなる可能性があります。多くの国内メーカーが提供する画像アクセラレータが使用可能です。

3. ベースイメージを取得する

docker pull コマンドを使用して、関連するハブ Web サイトからローカル コンピューターにイメージをプルします。同時に、プル処理中に、画像が複数の「レイヤー」に従ってプルされていることがわかります。

  1. >docker pull ubuntu:18.04
  2.  
  3. 18.04: library/ubuntuから取得
  4. c448d9b1e62f: プル完了
  5. 0277fe36251d: プル完了
  6. 6591defe1cd9: プル完了
  7. 2c321da2a3ae: プル完了
  8. 08d8a7c0ac3c: プル完了
  9. ダイジェスト: sha256:2152a8e6c0d13634c14aef08b6cc74cbc0ad10e4293e53d2118550a52f3064d1
  10. ステータス: ubuntu:18.04新しいイメージをダウンロードしました

すべてのローカルイメージを表示するには、docker images を実行します。

  1. > Docker イメージ
  2. リポジトリ タグ イメージ ID 作成サイズ 
  3. ubuntu 18.04 58c12a55082a 44 時間前

4. Dockerコンテナを作成する

docker create コマンドは、イメージからコンテナを作成し、コンテナ ID を出力します。

  1. > docker作成  --name ubuntuContainer ubuntu:18.04  
  2. 0da83bc6515ea1df100c32cccaddc070199b72263663437b8fe424aadccf4778

コンテナを実行するには、docker start を使用します。

  1. > docker ubuntuコンテナを起動します

実行中のコンテナを表示するには、docker ps を使用します。

  1. >ドッカーps
  2. コンテナID イメージ コマンド 作成ステータス ポート名
  3. 9298a27262da ubuntu:18.04 "/bin/bash" 4分前 上へ

docker exec を使用してコンテナに入ります。

  1. >docker exec -it 9298
  2. ルート@9298a27262da:/# ls
  3. bin boot dev etc home lib lib64 media mnt opt ​​proc root run sbin srv sys tmp usr var
  4. root@9298a27262da:/# 終了

docker run を使用して、コンテナを 1 つのステップで作成して実行し、コンテナに入ります。

  1. > docker run -it --name runUbuntuContainer ubuntu:18.04 /bin/bash  
  2. ルート@57cdd61d4383:/# ls
  3. bin boot dev etc home lib lib64 media mnt opt ​​proc root run sbin srv sys tmp usr var
  4. ルート@57cdd61d4383:/#
  5. docker psはrunUbuntuContainerが正常に実行されたことを確認できます
  6. >ドッカーps
  7. コンテナID イメージ コマンド 作成ステータス ポート名
  8. 57cdd61d4383 ubuntu:18.04 "/bin/bash" 9秒前 8秒前 runUbuntuContainer
  9. 9298a27262da ubuntu:18.04 "/bin/bash" 9 分前 6 件目

5. コンテナにNode環境をインストールする

コンテナに入った後の操作は通常の環境と同じです。シンプルなノード環境をインストールします。

  1. >apt-getアップデート 
  2. >apt-get をインストール wget
  3. > wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh |バッシュ
  4. インストール後、現在のセッションでは nvm コマンドを読み取れない可能性があります。終了してからターミナル環境に入ることができます
  5. > nvm 8.0.0 をインストール
  6. > ノード -v

6. コンテナをコミットして新しいイメージを作成する

Ghost を使用して Windows をインストールするのと同じように、多くの場合、独自のイメージをカスタマイズし、その中にいくつかの基本環境 (上記のノードなど) をインストールして、必要な基本イメージを作成したいと考えています。ここで docker commit が役に立ちます。

  1. >dockerコミット  --author "rccoder" --message "curl+node" 9298 rccoder/myworkspace:v1  
  2. sha256:68e83119eefa0bfdc8e523ab4d16c8cf76770dbb08bad1e32af1c872735e6f71
  3. dockerイメージを通して、新しく作成されたrccoder/myworkspaceがここにあるのがわかります。
  4. >Dockerイメージ
  5. リポジトリ タグ イメージ ID 作成サイズ 
  6. rccoder/myworkspace v1 e0d73563fae8 20秒前 196MB

次に、新しく作成した画像を試してみましょう。

  1. > docker run -it --name newWorkSpace rccoder/myworkspace:v1 /bin/bash  
  2. ルート@9109f6985735:/# ノード -v
  3. 8.0.0

大丈夫そうですね。

7. イメージをDocker Hubにプッシュする

画像が作成されたので、それを他の人とどのように共有しますか?ここでは、Docker Hub にプッシュする例を取り上げます。

最初のステップは、docker hub にアカウントを登録し、ターミナルでそのアカウントにログインしてプッシュすることです。

  1. >dockerログイン
  2. > docker push rccoder/myworkspace:v1
  3. プッシュはリポジトリ [docker.io/rccoder/myworkspace]参照します。
  4. c0913fec0e19: プッシュ中 [=> ] 2.783MB/116.7MB
  5. bb1eed35aacf: library/ubuntuからマウント
  6. 5fc1dce434ba: library/ubuntuからマウント
  7. c4f90a44515b: library/ubuntuからマウントされました
  8. a792400561d8: library/ubuntuからマウント
  9. 6a4e481d02df: 待機中

8. Dockerfileを使う時が来た

継続的インテグレーションに Docker を使用していますか? Docker について知る前にこれを聞いたことがあるはずですが、これはどこかからコードをコピーして実行する必要があることを意味します (はい、少し travis-ci に似ています)。

Dockerfile の時間です!

Dockerfile は、一連のコマンドとパラメータで構成されるスクリプトです。 docker build を使用してスクリプトを実行し、イメージをビルドして自動的に何かを実行します (travis-ci の .travis.yml に似ています)。

Dockerfile の形式は次のとおりです。

  1. # コメント
  2. 命令引数

ベースイメージは、FROM BASE_IMAGE から指定する必要があります。

より詳細な仕様と手順については、Dockerfile リファレンスを参照してください。ここでは、上記の rccoder/myworkspace:v1 をベースイメージとして、例としてルートディレクトリにディレクトリを作成します。

Dockerfile は次のとおりです。

  1. rccoder/myworkspace:v1から
  2. mkdir aを実行する

次に以下を実行します:

  1. > docker build -t newfiledocker:v1 。
  2. ビルドコンテキストを Docker デーモン送信3.584kB
  3. ステップ 1/2: rccoder/myworkspace:v1から
  4. ---> 68e83119eefa  
  5. ステップ2/2: mkdir aを実行する
  6. ---> 1127aff5fbd3 で実行中 
  7. 中間コンテナ 1127aff5fbd3 を削除
  8. ---> 25a8a5418af0  
  9. 25a8a5418af0 の構築に成功しました
  10. newfiledocker:v1 のタグ付けに成功しました
  11. newfiledocker に基づいて新しいコンテナを作成し、ターミナルで開きます。そこにはすでにフォルダ a が存在していることがわかります。
  12. > docker docker run -it newfiledocker:v1 /bin/bash
  13. ルート@e3bd8ca19ffc:/# ls
  14. a bin boot dev etc home lib lib64 media mnt opt ​​proc root run sbin srv

Dockerfile の力により、Docker には無限の可能性が残されています。

何ができるか

ここまで述べてきましたが、実際の運用環境で Docker は何ができるのでしょうか?よく使われるものは以下のとおりです(コメントに追加してください)

1. 複数環境の展開切り替え

ビジネス開発においては、開発環境とオンライン環境を区別する必要があることがよくあります。 Docker を使用すると、開発環境のコードと環境をそのまま汚染なくオンライン環境に移行できます。特定の自動化プロセスと組み合わせることで、自動リリースを実現できます。

2. フロントエンドクラウド構築

node_modules の厄介な問題により、同じリポジトリで開発している複数の人が、異なるパッケージ バージョンを使用している複数の人に遭遇することが多く、他の人と異なるバージョンを使用していることに気付かないこともあり、最終的にはリリース後にオンラインの問題が発生します。 Docker を使用すると、クラウド内に新しいコンテナを作成し、汚染なく低コストでリモートでコードをビルドし、さまざまな人が同じバージョンを使用することを保証できます。

3. 複雑な環境でもワンクリックで設定

シナリオによっては、非常に複雑な環境を構成する必要がある場合があります (たとえば、新入生は Java 環境を構成する必要があります)。この場合、Docker を使用して環境構成をカプセル化し、低コストで誰でも使用できるイメージを直接生成できます。

4. 継続的インテグレーションユニットテスト

travis-ciに似ている

5. 同じアプリケーションの複数のバージョンとファイルの分離

たとえば、このプロジェクトはノード 6 に依存し、そのプロジェクトはノード 8 に依存します (これは単なる例であり、ハード ディスクが十分に大きい場合は、nodeinstall を使用して解決することをお勧めします)。 100 個の WordPress プログラムが同じサーバー上で実行されています (相互汚染を防ぐために Docker を使用して分離を確立できます)。

6. お金を節約する

まあ、低コストの安全性が売られ過ぎです(霧)。

<<:  Office 365の中国でのビジネスは商用利用開始4年目で400%以上成長

>>:  米財務省はアリババに対し、米国内でのクラウドコンピューティングサービスの提供を禁止する可能性がある。

推薦する

Funshine Sales の Luo Xu: SaaS サービスのネットワーク効果

コンテンツ1. インターネットの本質は、相互作用、接続、ネットワーキングです。エンタープライズサービ...

Apple iCloudがハッキングされる

海外メディアの報道によると、ハッカーらが欧米のオタクが集まるフォーラム「4chan」でハリウッド女優...

過度な相互利益と過度な友好リンクはGoogleを苛立たせる

フレンドリーリンクは、インターネットで最も古いウェブサイトプロモーション方法です。インターネットの初...

VULTR の IP が「不明」とマークされている場合はどうすればよいですか?

多くの人が Vultr の VPS を使用していますが、IP ブロックや「説明できない」問題、そして...

微博の大手アカウントが死滅。微博の急成長期の極端な代表

彼らはWeiboの急成長期の極端な代表であり、そのため他のものよりも早く目新しさの喪失と過剰商業化の...

初心者がSEOを正しく学ぶ方法 学習プロセスを最適化する

現在、SEO を学び始める人が増えていますが、多くの人は学び始めても正しい方向を見つけられません。今...

Putty を使用して VPS サーバーに接続するチュートリアル

Putty ソフトウェアを使用して Windows 上の Linux サーバーに接続してログインする...

エッジAIとエッジコンピューティングについて学ぶ

エッジ人工知能 (EdgeAI) は、人工知能の分野における新しい注目の領域の 1 つです。目標は、...

マイクロソフトがカレンダーアプリSunriseを買収

アメリカのテクノロジーブログ「TechCrunch」の最近の報道によると、事情に詳しい情報筋が、マイ...

Crunchyroll の有料ユーザーは 10 万人を超えています。アニメ動画サイトの春は来るのでしょうか?

日本の視聴者が、日本のテレビで高画質で放送されるアニメシリーズ5作品のうち4作品を同日に視聴できるよ...

servarica: 月額 7 ドル、1500g ハード ドライブ VPS、100Mbps 無制限トラフィック、カナダのデータ センター

servarica はプロモーション用に別の大容量ハードドライブ VPS をリリースしました。今回の...

tragicservers - $21/年/メモリ 1g/CPU 4個/ハードディスク 65g/トラフィック 1.5t/G ポート/ロサンゼルス/QN

tragicservers という会社で、ドメイン名も k9vps.com です。2014 年 10...

新しい SEO ブランドが最適化の世界にスプリット テストを導入

長年にわたり、SEO ソフトウェアの概念は非常に厳しい変革期を経てきました。長年にわたって非常に安定...

最新の百度アルゴリズムによる外部リンク構築の原則の分析

今年も百度のアルゴリズムが更新され、ウェブサイトの独創性とユーザー体験がさらに強調されました。ウェブ...