ニュース:
8 月 13 日、Docker は Web サイト サービス契約を更新し、禁輸国の組織や個人、および米国の「エンティティ リスト」などの複数のリストに含まれる組織や個人によるサービスの使用を禁止しました。 . プロトコルの Docker Web サイトおよびすべての関連 Web サイト。
これには、Huawei、Hikvision、Dahua Technology、iFlytek、Megvii Technology、SenseTime、その他多くのテクノロジー企業、およびハルビン工業大学やハルビン工程大学などの大学が含まれます。
この記事では、Docker の神秘的な世界を探索し、Docker の基本原理と実際の操作をゼロからマスターし、Docker がなぜそれほど重要なのかを理解します。 。 [関連する推奨事項: Docker ビデオ チュートリアル ]
リッチ Web 時代において、アプリケーションはますます強力になっており、同時に、ますます複雑になっています。クラスターの展開、分離環境、グレースケールのリリース、動的拡張はすべて不可欠であり、コンテナ化はその中間に必要な橋渡しとなっています。
ストーリーを語ろう
Docker とは何かをよりよく理解するために、まずストーリーを語ろう:
I I家を建てる必要があったので、石を動かし、木を切り、図面を描き、家を建てました。たくさんの苦労を経て、ようやく家が建てられました。
# その結果、しばらくそこに住んでいた後、突然海に移住したくなりました。現時点では、以前の方法では、海岸に行き、石を動かし、木を切り、図面を描き、再び家を建てることしかできません。
#悩んでいるとマジシャンが来て魔法を教えてくれました。この魔法は自分が建てた家をコピーして「鏡像」にしてバックパックに入れることができる。
海に着いたら、この「鏡」を使って家を写し取って引っ越します。
すごいと思いませんか?私たちのプロジェクトに対応すると、家はプロジェクトそのもの、鏡はプロジェクトのコピー、バックパックは鏡の倉庫です。
容量を動的に拡張したい場合は、プロジェクト イメージをウェアハウスから取り出して、必要に応じてコピーするだけです。 Build?once,Run?anywhere!
バージョン、互換性、展開などの問題を心配する必要がなく、「オンラインにするとクラッシュして延々とビルドする」という恥ずかしさは完全に解決されます。
#仮想マシンとコンテナ
始める前に、いくつかの基本的な知識を準備しておきましょう:
#①仮想マシン: 仮想化ハードウェア仮想マシン 仮想マシンとは、ソフトウェアによってシミュレートされ、完全に分離された環境で実行される完全なハードウェア システム機能を備えた完全なコンピューター システムを指します。物理コンピューターで実行できることはすべて、仮想マシンでも実行できます。
コンピュータ上に仮想マシンを作成する場合、物理マシンのハードディスクおよびメモリ容量の一部を仮想マシンのハードディスクおよびメモリ容量として使用する必要があります。
各仮想マシンは独立した CMOS、ハードディスク、オペレーティング システムを備えており、物理マシンと同じように仮想マシンを操作できます。コンテナーテクノロジーが登場する前、業界で最大の影響力を持っていたのは仮想マシンでした。
仮想マシン技術の代表格はVMWareとOpenStackです。
②コンテナ: オペレーティング システム層を仮想化し、標準的なソフトウェア ユニットです。その特徴は次のとおりです。
③ 違いとつながり:
仮想マシンは仮想化テクノロジであり、Docker は仮想化テクノロジです。コンテナ技術は軽量仮想化です。
コンテナは、基盤となる Linux オペレーティング システムを利用して分離された環境で実行されるため、仮想マシンと比較して軽量かつ高速です。
仮想マシンのハイパーバイザーは、アプリケーションが境界を突破するのを防ぐために非常に強力な境界を作成しますが、コンテナーの境界はそれほど強力ではありません。
Docker について知る
## Docker は、開発者がアプリケーションをパッケージ化できるオープンソースのアプリケーション コンテナ エンジンです。アプリケーションと依存関係のパッケージはポータブル コンテナーに入れられ、仮想化も可能な一般的な Linux マシンに公開されます。コンテナーは完全にサンドボックス メカニズムを使用し、相互にインターフェイスを持ちません。Docker テクノロジーの 3 つの中心的な概念は次のとおりです。
コアコンセプト
コアコンセプトは次のとおりです: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 }
④デスクトップ側のインストール
Quick StartDocker をインストールしたら、まずは実際のプロジェクトのイメージを作成し、使いながら学習していきます。
#①まず、使用する 11 個のコマンドについて一般的に理解する必要があります。
以下に示すように:
②新しいプロジェクト
スピードを上げるため、Vue スキャフォールディングを直接使用してプロジェクトを構築します。開始します:
vue create docker-demo
yarn serve
③新建 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 就可以看到容器列表了,如下图:
⑧访问项目
因为我们映射了本机 3000 端口,所以执行:
curl -v -i localhost:3000
或者打开浏览器,访问:localhost:3000。
⑨发布镜像
如果你想为社区贡献力量,那么需要将镜像发布,方便其他开发者使用。
发布镜像需要如下步骤:
登陆 dockerhub[2],注册账号。
命令行执行 docker login,之后输入我们的账号密码,进行登录。
推送镜像之前,需要打一个 Tag,执行 docker tag
全流程结束,以后我们要使用,再也不需要「搬石头、砍木头、画图纸、盖房子」了,拎包入住。这也是 Docker 独特魅力所在。
常规操作
到这里,恭喜你已经完成了 Docker 的入门项目!如果还想继续深入,不妨接着往下看看。
①参数使用
FROM:
指定基础镜像,所有构建的镜像都必须有一个基础镜像,且 FROM 命令必须是 Dockerfile 的第一个命令
FROM
FROM
示例:FROM mysql:5.0 AS database
MAINTAINER:
镜像维护人的信息
MAINTAINER
示例:MAINTAINER Jartto Jartto@qq.com
RUN:
构建镜像时要执行的命令
RUN
示例:RUN [executable, param1, param2]
ADD:
COPY:
コンテナの起動後に実行されるコマンドは RUN とは異なります。RUN はイメージのビルド時に実行されるコマンドです。
#使用する場合 docker run でコンテナーを実行するとき、これはコマンド ラインからオーバーライドできます
ENTRYPOINT:
も実行コマンドであり、CMD と同じですが、このコマンドは実行されません。コマンドラインによって上書きされます
例: LABEL version=1.0 description=これは Web アプリケーションです
##ENV
EXPOSE
例: EXPOSE 80
VOLUME と呼ばれます。 /var /log は、コンテナにマウントする必要があるディレクトリを指定します。このディレクトリは、データの永続性と同期を実現するために、ホスト上のランダムなディレクトリを指定します。
VOLUME [/var/ log,/var/test....] 必要なコンテナ内の複数のディレクトリを指定します。これらのディレクトリは、データの永続性と同期を実現するために、ホスト上の複数のランダムなディレクトリにマップされます。
WORKDIR
例: WORKDIR /app/test
その他の操作については、公式ドキュメント [3] を参照してください。
##https://docs.docker.com/
通常の操作をマスターした後Dockerのプロジェクトイメージを簡単に作成できます。
ただし、操作が異なると生成される画像も大きく異なります。ミラーリングの違いの正確な原因は何でしょうか? 調査を続けたほうがよいでしょう。
次は、Docker を適用するプロセスでまとめられたベスト プラクティスです。次のガイドラインに従うようにしてください:
Require Clear: どのイメージが必要か。
ステップの合理化: 変更が少ないステップが優先されます。 明確なバージョン: 画像には明確な名前が付けられています。Docker の扉を開け、繭を剥がし続け、一層奥へ進んでいくと、コンテナ化の無限の魅力を感じることができます。
#関連リンク:
Docker の使い方チュートリアル著者: jartto
さらに関連する知識を知りたい場合は、こちらをご覧ください。 :