DS的Docker-compose筆記

做爲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-compose.yml

Docker基礎,什麼是Docker之類的請自行查找。sql

怎麼建立一個docker-compose.yml

隨便建個目錄,好比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加入

這個就不能直接用鏡像了,由於要安裝一些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文件存在這裏

nginx加入

一樣的,在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

相關文章
相關標籤/搜索