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%以上成長

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

推薦する

外国貿易模倣ブランド VPS/著作権フリー VPS-hostsolutions、ルーマニア VPS、月額支払い 2 ユーロ

外国貿易ウェブサイトを運営している友人の中には、著作権紛争に遭遇する人もいるかもしれません。もちろん...

AirPods は売り切れましたが、AirPods 2 は登場するのでしょうか?

月給5,000~50,000のこれらのプロジェクトはあなたの将来ですA5 Startup Netwo...

バイトダンスの攻撃:コンテンツ配信だけでは満足しない検索ビジネスのレイアウト

「百度を蹴り、テンセントと戦い、微博に対処する」。今日頭条の親会社であるバイトダンスは絶えず動き出し...

生き残るための賛辞:タオバオでの買い物旅行の物語

【ポイント】Taobaoのような複雑なシステムを持つウェブサイトでも、ミニマリストスタイルの斬新なウ...

瀋陽QRコードマーケティングストリートへの旅は多くの感動をもたらしました

メーデーの祝日のおかげで、珍しく休みが取れました。天気は良くなかったのですが、小元宝に負けずに中街の...

良い最適化にはより多くのポジティブなエネルギーが必要

ウェブサイトがブロックされ、イライラするだけでなく、いくつか考えも浮かびました。たとえば、最適化をう...

Vultr-簡単な紹介

Vultr は、まったく新しい VPS プロバイダーです。まず背景について触れてみましょう。vult...

Microsoft Azure が中国に新たなデータセンター リージョンを正式に開設

Microsoft と 21Vianet は、2022 年 3 月 1 日より、中国で新し​​い A...

#VPS評価# gigsgigscloud: シンガポール VDS、3 つのネットワークへの直接接続、200Mbps の帯域幅保証

gigsgigscloud のシンガポール VPS に新しいシリーズ「仮想専用サーバー」が追加されま...

新しいウェブサイトはオンラインになってから2時間以内に百度に掲載された。2日以内に百度の重みは1になった。

みなさんこんにちは。今日は、私の新しいウェブサイトがいかにして Baidu に素早く登録されたかをシ...

ブロックチェーンの破壊力4: 分散型インテリジェントID認証システム

前の記事からの続き: 《ブロックチェーンの破壊力の一つ:基盤技術》ブロックチェーンの第二の破壊力:信...

検索フレンドリーなデザインの基本原則について語るシャリ・サロウ

5月25日、厦門でグローバル検索エンジン戦略会議が開催されました。Grantastic Design...

ftpit - 3 ドル / 1g メモリ / 20g SSD / 1T トラフィック / ロサンゼルス

Fititは長い間HostCatに登場していません。FTPIT VPSが最後に登場したのは今年1月1...

8684 の苦境の背景にある物語: 弱いチーム、盲目的な拡大、そして資金不足

微博アカウント@互联网那个点事によると、8684が所在する広州天局ネットワークテクノロジー株式会社は...

エッジコンピューティングの市場規模は2030年までに1,559億ドルに達すると予想されている

COVID-19の流行により、世界のエッジコンピューティング市場の規模が拡大エッジ コンピューティン...