ホームページ  >  記事  >  バックエンド開発  >  Docker for WindowsのインストールとLinux+PHP開発環境構築(1)

Docker for WindowsのインストールとLinux+PHP開発環境構築(1)

WBOY
WBOYオリジナル
2016-07-30 13:30:132172ブラウズ

Docker とは何ですか?

簡単に言うと、Docker は GO 言語で書かれたプログラムによって実行される「コンテナ」(Linux コンテナ、LXC) であり、現在のクラウド サービスの基礎は、同じ物理マシン上でオペレーティング システム レベルで分離されることです。複数のホストがサーバー上で仮想化されます。 Docker はアプリケーション レベルの分離を実装します。これにより、基本的な開発および運用単位が、仮想ホスト (VM) を直接操作することから、オペレーティング プログラムが実行される「コンテナ」に変更されます。

Docker の利点

Docker の利点: 高速実行、機敏な展開、柔軟性、軽量、オープンソース、無料。

Boot2Docker は、Docker 用に特別に設計された軽量の Linux 配布パッケージで、Windows または OS X ユーザーが Docker をインストールできないという問題を解決します。 Boot2Docker は完全にメモリ内で実行され、サイズは 24M で、起動にかかる時間はわずか 5 ~ 6 秒です。 Boot2Docker は VirtualBox で実行する必要があります。

Docker for Windows のインストールと使用手順

システムのバージョンとハードウェア仮想化を確認します

まず、Windows オペレーティング システムのバージョン番号を確認します

Boot2Docker の動作には、オペレーティング システムが少なくとも Windows 7.1、8/8.1 である必要があります。テスト済みの Windows 7 Ultimate (Windows 7 Ultimate) もサポートしています。

次に、システムがハードウェア仮想化をサポートしており、仮想化が有効になっていることを確認する必要があります。

仮想化テクノロジーのサポートを有効にするには、チップセットのサポート、BIOS サポート、プロセッサーのサポート、オペレーティング システムのサポートなど、いくつかの側面のサポートが必要です。

オペレーティング システムに関しては、すべての主流のオペレーティング システムが VMM 管理をサポートしているため、考慮する必要はありません。チップセットに関しては、Intel 945(ネットブックを除く)の時代からサポートされているため、考慮する必要はありません。 CPU に関しては、Intel の公式 Web サイトから問い合わせるか、サードパーティのテスト ソフトウェアを使用して判断できます。したがって、BIOS がそれをサポートしているかどうかを確認することが重要です。

Windows 8/8.1 システムの場合、タスク マネージャー - [パフォーマンス] タブ - CPU を開くと、仮想化がオンになっていることがわかります。以下に示すように:

Docker for WindowsのインストールとLinux+PHP開発環境構築(1)

「有効になっていない」場合は、マザーボード BIOS に移動して有効にする必要があります。

BIOS に入る方法: コンピューターの起動中、画面の下部に「Press DEL to enter SETUP」というプロンプトが表示されたら、すぐに「Del」キーを押して BIOS セットアップ プログラムに入ります。一部の種類の BIOS では、F2 キーまたは F10 キーを押して起動ロゴ画面に入り、画面上のプロンプトに従う必要があります。

たとえば、Intel Virtual Technology 設定項目を見つけて、「無効」を「有効」に変更します。次に保存して終了し、VT 機能を有効にします。以下に示すように:

Enable Intel Virtual Technology

Windows 7 システムの場合、プロセッサが仮想化をサポートしているかどうか、および仮想化がオンになっているかどうかを確認するには、Microsoft ハードウェア支援仮想化検出ツールをインストールする必要があります。 HAV 検出ツールをダウンロードしてインストールし、画面上のプロンプトに従って検出結果を確認し、次の手順については HAV 検出ツール ユーザー ガイドを参照してください。

ダウンロードアドレス:

HAV検出ツール
http://download.microsoft.com/download/1/9/F/19FD407F-A7E9-4393-A845-D0B1F539678E/havdetectiontool.exe

HAV 検出ツール ユーザー ガイド
http://download.microsoft.com/download/1/9/F/19FD407F-A7E9-4393-A845-D0B1F539678E/HAV%20Detection%20Tool%20-%20User%20Guide.mht

次のようなプロンプトが画面に表示された場合以下では、現在のコンピュータ プロセッサがハードウェア仮想化をサポートし、有効になっていることを示します。

Hardware-Assisted Virtualization Detection

Boot2Docker をインストールします

次に、Boot2Docker といくつかの補助ソフトウェアをインストールする必要があります。具体的には:

Windows 用 Docker クライアント
Boot2Docker 管理ツールと ISO
Oracle VM VirtualBox
Git MSYS-git UNIX ツール

最初にクリックして Windows 用の Boot2Docker をダウンロードします。

ダウンロードアドレス:

https://s3.amazonaws.com/github-cloud/releases/18047765/825908bc-15b8-11e5-96cb-9a42a043cc39.exe?response-content-disposition=attachment%3B%20filename%3Ddocker -install.exe&response-content-type=application/octet-stream&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1437386585&Signature=wM%2BTTYN4yqc8fhh7WAEeZw7A5cE%3D

次に、ダウンロードした docker-install.exe インストール ファイルをダブルクリックしてインストールを開始します。インストールプロセス中は、コンピュータの関連するセキュリティ ソフトウェアを事前にオフにすることをお勧めします。

公式のダウンロード速度は比較的遅いので、国内のDaoCloud http://get.daocloud.io/ からダウンロードしてみてください

インストールが成功したかどうかを確認します

インストールが完了したらBoot2Dockerを起動します。

Desktop Iconset

Boot2Docker ターミナルを開いた後、システムがユーザー アカウント制御のプロンプトを表示した場合は、[はい] を選択して、仮想マシン VirtualBox がコンピューター構成の一部の変更を完了することを確認してください。プロンプトが表示されない場合、通常は設定は必要ありません。

注: ユーザー アカウント制御 (UAC) は、Windows Vista の新しいセキュリティ機能です。ユーザーが管理者アカウントでログインしている場合でも、マルウェアが権限を取得するのを防ぎます。 UAC はコントロール パネルで変更できます。Win7 Ultimate を例に挙げると、[コントロール パネル] → [すべてのコントロール パネル項目] → [ユーザー アカウント] → [ユーザー アカウント制御設定の変更] を選択できます。

UAC Setting

Boot2Docker を起動し、Docker の実行に必要な環境変数 bash スクリプトを実行するには、ターミナルに一定の初期化時間が必要です。正常に起動すると、$ プロンプトが表示されます。

Boot2docker Start

boot2docker ssh コマンドを使用して VM に入ります。後でこのコマンドを使用して、基本的な構成を実行する必要があります。

boot2docker ssh

docker コマンドを直接使用できるようになりました。

ターミナルでコマンド docker run hello-world を実行し、Enter キーを押します。正常に実行されると、次の内容が出力されます:

<code>$ docker run hello-world
Unable <span>to</span> find image <span>'hello-world:latest'</span> locally
Pulling repository hello-world
<span>91</span>c95931e552: Download complete 
a8219747be10: Download complete 
Status: Downloaded newer image <span>for</span> hello-world:latest
Hello <span>from</span> Docker.
This message shows that your installation appears <span>to</span> be working correctly.


To generate this message, Docker took <span>the</span> following steps:
 <span>1.</span> The Docker client contacted <span>the</span> Docker daemon.
 <span>2.</span> The Docker daemon pulled <span>the</span><span>"hello-world"</span> image <span>from</span><span>the</span> Docker Hub.
    (Assuming <span>it</span> was <span>not</span> already locally available.)
 <span>3.</span> The Docker daemon created <span>a</span><span>new</span> container <span>from</span> that image which runs <span>the</span>
    executable that produces <span>the</span> output you are currently reading.
 <span>4.</span> The Docker daemon streamed that output <span>to</span><span>the</span> Docker client, which sent <span>it</span><span>to</span> your terminal.


To <span>try</span> something more ambitious, you can run <span>an</span> Ubuntu container <span>with</span>:
 $ docker run -<span>it</span> ubuntu bash


For more examples <span>and</span> ideas, visit:
 <span>http</span>://docs.docker.com/userguide/

</code>

コンテナとイメージを理解する

docker run hello-world コマンドを例に挙げます:

docker run container

コンテナは、Linux オペレーティング システムの簡略化されたバージョンです。イメージがコンテナーのソフトウェア コレクションにロードされると、このコマンドが実行された後、Docker は次のアクションを順番に実行します:

a. hello-world イメージがインストールされているかどうかを確認します。 b. インストールされていない場合は、Docker リモート リポジトリ (Docker Hub) からイメージをダウンロードします。 c. イメージをコンテナにロードして実行します。

Doker PHP コンテナを作成し、PHP 開発環境を有効にします

Docker Hub には、個人の開発者によって提供されたイメージだけでなく、企業や組織構造によってアップロードされた公式イメージもあります。Docker Hub イメージまたは独自のローカルのプライベート イメージを使用できます。例: local.registry.com:5000/php)。 PHP開発環境の構築を例に、Dockerコマンドの使い方を解説していきます。

ここで使用されるのは、独自に構築されたプライベート イメージ (Linux+PHP+Apache が統合されています) です。プライベート イメージのアドレスは、172.16.100.71:5000/php

1 です。 boot2docker VM

a. Windows システムのローカル ホストを設定します

Windows システムのローカル ホストを設定するのは、主に CMD コマンド プロンプトでの操作を容易にするためです。 Git Bash で操作している場合は、Windows システムのローカル ホスト設定をスキップすることを選択できます。

場所: C:WindowsSystem32driversetchosts

行 172.16.100.71 local.registry.com を追加します

b. boot2docker 仮想マシンのホストを設定します

boot2docker ssh コマンドを使用して仮想マシンに入り、次のコマンドを実行します。

sudo vi /etc/hosts

ファイルに行を追加します: 172.16.100.71 local.registry.com

exit

次のコマンドを組み合わせて使用​​することもできます:

<code>boot2docker ssh <span>"echo $'172.16.100.71 local.registry.com' | sudo tee -a /etc/hosts"</span></code>

2. 環境変数の設定を確認します

Git Bash に入力します:

<code><span>export</span></code>

環境変数が自動的に設定されているかどうかを確認します: DOCKER_HOST、DOCKER_CERT_PATH、DOCKER_TLS_VERIFY

boot2docker shellinit は最後に Docker クライアントの環境変数を表示できるため、次のコマンドを使用して環境変数を自動的に設定できます

<code><span>eval</span><span>"<span>$(boot2docker shellinit)</span>"</span></code>

このコマンドが正常に設定できない場合は、次のコマンドを入力して手動で追加する必要があります:

<code><span>export</span> DOCKER_HOST=tcp:<span>//192.168.59.103:2376</span><span>export</span> DOCKER_CERT_PATH=/c/Users/Administrator/.boot2docker/certs/boot2docker-vm
<span>export</span> DOCKER_TLS_VERIFY=<span>1</span></code>

実行後にexportと入力し、書き込みが成功したかを確認します。

Windows 独自の CMD で Docker コマンドを操作できるようにするには、cmd で次のコマンドを入力します:

<code><span>set</span> DOCKER_HOST<span>=</span>tcp:<span>//192.168.59.103:2376</span><span>set</span> DOCKER_CERT_PATH<span>=</span>C:/Users/Administrator<span>/</span><span>.</span>boot2docker/certs/boot2docker<span>-vm</span><span>set</span> DOCKER_TLS_VERIFY<span>=</span><span>1</span></code>

実行後に set と入力して、書き込みが成功したかどうかを確認します。

ただし、set コマンドで設定された環境変数は一時的に有効であり、cmd コマンド ライン ウィンドウを閉じると無効になります。

永続的な環境変数を設定する方法は、「コンピューター-プロパティ-システムの詳細設定-詳細-環境変数」で、上記の3つのシステム変数を作成し、対応する値を入力します。設定が完了したら、CMD を再度開くと有効になります。

さらに、CMD で boot2docker ssh やその他のコマンドを実行する場合は、Git 関連の環境変数も設定する必要があります。方法は:

<code>set PATH=<span>%PATH</span><span>%;</span><span>"C:\Program Files (x86)\Git\bin"</span></code>

永続的な環境変数の設定方法は上記と同じで、システム変数のPATHフィールドに次のディレクトリを追加します(特定のディレクトリはGitのインストールディレクトリに応じて追加されます)

;C:Program Files (x86)Gitbin;

その後、cmd を再起動します。すぐに有効になります。

3. –insecure-registry オプションを設定します

docker 1.3.1 以降、安全でないプライベート イメージへの接続はデフォルトで許可されません。ここで、自己構築のプライベート イメージをダウンロードします。これは次の方法で設定する必要があります:

<code>boot2docker ssh
<span>sudo</span> vi /var/lib/boot2docker/profile</code>

行を追加して

<code><span>EXTRA_ARGS=<span><span>"--insecure-registry local.registry.com:5000"</span></span></span></code>

保存し、Docker サービスを再起動します:

<code><span>sudo</span> /etc/init.d/docker restart</code>

で操作をマージすることもできます。 Git Bash:

<code>boot2docker ssh <span>"echo $'EXTRA_ARGS=\"</span>--insecure-registry local.registry.com:<span>5000</span>\<span>"' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"</span></code>

手順: local.registry .com:5000 などのプライベート ミラー アドレスも IP アドレスに置き換えることができます。

tee コマンド パラメータ -a は、ファイルにコンテンツを追加するためのもので、必要に応じて使用します。


Docker for WindowsのインストールとLinux+PHP開発環境構築(1) sudo /etc/init.d/docker restart コマンドは再起動に失敗する場合があるため、次のコマンドを通じて docker プロセスの情報を観察できます:

<code>ps -ef <span>|grep docker</span></code>

若docker主进程(/usr/local/bin/docker)PID比较小,且运行时间比较久,那么说明没有重启成功。需要强制杀死该进程后再重启。

<code><span>sudo</span> kill -<span>9</span> pid
<span>sudo</span> /etc/init.d/docker restart</code>

最后通过ps -ef |grep docker命令再检查一遍进程号和运行时间,保证docker重启成功。

<code>ps -ef |<span>grep</span> docker
<span>exit</span></code>

4、将私有镜像下载到本地

<code>docker pull local<span>.registry</span><span>.com</span>:<span>5000</span>/php</code>

在镜像运行前,先将其下载到本地,如果报错,参照之前步骤或错误处理进行解决,解决后继续执行后续步骤

5、检查、设置虚拟机共享文件夹

VirtualBox默认将宿主机目录C:\Users作为共享文件夹,并自动挂载到虚拟机c/Users路径。所以一般情况下我们通常选择将数据放在宿主机C:\Users目录,然后通过docker命令挂载到容器。但作为Windows用户,大家的C盘常作为系统盘,关键数据放在C盘是比较危险的,一旦Windows系统损坏无法启动有可能造成数据丢失。

所以,我们想到:能不能自己添加其他盘符下的共享文件夹,挂载到容器?

当然可以!!!步骤有些繁琐,继续往下看。

经过尝试,在C:\Users目录创建指向其他盘符共享文件夹的快捷方式这个方法是行不通的。

下面是正确的操作步骤:

打开boot2docker虚拟机GUI,点击“设置”-“共享文件夹”,在“固定分配”菜单右键“添加共享文件夹”,如图:

VitualBox ShareFolder

a. 执行boot2docker ssh 进入虚拟机,先确定要挂载到的目录,若目录不存在需要手动创建:

<code>boot2docker ssh
<span>sudo</span> mkdir -p /f/projects/phpdev</code>

b. 创建要挂载到的目录后,执行以下命令进行共享文件夹挂载。

<code><span>sudo</span> mount -t vboxsf f/projects/phpdev  /f/projects/phpdev</code>

<code>sudo mount <span>-t</span> vboxsf <span>-o</span> uid<span>=</span><span>1000</span>,gid<span>=</span><span>50</span> f/projects/phpdev  /f/projects/phpdev</code>

如下图:

Docker for WindowsのインストールとLinux+PHP開発環境構築(1)

mount完成后退出, boot2docker ssh重新进入虚拟机,查看宿主机共享文件夹是否同步到挂载目录。

从图中可以看到,宿主机本地目录F:\projects\phpdev下的文件/文件夹已经同步显示到当前虚拟机挂载目录下,即/f/projects/phpdev路径下。

由于下文步骤六的docker容器是将/f/projects/phpdev挂载到容器Linux环境的/var/www/html路径,这一步操作就是为了接下来步骤做准备。

我们一般情况下,为了保证数据安全性和完整性,不会在docker创建的容器环境中永久保存数据。常见的方法是将本地宿主机的文件系统映射到容器环境的文件系统,这样能确保容器环境中生成的数据直接保存在用户主机的磁盘,而不会由于容器损坏或未及时将容器持久化而造成数据丢失。

根据boot2docker官方(https://github.com/boot2docker/boot2docker)的描述,boot2docker内置了一个专门用于虚拟机文件夹共享的客户端增强包(VirtualBox Guest Additions)。

若以下共享文件夹名称存在,则该共享文件夹则自动挂载到以下位置:

Users 挂载到 /Users
/Users挂载到 /Users
c/Users挂载到 /c/Users
/c/Users挂载到 /c/Users
c:/Users挂载到 /c/Users

如果需要共享其他文件路径,则需要执行以下命令:

<code>boot2docker ssh
sudo mount <span>-t</span> vboxsf your<span>-other</span><span>-share</span><span>-name</span> /some/mount/location</code>

<code>boot2docker ssh
mount <span>-t</span> vboxsf <span>-o</span> uid<span>=</span><span>1000</span>,gid<span>=</span><span>50</span> your<span>-other</span><span>-share</span><span>-name</span> /some/mount/location</code>

注:Linux命令id可查看用户的UID(对应/etc/passwd)和GID(对应/etc/group)

不过,如果重启Windows,这些设置会被清除,需要再次进行挂载操作(当然,直接重启boot2docker-vm同样会清除所有配置数据)。如果你不想每一次都手动挂载,可以在/etc/fstab中添加一项

<code>your<span>-other</span><span>-share</span><span>-name</span> /some/mount/location vboxsf rw,gid<span>=</span><span>100</span>,uid<span>=</span><span>1000</span>,auto <span>0</span><span>0</span></code>

<code>your<span>-other</span><span>-share</span><span>-name</span> /some/mount/location vboxsf defaults <span>0</span><span>0</span></code>

这样就能够自动挂载了(需要安装客户端增强包VirtualBox Guest Additions)。

执行完手动挂载命令,正常情况下,/some/mount/location目录下已经可以显示共享文件夹的内容了。

由于boot2docker本身是虚拟机,docker也作为虚拟机环境,要使用docker run -v path1:path2成功挂载,实际需要进行两步映射:共享文件夹先由宿主机挂载到boot2docker虚拟机,再由boot2docker虚拟机挂载到docker容器环境。

挂载前先建立挂载目录:

<code><span>sudo</span> mkdir -p /some/mount/location</code>

然后再执行上述mount挂载命令。

卸载共享文件夹,使用命令sudo umount -f /f/projects/phpdev

注意:

卸载共享文件夹需要先退出挂载目录,再卸载,否则会报错:
umount: can’t forcibly umount /f/projects/phpdev: No such file or directory

同时要注意卸载目录一定要写对,注意盘符F前的斜线/,如果要卸载的目录没有挂载过,则会报错:
umount: can’t forcibly umount /f/projects/phpdev: Invalid argument

6、根据所提供镜像,创建并运行一个容器

根据拉到本地的私有镜像(Linux+Apache+PHP集成镜像),创建并运行一个容器:

<code>docker run <span>-d</span><span>-p</span><span>8000</span>:<span>80</span><span>-p</span><span>2222</span>:<span>22</span><span>--</span>name php <span>-v</span> /f/projects/phpdev:/<span>var</span>/www/html <span>local</span><span>.</span>registry<span>.</span>com:<span>5000</span>/php</code>

其中80端口是HTTP/Nginx默认端口,22端口是Linux SSH默认端口。以后台运行方式,将宿主机本地目录/f/projects/phpdev挂载到容器。

注意:

若在Windows系统的Git bash下执行会挂载失败报错,因为msysgit会将/c/Users这样的目录自动转为c:\Users,所以需要使用双斜线,Git bash中输入命令为:

<code>docker run <span>-d</span><span>-p</span><span>8000</span>:<span>80</span><span>-p</span><span>2222</span>:<span>22</span><span>--</span>name php <span>-v</span><span>//f//projects//phpdev:/var/www/html local.registry.com:5000/php</span></code>

然后,通过docker ps 命令,可以查看当前运行中的容器。

<code><span>$ </span>boot2docker.exe ip
<span>192.168</span>.<span>59.103</span></code>

我们可以通过ssh进入到当前php容器,也可使用XShell等SSH工具连接。

SSH登录命令为:

<code>ssh -p <span>2222</span> root<span>@192</span>.<span>168.59</span>.<span>103</span></code>

注:boot2docker ssh的账号密码为user/docker ,私有镜像为root/hellonihao

SSH登录后就可以看到我们熟悉的Linux目录结构了。

如果本地没有phpdev文件夹将会自动创建,在该目录下新建个phpinfo.php测试文件,用于输出php配置信息。

Docker的宿主机是boot2docker的虚拟机,因此需要使用虚拟机的ip进行访问,获取ip方式为boot2docker ip。

所以上述phpinfo.php文件访问地址:192.168.59.103:8000/phpinfo.php

Docker for WindowsのインストールとLinux+PHP開発環境構築(1)

举例,仅根据centos基础镜像建立一个容器,并建立一个数据卷/data,命令如下

<code><span>$</span><span>docker</span><span>run</span><span>-</span><span>it</span><span>-</span><span>-</span><span>rm</span><span>-</span><span>-</span><span>name</span><span>centos</span><span>-</span><span>-</span><span>volume=/data</span><span>local</span><span>.</span><span>registry</span><span>.</span><span>com:5000/centos</span><span>/bin/bash</span></code>

注意:在Git Bash需要用双斜线,执行

<code><span>$</span><span>docker</span><span>run</span><span>-</span><span>it</span><span>-</span><span>-</span><span>rm</span><span>-</span><span>-</span><span>name</span><span>centos</span><span>-</span><span>-</span><span>volume=//data</span><span>local</span><span>.</span><span>registry</span><span>.</span><span>com:5000/ce</span><span>ntos</span><span>//bin//bash</span></code>

将宿主机目录挂载到数据卷,命令如下:

<code>$ docker run <span>-it</span><span>--</span>rm  <span>--</span>name centos <span>-v</span> /c/Users/phpdev:/<span>data</span><span>local</span><span>.</span>registry<span>.</span>com:<span>5000</span>/centos /bin/bash </code>

注意:在Git Bash下需要用双斜线,即:

<code><span>$ </span>docker run -it --rm  --name centos -v /<span>/c/</span><span>/Users/</span><span>/phpdev:/data</span> local.registry.<span>com:</span><span>5000</span>/centos /<span>/bin/</span><span>/bash </span></code>

附其他常用命令:

docker rm -f php
docker ps -l
docker images -a
docker rmi
docker stop
docker run
docker kill

以上是docker for Windows版本的安装方法和docker使用步骤的介绍。如果有错误疏漏,欢迎留言指正,一起探讨学习docker。

下一篇会分享介绍docker安装使用中常见错误的处理方法。


参考文章:

http://docs.docker.com/userguide/ “docker官方文档-用户指南”
https://github.com/boot2docker/boot2docker “Boot2docker官方文档”
http://blog.pavelsklenar.com/5-useful-docker-tip-and-tricks-on-windows/

本文来自于CSDN博客,转载请注明出处,谢谢!

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了Docker for Windows安装与Linux+PHP开发环境搭建(一),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHPの日付関数次の記事:PHPの日付関数