まず、従来の仮想化テクノロジのアーキテクチャを確認してみましょう:
ホスト オペレーティング システムに複数の仮想マシンをインストールでき、それぞれの仮想マシンにインストールできることがわかります。仮想化テクノロジーによって仮想オペレーティング システムが実装され、必要なアプリケーションを仮想オペレーティング システムにインストールできます。これらはすべて非常に簡単なことのように見えますが、技術的な詳細は非常に謎に満ちており、たとえ偉人であっても明確に説明できない場合があります。
仮想マシンを使用したことがある人なら、仮想マシンの起動はコンピュータの起動に似ていることを知っているはずです。初期化プロセスは非常に遅く、ログイン インターフェイスが表示されるまでに長時間待つ必要があります。仮想マシンが起動すると、ホストとのネットワーク接続を確立して、仮想マシンとホストが確実に相互接続されるようにすることができます。異なる仮想マシンは互いに分離されており、各仮想マシンは他の仮想マシンの存在を認識しませんが、各仮想マシンはホスト マシンのハードウェア リソースとネットワーク リソースを占有します。
Docker テクノロジーのアーキテクチャを比較してみましょう:
ホスト オペレーティング システム上で、Docker サービス (または「docker エンジン」と呼ばれる) が実行されていることがわかります。 ), このサービスでは、複数の Docker コンテナを開くことができ、各 Docker コンテナは独自の必要なアプリケーションを実行できます。Docker コンテナは相互にも分離されています。同様に、それらはすべて同じホストを占有します。ホスト ハードウェアとネットワーク リソースです。
仮想マシンと比較すると、Docker コンテナは技術的な実装の点でまったく異なります。仮想マシンに比べて起動速度が大幅に向上しています。コンテナの起動には瞬きするだけです。仮想マシンであっても Docker コンテナであっても、アプリケーションの実行環境を分離し、ハードウェア リソースを節約し、開発者にメリットを提供するように設計されています。
前提条件
まず、centos オペレーティング システム、または仮想マシンを準備する必要があります。つまり、Linux クライアント ツールを通じて centos オペレーティング システムにアクセスできます。
ubuntu または他の Linux オペレーティング システムでも docker を実行できることに注意してください。ただし、この記事では例として centos を使用することを選択します。それだけです。
centos 固有の要件は次のとおりです。
64 ビット オペレーティング システムである必要があります
カーネルは 3.8 以降である必要があります
次のコマンドを使用して centos カーネルを確認します。
uname -r
上記のコマンドを実行した後、出力されたカーネルのバージョン番号が 3.8 より小さい場合3.8 の場合は、次の方法を参照して Linux カーネルをアップグレードしてください。
centos 6.5 の場合、デフォルトのカーネル バージョンは 2.6 です。まず、次のコマンドを使用して最新のカーネルをインストールできます:
rpm --import https://www.elrepo.org/rpm-gpg-key-elrepo.org rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm yum -y --enablerepo=elrepo-kernel install kernel-lt
次に、次の構成ファイルを編集します:
vi /etc/grub.conf
デフォルト=1 をデフォルト=0 に変更します。
最後に、reboot コマンドを使用してオペレーティング システムを再起動します。
再起動しても問題がなければ、再度カーネルを確認すると、centos カーネルが 3.10 と表示されます。
ここまでたどり着けば、あなたが期待する結果は私たちの結果と一致します。おめでとう!一緒にdockerをインストールしましょう。
docker のインストール
次のコマンドを使用して docker ソフトウェアをインストールします:
rpm -uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm yum -y install docker-io
次のコマンドを使用して、docker が正常にインストールされているかどうかを確認できます。 :
docker version
docker のバージョン番号が出力されれば、インストールは成功しており、docker の使用を開始できます。
次のコマンドで Docker サービスを開始できます:
service docker start
その方法
ソフトウェアのインストールと同じように、最初にソフトウェアを書き込んだ CD を用意する必要があります。仮想光学ドライブを使用する場合は、ソフトウェアをインストールするために「イメージ」と呼ばれるファイルを実行する必要があります。 docker の世界には、必要なオペレーティング システムがインストールされている「ミラー」というものもあります。これを一般に「docker イメージ」と呼びますが、この記事ではこれを「ミラー」と呼びます。
そこで問題は、イメージをどこにダウンロードするかということです。
Docker 公式 Web サイトには確かにすべてのイメージのダウンロード アドレスが記載されていますが、残念ながら中国ではアクセスできません。幸いなことに、中国の心優しい人々が中国語の docker Web サイトを提供してくれて、必要な docker イメージをダウンロードできるようになりました。
イメージのダウンロード
centos を例として、次の手順で centos イメージをダウンロードするとよいでしょう。
まず、docker 中国語 Web サイトにアクセスし、ホームページ上で「centos」という名前のイメージを検索すると、検索結果の中に「公式イメージ」があるので、これが必要です。
次に、centos の公式イメージページに入り、「このリポジトリをプルする」入力ボックスにコマンドがあるので、それをコピーして自分のコマンドラインで実行すると、すぐにイメージがダウンロードされます。
最後に、次のコマンドを使用してすべてのローカル ミラーを表示します:
docker images
ダウンロードが完了すると、次の内容が表示されます:
repository tag image id created virtual size
docker.cn/docker/centos centos6 25c5298b1a36 7 weeks ago 215.8 mb
如果看到以上输出,说明您可以使用“docker.cn/docker/centos”这个镜像了,或将其称为仓库(repository),该镜像有一个名为“centos6”的标签(tag),此外还有一个名为“25c5298b1a36 ”的镜像 id(可能您所看到的镜像 id 与此处的不一致,那是正常现象,因为这个数字是随机生成的)。此外,我们可以看到该镜像只有 215.8 mb,非常小巧,而不像虚拟机的镜像文件那样庞大。
现在镜像已经有了,我们下面就需要使用该镜像,来启动容器。
启动容器
容器是在镜像的基础上来运行的,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序。既然镜像已经下载到本地,那么如何才能启动容器呢?
只需使用以下命令即可启动容器:
docker run -i -t -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash
这条命令比较长,我们稍微分解一下,其实包含以下三个部分:
docker run <相关参数> <镜像 id> <初始命令>
其中,相关参数包括:
-i:表示以“交互模式”运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
假设我们的所有安装程序都放在了宿主机的/root/software/目录下,现在需要将其挂载到容器的/mnt/software/目录下。
需要说明的是,不一定要使用“镜像 id”,也可以使用“仓库名:标签名”,例如:docker.cn/docker/centos:centos6。
初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。
安装相关软件
为了搭建 java web 运行环境,我们需要安装 jdk 与 tomcat,下面的过程均在容器内部进行。我们不妨选择/opt/目录作为安装目录,首先需要通过cd /opt/命令进入该目录。
安装 jdk()
首先,解压 jdk 程序包:
tar -zxf /mnt/software/jdk-7u67-linux-x64.tar.gz -c .
然后,重命名 jdk 目录:
mv jdk1.7.0_67/ jdk/
安装 tomcat
首先,解压 tomcat 程序包:
tar -zxf /mnt/software/apache-tomcat-7.0.55.tar.gz -c .
然后,重命名 tomcat 目录:
mv apache-tomcat-7.0.55/ tomcat/
设置环境变量
首先,编辑.bashrc文件
vi ~/.bashrc
然后,在该文件末尾添加如下配置:
export java_home=/opt/jdk export path=$path:$java_home
最后,需要使用source命令,让环境变量生效:
source ~/.bashrc
编写运行脚本
我们需要编写一个运行脚本,当启动容器时,运行该脚本,启动 tomcat,具体过程如下:
首先,创建运行脚本:
vi /root/run.sh
然后,编辑脚本内容如下:
#!/bin/bash source ~/.bashrc sh /opt/tomcat/bin/catalina.sh run
注意:这里必须先加载环境变量,然后使用 tomcat 的运行脚本来启动 tomcat 服务。
最后,为运行脚本添加执行权限:
chmod u+x /root/run.sh
退出容器
当以上步骤全部完成后,可使用exit命令,退出容器。
随后,可使用如下命令查看正在运行的容器:
docker ps
此时,您应该看不到任何正在运行的程序,因为刚才已经使用exit命令退出的容器,此时容器处于停止状态,可使用如下命令查看所有容器:
docker ps -a
输出如下内容:
container id image command created status ports names
57c312bbaad1 docker.cn/docker/centos:centos6 "/bin/bash" 27 minutes ago exited (0) 19 seconds ago naughty_goldstine
记住以上container id(容器 id),随后我们将通过该容器,创建一个可运行 java web 的镜像。
创建 java web 镜像
使用以下命令,根据某个“容器 id”来创建一个新的“镜像”:
docker commit 57c312bbaad1 huangyong/javaweb:0.1
该容器的 id 是“57c312bbaad1”,所创建的镜像名是“huangyong/javaweb:0.1”,随后可使用镜像来启动 java web 容器。
启动 java web 容器
有必要首先使用docker images命令,查看当前所有的镜像:
repository tag image id created virtual size
huangyong/javaweb 0.1 fc826a4706af 38 seconds ago 562.8 mb
docker.cn/docker/centos centos6 25c5298b1a36 7 weeks ago 215.8 mb
可见,此时已经看到了最新创建的镜像“huangyong/javaweb:0.1”,其镜像 id 是“fc826a4706af”。正如上面所描述的那样,我们可以通过“镜像名”或“镜像 id”来启动容器,与上次启动容器不同的是,我们现在不再进入容器的命令行,而是直接启动容器内部的 tomcat 服务。此时,需要使用以下命令:
docker run -d -p 58080:8080 --name javaweb huangyong/javaweb:0.1 /root/run.sh
稍作解释:
-d:表示以“守护模式”执行/root/run.sh脚本,此时 tomcat 控制台不会出现在输出终端上。
-p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口,这样就向外界暴露了 58080 端口,可通过 docker 网桥来访问容器内部的 8080 端口了。
--name:表示容器名称,用一个有意义的名称命名即可。
关于 docker 网桥的内容,需要补充说明一下。实际上 docker 在宿主机与容器之间,搭建了一座网络通信的桥梁,我们可通过宿主机 ip 地址与端口号来映射容器内部的 ip 地址与端口号,
在一系列参数后面的是“镜像名”或“镜像 id”,怎么方便就怎么来。最后是“初始命令”,它是上面编写的运行脚本,里面封装了加载环境变量并启动 tomcat 服务的命令。
当运行以上命令后,会立即输出一长串“容器 id”,我们可通过docker ps命令来查看当前正在运行的容器。
container id image command created status ports names
82f47923f926 huangyong/javaweb:0.1 "/root/run.sh" 4 seconds ago up 3 seconds 0.0.0.0:58080->8080/tcp javaweb
以上がDocker が Java Web 実行環境を構築する例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。