Dockerのクイックガイド

Dockerのクイックガイド

Docker は、安全で繰り返し可能な環境でソフトウェアを自動的にデプロイする方法を提供し、コンピューティング プラットフォームの開発方法に革命をもたらします。現在、Docker はインターネット企業で広く使用されています。この記事を読めば、10 分で Docker を使い始めることができます。

Dockerとは

Dockerとは何ですか?

公式サイトでの紹介:

高速イノベーションのためのエンタープライズコンテナプラットフォーム。あらゆるアプリケーションをどこからでも安全に構築、共有、実行できます。

Baidu 百科事典には次のように書かれています。

Docker はオープンソースのアプリケーション コンテナ エンジンであり、開発者はアプリケーションと依存パッケージをポータブル コンテナにパッケージ化し、一般的な Linux マシンに公開できます。また、仮想化も実現できます。コンテナは完全なサンドボックス メカニズムを使用し、それらの間にインターフェイスはありません。

最初の DOCKER ブックの紹介:

Docker は、開発されたアプリケーションをコンテナに自動的にデプロイできるオープンソース エンジンです。 Docker (www.docker.com、旧称 dotCloud、PaaS 市場の定評あるサプライヤー) のチームによって作成され、Apache 2.0 オープン ソース プロトコルに基づいてリリースされています。

Docker が特別な理由:

Docker は、起動速度が速い軽量の仮想化テクノロジーです (ほとんどの Docker コンテナは 1 秒未満で起動できます)。 単一のハードウェア上で数百または数千のコンテナを同時に実行できるため、迅速な拡張と柔軟なスケーリングが容易になります。 2016年、JD.comは618の高同時実行シナリオでシステムの安定性を確保するために15万のDockerクラスターを使用したと言われています。

Docker はクロスプラットフォームであり、Windows、Macos、Linux をサポートしています。「一度ビルドすればどこでも実行」できるため、開発環境と本番環境の不整合によって生じる一連の問題を解決し、開発者と運用保守担当者が調和して生活できるようになります。

Docker はオープンソースであり、GitHub でホストされています。

Dockerのアイデア

DockerのロゴからDockerのコアコンセプトを関連付ける

Docker のロゴはコンテナを運ぶ大きなクジラで、これは間違いなく Docker を最も鮮明に表現し説明しているものです。

運送業界とは対照的に、コンテナが登場する前は、商品を統一された標準的な方法で取り扱うことができませんでした。たとえば、壊れやすい商品には注意して取り扱う必要がありましたが、他の商品はそうではありませんでした。そのため、鉄道、道路、海上などさまざまな輸送手段間での貨物の移送には多くの人手が必要となり、非常に非効率でコストがかかります。コンテナの登場により、この問題は解決しました。この魔法の箱にはどんな商品でも入れることができます。そして、道路、鉄道、海など、あらゆる輸送シーンにおいて、輸送中は箱が密閉されます。さらに、中間の移送作業は大型機械で行うことができるため、効率が大幅に向上しました。

Docker は標準コンテナのアイデアを正式に借用し、コンテナのアイデアをソフトウェア分野に適用しました。 Docker は、コード用の標準化されたコンテナベースの転送システムを提供します。これにより、あらゆるアプリケーションとその依存環境 (コード、構成ファイル、JDK、Tomcat など) を、ほぼすべてのオペレーティング システムで実行できるコンテナにパッケージ化できます。

Docker コアコンセプト

ミラーリングは Docker の基礎であり、ユーザーはミラーリングに基づいて独自のコンテナを実行できます。

イメージの基盤は Docker のユニオン ファイル システムであり、階層化されており、各イメージがレイヤーになっています。各レイヤーの上には他のレイヤーが存在するため、他のイメージ (ベース イメージ) の上にイメージを作成できます。理解を助けるために、写真を使って説明します。画像はインターネットからのものです。著作権を侵害している場合は削除してください。

倉庫

ウェアハウスはユーザーイメージが保存される場所です。公式の Docker ウェアハウス アドレスは https://hub.docker.com です。 Docker Hub には、最もシンプルな hello-world や MySQL など、多くのイメージがあります。もちろん、専用の倉庫を持つこともできます。

容器

コンテナはアプリケーションに分離されたランタイムを提供します。各コンテナには完全かつ排他的なユーザー環境が含まれており、1 つのコンテナの動作環境を変更しても他のコンテナの動作環境には影響しないため、アプリケーションをほぼどこでも同じように実行できます。

コンテナはイメージに基づいて起動され、コンテナ内で 1 つ以上のプロセスを実行できます。コンテナ プロセスを作成するときに、プロセスに必要な名前空間パラメータが指定され、コンテナは現在の名前空間によって制限されたリソース、ファイル、デバイス、ステータス、または構成のみを「表示」できるようになります。したがって、コンテナは単なる特別なプロセスであり、コンテナの本質はプロセスです。

Dockerのインストール

CentOS 7 を例にして Docker をインストールします。

システムカーネルのバージョンを確認する

Docker は CentOS 7 上で実行されます。CentOS 7 では、64 ビット オペレーティング システムとカーネル バージョン 3.10 以上が必要です。

このマシンに要件を満たす Linux カーネルがインストールされていることを確認します。カーネルのバージョン情報を確認するには、 uname -rコマンドを使用します。

[root@localhost ~]# uname -r
3.10.0-957.el7.x86_64

CentOS 7にDockerをインストールする

Docker をインストールするには、 yum install -y dockerコマンドを使用します。「-y」は、確認せずにインストールのデフォルト構成を使用することを意味します。

Dockerサービスを起動し、起動時に自動的に起動するように設定します。

次のコマンドを使用します。

systemctl で docker.service を起動します。
systemctl で docker.service を有効にする

docker versionを入力すると、返されるバージョン情報から Docker が正常にインストールされたことが示されます。

[root@localhost ~]# docker バージョン
クライアント:
 バージョン: 1.13.1
 APIバージョン: 1.26
 パッケージバージョン: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
 Goバージョン: go1.10.3
 Gitコミット: b2f74b2/1.13.1
 作成日: 2019年5月1日水曜日 14:55:20
 OS/アーキテクチャ: linux/amd64

サーバ:
 バージョン: 1.13.1
 API バージョン: 1.26 (最小バージョン 1.12)
 パッケージバージョン: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
 Goバージョン: go1.10.3
 Gitコミット: b2f74b2/1.13.1
 作成日: 2019年5月1日水曜日 14:55:20
 OS/アーキテクチャ: linux/amd64
 実験的: 偽

Docker の実践 - Hello World

古典的な「Hello World」から何を学ぶことができるでしょうか?

画像をプルする

実際、このイメージは「hello-world」という名前ですでに DockerHub に存在しています。 DockerHubから直接イメージをプルします。コマンドはGitに似ています: docker pull hello-world

[root@localhost docker]# docker pull hello-world
デフォルトタグの使用: 最新
リポジトリ docker.io/library/hello-world をプルしようとしています... 
最新: docker.io/library/hello-world からプル
1b930d010525: プル完了 
ダイジェスト: sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8
ステータス: docker.io/hello-world:latest の新しいイメージをダウンロードしました

ミラーを見る

プルした Docker イメージを表示する: docker images

[root@localhost ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
docker.io/hello-world 最新 fce289e99eb9 5 か月前 1.84 kB

画像を実行する

イメージを実行します: docker run hello-world 。次の内容が印刷された場合、操作は成功したことを意味します。

[root@localhost docker]# docker run hello-world

Dockerからこんにちは!
このメッセージは、インストールが正常に動作していることを示しています。

このメッセージを生成するために、Docker は次の手順を実行します。
 1. Docker クライアントが Docker デーモンに接続しました。
 2. Docker デーモンは Docker Hub から「hello-world」イメージを取得しました。
  (amd64)
 3. Dockerデーモンは、そのイメージから新しいコンテナを作成し、
  現在読んでいる出力を生成する実行可能ファイル。
 4. Dockerデーモンはその出力をDockerクライアントにストリーミングし、Dockerクライアントはそれを
  端末に。

もっと野心的なことに挑戦するには、次のコマンドで Ubuntu コンテナを実行できます。
 $ docker run -it ubuntu bash

無料の Docker ID を使用して、イメージを共有したり、ワークフローを自動化したりすることができます。
 参考:

その他の例やアイデアについては、以下をご覧ください。
 詳しくはこちら

Docker 共通コマンド

docker images : ローカルイメージを一覧表示する

docker pull image_name: イメージをプルします。特定のイメージ タグが指定されていない場合は、最新のタグが付いたイメージが自動的にプルされます。

docker search image_name: Docker Hub でイメージを検索

docker start container: コンテナを起動して実行する

docker run [OPTIONS] image_name: イメージに基づいてコンテナを作成して起動します

一般的なオプション:
-d: コンテナをバックグラウンドで実行し、コンテナ ID を返します。
-i: コンテナを対話モードで実行します。通常は -t と一緒に使用されます。
-t: コンテナの疑似入力端子を再割り当てします。通常は -i と一緒に使用されます。
-P: ランダムポートマッピング。コンテナの内部ポートがホストの上位ポートにランダムにマッピングされます。
-p: ホストポート: コンテナポートの形式でポートマッピングを指定します

docker logs container: コンテナのログ情報を取得する

docker アタッチコンテナ: コンテナに入る

exit: コンテナを終了する

docker exec コンテナコマンド: 実行中のコンテナでコマンドを実行する

docker stop container: コンテナを停止します

docker rm container: コンテナを削除する

docker save -o image_name.tar image_name: イメージをエクスポートする

docker ps: 実行中のコンテナを表示する

docker ps -a: システム内のコンテナのリストを表示します

docker top container: コンテナ内のプロセスを表示する

docker stop daemon_dave: デーモンコンテナを停止します

Dockerビルドイメージ

イメージを構築するにはどうすればいいですか?

独自のイメージを構築するには、次の 2 つの手順が必要です。

Dockerfile を記述します。 Dockerfile は、イメージの作成方法と各ステップの内容について Docker に指示します。

  • Docker が Dockerfile 内の命令を実行するプロセスは次のとおりです。
    • Dockerはベースイメージからコンテナを実行します
    • コンテナを変更する命令を実行する
    • 新しい画像レイヤーにコミットする
    • Dockerは送信されたイメージに基づいて新しいコンテナを実行します。
    • すべての命令が実行されるまで、Dockerfile 内の次の命令を実行します。
  • docker build コマンドを使用してビルドします。

Dockerfileの作成

すべての Dockerfile の最初のコマンドは FROM である必要があります。 FROM 命令は既存のイメージを指定し、後続の命令がこのイメージに基づいていることを Docker に伝えます。例: FROM java:8

MAINTAINER ディレクティブは、イメージの所有者と連絡先情報を識別するために使用されます。例: MAINTAINER James "×××@example.com"

VOLUME 命令は、イメージから作成されたコンテナにボリュームを追加するために使用されます。ボリュームは、1 つ以上のコンテナー内に存在する特定のディレクトリです。このディレクトリは、ユニオン ファイル システムをバイパスし、共有データとデータ永続性機能を提供できます。

CMD 命令は、コンテナの起動時に実行されるコマンドを指定するために使用されます。

ENTRYPOINT 命令は CMD 命令と非常によく似ています。

WORKDIR 命令は、イメージから新しいコンテナを作成するときに、コンテナ内で作業コマンドを設定するために使用されます。ENTRYPOINT または CMD 命令で指定されたプログラムは、このディレクトリで実行されます。

ENV 命令は、イメージ構築プロセス中に環境変数を設定するために使用されます。例: ENV TEST_PATH /home/test

RUN 命令は、現在のイメージで指定されたコマンドを実行するために使用されます。例えば: RUN apt-get install -y nginx

EXPOSE 命令は、コンテナ内のアプリケーションがコンテナの指定されたポートを使用することを Docker に伝えるために使用されます。例: EXPOSE 80

ADD 命令は、ビルド環境からイメージにファイルとディレクトリをコピーするために使用されます。 例: ADD docker-0.0.1-SNAPSHOT.jar app.jar

COPY 命令は ADD と似ていますが、COPY はビルド コンテキスト内でローカル ファイルをコピーすることのみを対象とし、ファイルを抽出または解凍することは行いません。

LABEL 命令は、Docker イメージにメタデータを追加するために使用されます。例: LABEL name=test description="a container is used to test"

Dockerfile の例:

java:8より
メンテナー James "×××@example.com"
ボリューム /tmp
docker-0.0.1-SNAPSHOT.jar app.jarを追加します。
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

docker buildを実行する

docker buildコマンドを実行すると、ビルドが成功したことを示す「BUILD SUCCESS」が表示されます。これで、 docker runコマンドを使用してプロジェクトを実行できます。

要約する

この記事では、Docker とは何か、Docker の考え方、Docker のコア概念、Docker のインストールなどについて紹介します。この記事を読んだ後、Docker を使い始めることができますが、これは長い旅の最初の一歩を踏み出したに過ぎません。学習に終わりはありませんので、お互いに励まし合いましょう。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Dockerのインストールと簡単な使用方法のチュートリアル
  • Docker コンテナで IPython を使用するための入門ガイド
  • Docker コマンドラインの完全ガイド (知っておくべき 18 のこと)
  • Docker コンテナ入門から夢中になるまで(推奨)
  • 2時間のDocker入門チュートリアル
  • Dockerコンテナの紹介
  • Dockerの簡単なインストールと応用入門チュートリアル
  • Dockerの基礎

<<:  Linux での MySQL 5.6.24 (バ​​イナリ) 自動インストール スクリプト

>>:  JSホモロジー戦略とCSRFの詳細な説明

推薦する

InnoDB がトランザクション分離レベルを巧みに実装する方法

序文前回の記事「MySQL ロック メカニズムの詳細説明」では、InnoDB のロック メカニズムに...

PostgreSQL正規表現の一般的な機能の概要

PostgreSQL正規表現の一般的な機能の概要正規表現は、複雑なデータ処理を必要とするプログラムに...

MySQL 8.0 における非同期レプリケーションの 3 つの方法について簡単に説明します。

この実験では、空のデータベース、オフライン、オンラインの 3 つのモードで、1 つのマスターと 2 ...

CSS scroll-snap スクロールイベント停止と要素位置検出の実装

1. スクロールスナップはフロントエンド開発者にとって必須のスキルですCSS スクロール スナップは...

テーブルのネストと境界の結合の問題に対する解決策

【質問】外側のテーブルと内側のテーブルがネストされていて、内側のテーブルと外側のテーブルの両方に境界...

フロントエンドフレームワーク Vue における親子コンポーネントデータの双方向バインディングの実装

目次1. 親コンポーネントと子コンポーネント間の一方向の値転送1. 親から子への値の受け渡し2. 子...

Vue3.0のさまざまなリスニング方法の包括的な概要

目次リスナー1.ウォッチエフェクト2.見る1.1 聴くための最初の方法1.2 聞く2つ目の方法1.3...

シンプルなログインページを実装するための HTML+jQuery

目次導入公開コード(バックエンドインターフェース)例 1: 最もシンプル (純粋な HTML)コード...

Nginx サービス クイック スタート チュートリアル

目次1. Nginx の紹介1. Nginx とは何ですか? 2. Nginx を使用する理由3. ...

ホバー画像のポップアウトポップアップ効果を実現するための純粋な CSS のサンプルコード

実施原則メイングラフィックは、背景と前景の 2 つの要素で構成されています。次のサンプルコードでは、...

トップナビゲーションバー機能を実現するCSS+HTML

ナビゲーション バー、固定トップ ナビゲーション バー、およびセカンダリ メニューの実装効果図の実装...

ElementUI el-select の過剰なデータに対する解決策についての簡単な説明

目次1. シナリオの説明2. 解決策オプションが多すぎる el-select コンポーネントの解決策...

PSSHを使用してLinuxサーバーを一括管理する

pssh は、多数のマシンでのバッチ ssh 操作に使用される、Python で実装されたオープン ...

Windows での MySQL の使用: 自動スケジュールバックアップの実装

1. バックアップスクリプトを書く 著者:www.yumi-info.com 日付:20171222...

vue3 を使用してカウント関数コンポーネントのカプセル化例を実装する

目次序文1. カプセル化の重要性2. どのようにカプセル化しますか? 1. アイデア2. 準備2. ...