2016-07-13 40 views
3

我已經開始與碼頭工作並構建了一個工作示例,如https://codeable.io/wordpress-developers-intro-docker所示。由於部署將位於emebedded系統上,因此需要Docker容器的足夠小的空間。碼頭集裝箱:它們如何一起工作?

但我不知道這是如何融合在一起的。

有兩個Dockerfiles,一個是Nginx的:

FROM nginx:1.9-alpine 
COPY nginx.conf /etc/nginx/conf.d/default.conf 

nginx.conf被定義爲:

server { 
    server_name _; 
    listen 80 default_server; 

    root /var/www/html; 
    index index.php index.html; 

    access_log /dev/stdout; 
    error_log /dev/stdout info; 

    location/{ 
    try_files $uri $uri/ /index.php?$args; 
    } 

    location ~ .php$ { 
    include fastcgi_params; 
    fastcgi_pass my-php:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    } 
} 

其他Dockerfuile是PHP:

Dockerfile.php-fpm: 
FROM php:7.0.6-fpm-alpine 
RUN docker-php-ext-install -j$(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) \ 
    iconv gd mbstring fileinfo curl xmlreader xmlwriter spl ftp mysqli 
VOLUME /var/www/html 

最後一切都一起在docker-compose.yml中:

version: '2' 
services: 
    my-nginx: 
    build: . 
    volumes: 
     - .:/var/www/html 
    ports: 
     - "8080:80" 
    links: 
     - my-php 
    my-php: 
    build: 
     context: . 
     dockerfile: Dockerfile.php-fpm 
    volumes: 
     - .:/var/www/html 
    ports: 
     - "9000:9000" 

泊塢窗容器啓動時使用

$ docker-compose build 
$ docker-compose up 

,一切工作 - 這是一種魔力!

這裏是(一些)我的問題,以瞭解發生了什麼事情:

  • 如何nginx的容器瞭解PHP的容器?
  • 從nginx調用PHP時,PHP進程運行在哪個容器中? ?
  • 數據如何從nginx傳遞到PHP並返回?
  • 這是碼頭使用(3個容器爲簡單的 網絡服務器應用程序)正確的方式來使用碼頭或 這是容器矯枉過正嗎?
  • 這個碼頭架構如何縮放以增加 的負載?我可以將它用於生產嗎?
  • 容器在主機上使用相同的卷(./)。 當使用PHP框架作爲Yii2時,難道不是更好的 將卷移動到PHP或Nginx容器?

回答

3
  • nginx-container如何知道php-container?

links你列出的my-php容器,爲此,除其他事項外,創建容器的名稱之間的映射,並在/etc/hosts文件的IP。

  • 當PHP從nginx的調用,該容器確實在PHP過程運行?

正如你所期望的,任何php代碼將在my-php容器中運行,這在nginx配置文件,該文件通過請求對my-php:9000運行php引擎的處理定義。

  • 數據如何從nginx傳遞到PHP並返回?

超過常規套接字通信。兩個碼頭都有他們的地址,並且他們可以相互通信,就像任何連接到網絡的其他計算機一樣。

  • 這是泊塢窗的使用(3個容器用於簡單Web服務器應用程序)使用泊塢窗以正確的方式或者這是容器的矯枉過正?

我只在這裏看到2個容器。有些人會說一個容器應該只運行一個進程(就像這裏,所以你已經建立了最小系統),並且有些人說每個容器都應該運行任何服務需要的東西。 (然而,這是偏好的問題,並有對此事的不同看法)

  • 這怎麼泊塢窗架構進行縮放以增加負荷?我可以將它用於生產嗎?

是的,你可以用它來生產。它可以很容易地擴展,但爲了達到規模,你缺少一些部件來平衡負載。 (如負載平衡器,可以發送新的請求給一個實例,它是不是已經處於繁忙狀態。這樣做的一個很常見的工具是HAProxy

  • 容器在主機上使用同一個卷(./)當使用PHP框架作爲Yii2,那豈不是更好地卷作爲PHP容器還是在這種情況下,所有的處理轉移到無論是PHP或Nginx的容器?

,它應該是安全的僅在my-php上掛載音量。