ホームページ  >  記事  >  Docker は制限されており、「エンティティ リスト」に含まれているため、Docker がなぜそれほど重要なのかについて話しましょう。

Docker は制限されており、「エンティティ リスト」に含まれているため、Docker がなぜそれほど重要なのかについて話しましょう。

青灯夜游
青灯夜游転載
2020-08-19 14:07:135338ブラウズ

ニュース:

8 月 13 日、Docker は Web サイト サービス契約を更新し、禁輸国の組織や個人、および米国の「エンティティ リスト」などの複数のリストに含まれる組織や個人によるサービスの使用を禁止しました。 . プロトコルの Docker Web サイトおよびすべての関連 Web サイト。

これには、Huawei、Hikvision、Dahua Technology、iFlytek、Megvii Technology、SenseTime、その他多くのテクノロジー企業、およびハルビン工業大学やハルビン工程大学などの大学が含まれます。

Docker は制限されており、「エンティティ リスト」に含まれているため、Docker がなぜそれほど重要なのかについて話しましょう。

この記事では、Docker の神秘的な世界を探索し、Docker の基本原理と実際の操作をゼロからマスターし、Docker がなぜそれほど重要なのかを理解します。 。 [関連する推奨事項: Docker ビデオ チュートリアル ]

リッチ Web 時代において、アプリケーションはますます強力になっており、同時に、ますます複雑になっています。クラスターの展開、分離環境、グレースケールのリリース、動的拡張はすべて不可欠であり、コンテナ化はその中間に必要な橋渡しとなっています。

ストーリーを語ろう

Docker とは何かをよりよく理解するために、まずストーリーを語ろう:

I I家を建てる必要があったので、石を動かし、木を切り、図面を描き、家を建てました。たくさんの苦労を経て、ようやく家が建てられました。

Docker は制限されており、「エンティティ リスト」に含まれているため、Docker がなぜそれほど重要なのかについて話しましょう。

# その結果、しばらくそこに住んでいた後、突然海に移住したくなりました。現時点では、以前の方法では、海岸に行き、石を動かし、木を切り、図面を描き、再び家を建てることしかできません。

Docker は制限されており、「エンティティ リスト」に含まれているため、Docker がなぜそれほど重要なのかについて話しましょう。

#悩んでいるとマジシャンが来て魔法を教えてくれました。この魔法は自分が建てた家をコピーして「鏡像」にしてバックパックに入れることができる。

Docker は制限されており、「エンティティ リスト」に含まれているため、Docker がなぜそれほど重要なのかについて話しましょう。

海に着いたら、この「鏡」を使って家を写し取って引っ越します。

すごいと思いませんか?私たちのプロジェクトに対応すると、家はプロジェクトそのもの、鏡はプロジェクトのコピー、バックパックは鏡の倉庫です。

容量を動的に拡張したい場合は、プロジェクト イメージをウェアハウスから取り出して、必要に応じてコピーするだけです。 Build?once,Run?anywhere!

バージョン、互換性、展開などの問題を心配する必要がなく、「オンラインにするとクラッシュして延々とビルドする」という恥ずかしさは完全に解決されます。

#仮想マシンとコンテナ

始める前に、いくつかの基本的な知識を準備しておきましょう:

#①仮想マシン: 仮想化ハードウェア

仮想マシン 仮想マシンとは、ソフトウェアによってシミュレートされ、完全に分離された環境で実行される完全なハードウェア システム機能を備えた完全なコンピューター システムを指します。物理コンピューターで実行できることはすべて、仮想マシンでも実行できます。

コンピュータ上に仮想マシンを作成する場合、物理マシンのハードディスクおよびメモリ容量の一部を仮想マシンのハードディスクおよびメモリ容量として使用する必要があります。

各仮想マシンは独立した CMOS、ハードディスク、オペレーティング システムを備えており、物理マシンと同じように仮想マシンを操作できます。コンテナーテクノロジーが登場する前、業界で最大の影響力を持っていたのは仮想マシンでした。

仮想マシン技術の代表格はVMWareとOpenStackです。

②コンテナ: オペレーティング システム層を仮想化し、標準的なソフトウェア ユニットです。

その特徴は次のとおりです。

    どこでも実行: コンテナーは、構成ファイルおよび関連する依存ライブラリを含むコードをパッケージ化して、どのような環境でも一貫した操作を保証できます。
  • 高いリソース使用率: コンテナーはプロセス レベルの分離を提供するため、CPU とメモリの使用量をより細かく設定できるため、サーバーのコンピューティング リソースをより有効に活用できます。
  • 迅速な拡張: 各コンテナーは個別のプロセスとして実行でき、基盤となるオペレーティング システムのシステム リソースを共有できるため、コンテナーの起動と停止の効率が向上します。

③ 違いとつながり:

    仮想マシンは多くの「子」を分離できますが、 「コンピューター」ですが、より多くのスペースを占有し、起動が遅くなります。 VMWare などの仮想マシン ソフトウェアにも費用がかかる場合があります。
  • コンテナ テクノロジでは、オペレーティング システム全体を仮想化する必要はなく、「サンドボックス」に似た小規模な環境を仮想化するだけで十分です。
  • 実行スペース、仮想マシンは通常、数 GB から数十 GB のスペースを必要としますが、コンテナーには MB、さらには KB レベルしか必要ありません。
比較データを見てみましょう:

Docker は制限されており、「エンティティ リスト」に含まれているため、Docker がなぜそれほど重要なのかについて話しましょう。仮想マシンは仮想化テクノロジであり、Docker は仮想化テクノロジです。コンテナ技術は軽量仮想化です。

コンテナは、基盤となる Linux オペレーティング システムを利用して分離された環境で実行されるため、仮想マシンと比較して軽量かつ高速です。

仮想マシンのハイパーバイザーは、アプリケーションが境界を突破するのを防ぐために非常に強力な境界を作成しますが、コンテナーの境界はそれほど強力ではありません。

Docker について知る

Docker は制限されており、「エンティティ リスト」に含まれているため、Docker がなぜそれほど重要なのかについて話しましょう。

## Docker は、開発者がアプリケーションをパッケージ化できるオープンソースのアプリケーション コンテナ エンジンです。アプリケーションと依存関係のパッケージはポータブル コンテナーに入れられ、仮想化も可能な一般的な Linux マシンに公開されます。コンテナーは完全にサンドボックス メカニズムを使用し、相互にインターフェイスを持ちません。

Docker テクノロジーの 3 つの中心的な概念は次のとおりです。

  • ミラー イメージ

  • コンテナ Container

  • Warehouse Repository

Docker が軽量である理由は何ですか? 「なぜ Docker はすぐに起動するのでしょうか?」という疑問も抱かれると思います。カーネルをホストと共有するにはどうすればよいですか?

Docker にコンテナーの実行をリクエストすると、Docker はコンピューター上にリソース分離環境をセットアップします。

次に、パッケージ化されたアプリケーションと関連ファイルをネームスペース内のファイル システムにコピーすることで、環境の構築が完了します。 Docker は、アプリケーションを実行するために事前に指定したコマンドを実行します。

イメージには動的データが含まれておらず、その内容は構築後に変更されません。

コアコンセプト

コアコンセプトは次のとおりです:

  • 構築、出荷、実行(構築、輸送、運用)。

  • 一度構築すれば、どこでも実行できます。

  • Docker 自体はコンテナではなく、コンテナとアプリケーション コンテナ エンジンを作成するためのツールです。

  • Docker の 3 つの中心的な概念は、イメージ、コンテナ、リポジトリです。

  • Docker テクノロジは、Linux カーネルと、Cgroup や名前空間などのカーネル機能を使用してプロセスを分離し、相互に独立して実行できるようにします。

  • Namespace および Cgroups 機能は Linux でのみ使用できるため、コンテナーは他のオペレーティング システムでは実行できません。では、Docker は macOS または Windows 上でどのように実行されるのでしょうか?実際、Docker はトリックを使用して、Linux 以外のオペレーティング システムに Linux 仮想マシンをインストールし、仮想マシン内でコンテナを実行します。

  • イメージは、アプリケーションの実行に必要なコード、ランタイム、ライブラリ、環境変数、構成ファイルを含む実行可能パッケージです。コンテナはイメージのランタイム インスタンスです。

Docker の原則の詳細については、「Docker の動作原則とコンテナ化の簡単なガイド」を参照してください。ここでは繰り返しません:

http://dockone.io/article/8788


Docker のインストール

①コマンドラインのインストール

Homebrew's Cask はすでに Docker for Mac をサポートしているため、Homebrew Cask を使用して簡単にインストールでき、次のコマンドを実行します:

brew cask install docker

その他のインストール方法については、公式ドキュメントを確認してください:

https://www.docker.com/get-started

②バージョンの表示

コマンドは次のとおりです。 :

docker -v

③イメージ アクセラレーションの構成

Docker Engine の設定書き込み構成:

{
  registry-mirrors: [
    http://hub-mirror.c.163.com/,
    https://registry.docker-cn.com
  ],
  insecure-registries:[],
  experimental: false,
  debug: true
}

④デスクトップ側のインストール

Docker は制限されており、「エンティティ リスト」に含まれているため、Docker がなぜそれほど重要なのかについて話しましょう。

デスクトップでの操作は非常に簡単で、まず公式サイトにアクセスして[1]をダウンロードします。 Docker デスクトップを通じて、次の操作を簡単に実行できます。

  • clone: プロジェクトのクローンを作成します。

  • ビルド: パッケージ イメージ。

  • run: インスタンスを実行します。

  • #共有: 画像を共有します。
  • さて、準備は完了です。さあ、スキルを披露しましょう!

Quick StartDocker をインストールしたら、まずは実際のプロジェクトのイメージを作成し、使いながら学習していきます。

#①まず、使用する 11 個のコマンドについて一般的に理解する必要があります。

以下に示すように:

Docker は制限されており、「エンティティ リスト」に含まれているため、Docker がなぜそれほど重要なのかについて話しましょう。②新しいプロジェクト

スピードを上げるため、Vue スキャフォールディングを直接使用してプロジェクトを構築します。開始します:

vue create docker-demo

アクセス アドレス: http://localhost:8080/。プロジェクトの準備ができたので、プロジェクトをパッケージ化します。

yarn serve

現時点では、プロジェクト ディレクトリ内の Dist がデプロイする静的リソースであるため、次のステップに進みます。

注: フロントエンド プロジェクトは一般に 2 つのカテゴリに分類されます。1 つは Nginx を直接使用する静的デプロイメントで、もう 1 つは Node サービスの開始が必要です。このセクションでは、最初のタイプのみを考慮します。 Nodeサービスについては後ほど詳しく説明します。

③新建 Dockerfile

命令如下:

cd docker-demo && touch Dockerfile

此时的项目目录如下:

.
├── Dockerfile
├── README.md
├── babel.config.js
├── dist
├── node_modules
├── package.json
├── public
├── src
└── yarn.lock

可以看到我们已经在 docker-demo 目录下成功创建了 Dockerfile 文件。

④准备 Nginx 镜像

运行你的 Docker 桌面端,就会默认启动实例,我们在控制台拉取 Nginx 镜像:

docker pull nginx

控制台会出现如下信息:

Using default tag: latest
latest: Pulling from library/nginx
8559a31e96f4: Pull complete
8d69e59170f7: Pull complete
3f9f1ec1d262: Pull complete
d1f5ff4f210d: Pull complete
1e22bfa8652e: Pull complete
Digest: sha256:21f32f6c08406306d822a0e6e8b7dc81f53f336570e852e25fbe1e3e3d0d0133
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

如果你出现这样的异常,请确认 Docker 实例是否正常运行。

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

镜像准备 OK,我们在根目录创建 Nginx 配置文件:

touch default.conf

写入:

server {
    listen       80;
    server_name  localhost;
    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;
    error_log  /var/log/nginx/error.log  error;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

⑤配置镜像

打开 Dockerfile ,写入如下内容:

FROM nginx
COPY dist/ /usr/share/nginx/html/
COPY default.conf /etc/nginx/conf.d/default.conf

我们逐行解释一下代码:

  • FROM nginx 指定该镜像是基于 nginx:latest 镜像而构建的。

  • COPY dist/ /usr/share/nginx/html/ 命令的意思是将项目根目录下 dist 文件夹中的所有文件复制到镜像中 /usr/share/nginx/html/ 目录下。

  • COPY default.conf /etc/nginx/conf.d/default.conf 将 default.conf 复制到 etc/nginx/conf.d/default.conf,用本地的 default.conf 配置来替换 Nginx 镜像里的默认配置。

⑥构建镜像

Docker 通过 build 命令来构建镜像:

docker build -t jartto-docker-demo .

按照惯例,我们解释一下上述代码:

  • -t 参数给镜像命名 jartto-docker-demo。

  • . 是基于当前目录的 Dockerfile 来构建镜像。

执行成功后,将会输出:

Sending build context to Docker daemon  115.4MB
Step 1/3 : FROM nginx
 ---> 2622e6cca7eb
Step 2/3 : COPY dist/ /usr/share/nginx/html/
 ---> Using cache
 ---> 82b31f98dce6
Step 3/3 : COPY default.conf /etc/nginx/conf.d/default.conf
 ---> 7df6efaf9592
Successfully built 7df6efaf9592
Successfully tagged jartto-docker-demo:latest

镜像制作成功!我们来查看一下容器:

docker image ls | grep jartto-docker-demo

可以看到,我们打出了一个 133MB 的项目镜像:

jartto-docker-demo latest 7df6efaf9592 About a minute ago 133MB

镜像也有好坏之分,后续我们将介绍如何优化,这里可以先暂时忽略。

⑦运行容器

命令如下:

docker run -d -p 3000:80 --name docker-vue jartto-docker-demo

这里解释一下参数:

  • -d 设置容器在后台运行。

  • -p 表示端口映射,把本机的 3000 端口映射到 container 的 80 端口(这样外网就能通过本机的 3000 端口访问了。

  • --name 设置容器名 docker-vue。

  • jartto-docker-demo 是我们上面构建的镜像名字。

补充一点:在控制台,我们可以通过 docker ps 查看刚运行的 Container 的 ID:

docker ps -a

控制台会输出:

CONTAINER ID IMAGE              COMMAND                  CREATED       STATUS PORTS  NAMES
ab1375befb0b jartto-docker-demo /docker-entrypoint.…   8 minutes ago Up 7 minutes  0.0.0.0:3000->80/tcp  docker-vue

如果你使用桌面端,那么打开 Docker Dashboard 就可以看到容器列表了,如下图:

Docker は制限されており、「エンティティ リスト」に含まれているため、Docker がなぜそれほど重要なのかについて話しましょう。

⑧访问项目

因为我们映射了本机 3000 端口,所以执行:

curl -v -i localhost:3000

或者打开浏览器,访问:localhost:3000。

⑨发布镜像

如果你想为社区贡献力量,那么需要将镜像发布,方便其他开发者使用。

发布镜像需要如下步骤:

  • 登陆 dockerhub[2],注册账号。

  • 命令行执行 docker login,之后输入我们的账号密码,进行登录。

  • 推送镜像之前,需要打一个 Tag,执行 docker tag /:

全流程结束,以后我们要使用,再也不需要「搬石头、砍木头、画图纸、盖房子」了,拎包入住。这也是 Docker 独特魅力所在。

常规操作

到这里,恭喜你已经完成了 Docker 的入门项目!如果还想继续深入,不妨接着往下看看。

①参数使用

FROM:

  • 指定基础镜像,所有构建的镜像都必须有一个基础镜像,且 FROM 命令必须是 Dockerfile 的第一个命令

  • FROM [AS ] 指定从一个镜像构建起一个新的镜像名字

  • FROM [:] [AS ] 指定镜像的版本 Tag

  • 示例:FROM mysql:5.0 AS database

MAINTAINER:

  • 镜像维护人的信息

  • MAINTAINER

  • 示例:MAINTAINER Jartto Jartto@qq.com

RUN:

  • 构建镜像时要执行的命令

  • RUN

  • 示例:RUN [executable, param1, param2]

ADD:

  • #ローカル ファイルをコンテナに追加してコピーすると、圧縮パッケージが解凍され、ネットワーク上のファイルにアクセスできるようになり、自動的にダウンロードされます

  • ADD

  • 例: ADD *.js /app js ファイルをコンテナ内の app ディレクトリに追加します

COPY:

    #関数は ADD と同じですが、コピーするだけであり、ファイルの解凍やダウンロードは行いません
  • #CMD:

コンテナの起動後に実行されるコマンドは RUN とは異なります。RUN はイメージのビルド時に実行されるコマンドです。
  • #使用する場合 docker run でコンテナーを実行するとき、これはコマンド ラインからオーバーライドできます

  • ##例: CMD [executable, param1, param2]

  • ENTRYPOINT:

も実行コマンドであり、CMD と同じですが、このコマンドは実行されません。コマンドラインによって上書きされます

    #ENTRYPOINT [executable , param1, param2]
  • ##例: ENTRYPOINT [donnet, myapp.dll]
  • ##LABEL: Key-Value 形式で画像にメタデータを追加します
  • LABEL = ...

例: LABEL version=1.0 description=これは Web アプリケーションです

  • ENV : 環境変数を設定します。一部のコンテナでは実行時に特定の環境変数が必要になります
  • #ENV 一度に 1 つの環境変数を設定します

##ENV = = = 複数の環境変数を設定します

    例: ENV JAVA_HOME /usr/java1.8/
  • EXPOSE: 外部に公開されたポート (コンテナ内のプログラムのポート、ただし同じです)ホストとしては、実際には 2 つのポートです)

  • EXPOSE

例: EXPOSE 80

    コンテナが実行されているときは、-p を使用してコンテナにアクセスするための外部ポートをマップする必要があります。
  • VOLUME 内のポート:データ永続性のためのディレクトリ。公式言語は mount

  • VOLUME と呼ばれます。 /var /log は、コンテナにマウントする必要があるディレクトリを指定します。このディレクトリは、データの永続性と同期を実現するために、ホスト上のランダムなディレクトリを指定します。

VOLUME [/var/ log,/var/test....] 必要なコンテナ内の複数のディレクトリを指定します。これらのディレクトリは、データの永続性と同期を実現するために、ホスト上の複数のランダムなディレクトリにマップされます。

    VOLUME /var/data var/log は、コンテナ内の var/log ディレクトリを指定します。ホスト上の /var/data ディレクトリにマウントされます。この形式では、ホスト上のディレクトリを手動で指定できます
  • WORKDIR: 作業ディレクトリを設定します。設定後を実行すると、RUN、CMD、COPY、ADD の作業ディレクトリが同時に変更されます。

  • WORKDIR

例: WORKDIR /app/test

  • USER: コマンドを実行するときに使用するユーザーを指定します。セキュリティと権限のため、実行するコマンドに応じて異なるユーザーを選択してください。実行されました

  • USER :[]

例: USER テスト

    ARG: イメージを構築するために渡されるパラメータを設定します
  • ARG [=]

  • #ARG name=sss

その他の操作については、公式ドキュメント [3] を参照してください。
  • ##https://docs.docker.com/

  • ベスト プラクティス

通常の操作をマスターした後Dockerのプロジェクトイメージを簡単に作成できます。

ただし、操作が異なると生成される画像も大きく異なります。ミラーリングの違いの正確な原因は何でしょうか? 調査を続けたほうがよいでしょう。


次は、Docker を適用するプロセスでまとめられたベスト プラクティスです。次のガイドラインに従うようにしてください:

Require Clear: どのイメージが必要か。

ステップの合理化: 変更が少ないステップが優先されます。

明確なバージョン: 画像には明確な名前が付けられています。

  • ドキュメント: イメージのパッケージ化手順全体を再現できます。

  • 概要
  • コンテナ化テクノロジーは間違いなくクラウド時代に不可欠なスキルの 1 つであり、Docker はまさに海に落とす。これに加えて、クラスター コンテナー管理 Kubernetes、Service Mesh、Istio などのテクノロジーも登場します。
  • Docker の扉を開け、繭を剥がし続け、一層奥へ進んでいくと、コンテナ化の無限の魅力を感じることができます。

    #関連リンク:

      #https://www.docker.com/products/docker-desktop
    • https://hub.docker.com/
    • https://docs.docker.com/
    # #元のアドレス: http://jartto.wang/2020/07/04/learn-docker

    著者: jartto

    さらに関連する知識を知りたい場合は、こちらをご覧ください。 :
    Docker の使い方チュートリアル

    ! !

声明:
この記事はweixinで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。