做爲DS,固然不能高大上的談什麼linux啦Mac啦,因此只能是windows了。docker-compose方式建立環境和Dockerfile方式建立環境的區別請本身查找。php
有windows安裝版了,去下載並安裝就好。官網是:https://www.docker.com/
安裝成功後運行快捷方式 Docker Quickstart Terminal,而後它須要去下載一個叫作boot2docker.iso文件,慢的很,你能夠根據當前的提示去對應的地址用迅雷之類的下載,而後copy到提示信息中描述的位置,這就好多了。而後這個默認的虛擬機(default)就成功運行了。html
運行Oracle VM VirtualBox這個虛擬機管理工具,你能看到那個default虛擬機已經處於運行狀態,點一下設置,找到共享文件這裏,你會發現有一個默認的共享目錄已經存在,叫作Users,別管他,也不要刪除,不然你就沒法再使用Docker Quickstart Terminal和Kitematic了。
新建一個共享文件夾,非只讀、非自動掛載、非固定分配。
而後鏈接你的虛擬機,方法1-用Xshell之類的工具鏈接,方法2-在虛擬機管理器界面點「顯示」
例如你剛纔把d:/workspace做爲共享目錄了,共享目錄名定義爲vm_share,那麼在虛擬機中執行如下命令:mysql
sudo mkdir /usr/share/vm_share #你能夠隨意在你喜歡的位置建立 sudo mount -t vboxsf vm_share /usr/share/vm_share #vm_share是共享目錄名,後面是剛建立的目錄,很容易懂吧
好了,同步成功。至於那個叫作Users的共享文件夾,當不存在好了。linux
注意,若是從新啓動了虛擬主機,須要再次執行以上命令。nginx
Docker基礎,什麼是Docker之類的請自行查找。sql
隨便建個目錄,好比php_stack,而後在裏面新建一個文件docker-compose.yml就行了。docker
在docker-compose.yml裏面寫入shell
mysql5: #起個名字 image: mysql:5.7 #image是指從docker hub的鏡像建立,這裏用的mysql:5.7 ports: #端口設置 - 3306:3306 #前面的3306是虛擬機的端口,後面的3306是mysql5這個容器的端口,爲何mysql5這個容器的端口是3306呢?[查看該鏡像的Dockerfile][2]就知道了,其中寫了`EXPOSE 3306` environment: #環境變量 - MYSQL_ROOT_PASSWORD=pass #root用戶密碼,密碼是什麼均可以 volumes: #卷設置 - /usr/share/vm_share/data/mysql:/var/lib/mysql #/usr/share/vm_share指向咱們的共享文件夾,因此咱們要在共享文件夾裏面建立data/mysql目錄,如今你在這個mysql容器裏面修改的數據不會丟掉了。
運行Docker Quickstart Terminal,進入docker-compose.yml文件所在的目錄(什麼?不知道怎麼切換盤符?cd /d等同於d:)
執行docker-compose up, 選項 -d 啓動持久的服務(一般須要這個參數),選項 --build 若是你忘了的話終端會輸出建議你使用--build選項的內容,(一般不須要這個參數)數據庫
這個就不能直接用鏡像了,由於要安裝一些PHP擴展啥的,因此本身寫一個Dockerfile吧,在docker-compose.yml所在目錄建立子目錄php,在子目錄中建立Dockerfilewindows
FROM php:7-fpm #基於這個 RUN apt-get update && apt-get install -y libmcrypt-dev #簡單安裝幾個擴展 RUN docker-php-ext-install mbstring pdo_mysql tokenizer #簡單安裝幾個擴展 COPY ./php.ini /usr/local/etc/php/ #自定義的php.ini,和這個Dockerfile相同目錄 CMD ["php-fpm"] #沒啥解釋的
而後在docker-compose.yml中加入如下內容
php7: build: ./php #根據該目錄下的Dockerfile構造 ports: - 9000:9000 links: - mysql5 #關聯mysql volumes: - /usr/share/vm_share/htdocs:/var/www/html #php文件存在這裏
一樣的,在docker-compose.yml目錄下建立一個nginx目錄,裏面有Dockerfile和nginx.conf兩個文件。
Dockerfile內容很簡單
FROM nginx:1.10 #基於這個鏡像 RUN rm -f /etc/nginx/conf.d/* #這些刪掉 COPY ./nginx.conf /etc/nginx/ #複製配置文件
nginx.conf
user nginx; worker_processes 2; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; worker_rlimit_nofile 100000; events { worker_connections 2048; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; keepalive_timeout 65; gzip on; include /etc/nginx/conf.d/*; #加載額外的配置文件 }
而後在docker-compose.yml中加入
nginx: build: ./nginx ports: - 80:80 - 443:443 links: - php7:php #關聯容器,剛纔加入的php服務容器名字是php7,因此前面是php7,後面就理解成別名吧。這個時候體現出compose的優點了,你能夠在建立一個php56,而後這裏改爲php56:php,版本切換完成。 volumes: - /usr/share/vm_share/sites:/etc/nginx/conf.d #額外的配置文件放這裏了 - /usr/share/vm_share/htdocs:/var/www/html #源碼目錄 - /usr/share/vm_share/logs/nginx:/var/log/nginx #日誌
在共享目錄下建立sites目錄,而且放一個默認的虛擬主機配置文件進去就行了,例如default.vhost
server { listen 80; root /var/www/html; index index.php index.html index.htm; client_max_body_size 100m; location / { try_files $uri $uri/ /index.php?$query_string; location ~* \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass php:9000; #注意,這裏是用的php,是那個php7:php中的php } } }
/ - data - mysql - htdocs - phpinfo.php - logs - nginx - sites - default.vhost
最終結構比這個複雜,可是那都是自動生成的,好比mysql的數據文件和nginx日誌。
再一次docker-compose up -d,訪問http://192.168.99.100/phpinfo.php,真的成功了哦。(若是你的虛擬機的ip不是這個。。。重啓虛擬主機的時候會看到ip信息)
但願這篇文章能幫你躲開幾個坑,請點贊。
後補一個坑默認虛擬機的ip是自動分配的,有時候在啓動後會出現相似 IP地址與證書地址不匹配 的提示,能夠執行如下命令從新生成證書就行了docker-machine regenerate-certs default