Docker 重要性不用多作解釋,咱們每天吵着雲原生,最重要的一門技術,你是否掌握了呢?從今天,一塊兒來docker吧! php
Ubuntu 19.04
VSCode
Docker CE
VSCode請先確認是否安裝了Docker插件,若是沒有能夠安裝,這個是可視化的工具,用起來比較方便
html
nginx
和 php-fpm
的兩個docker可以互聯,讀取同一份代碼 mysql
nginx
基礎鏡像docker pull nginx
nginx
nginx
容器docker run --rm --name test-nginx -p 8080:80 nginx
git
參數解讀面試
docker run \ 啓動容器 --rm \ 容器終中止後能夠自動清理容器和相關文件系統,方便調試,也避免每次都手動刪除而後重啓 --name test-nginx \ 命名容器 -p 8080:80 \ 開放端口 宿主機8080的請求映射到容器的80端口 nginx 基於的鏡像sql
如今能看到已經有一個 nginx 容器在運行
docker
藉助 -v
參數
爲了演示,在系統根目錄新建了一個 docker-server
目錄,文件和文件夾以下,本身實現的時候大可在 home
目錄下作數據庫
咱們把以前的容器刪除,從新執行命令windows
docker run
--rm
--name test-nginx
-p 8080:80
-v /docker-server/www:/usr/share/nginx/html
nginx
刷新頁面
nginx
配置掛載宿主機文件藉助 -v
參數,咱們在宿主機新增一個目錄存放 nginx
配置,而後指定容器 nginx 配置目錄掛載到宿主機
在執行命令以前,咱們先寫好一個配置
server {
root /usr/share/nginx/html;
index index.html index.php;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
複製代碼
在 www 新增一個 php 文件
<?php
phpinfo();
複製代碼
此時咱們的目錄結構以下
執行命令
docker run
--rm
--name test-nginx
-p 8080:80
-v /docker-server/www:/usr/share/nginx/html
-v /docker-server/nginx:/etc/nginx/conf.d
nginx
刷新頁面
fpm
的容器。如今動手
docker pull php:fpm
docker run
--rm
--name php-app
php:fpm
如今咱們兩個容器都啓動了
關於容器間的網絡,建議後續瞭解下文檔中 使用網絡 一節。容器是一個虛擬出來的盒子,每一個容器都至關於一個進程級別的虛擬環境,跨容器的互聯,這裏先介紹兩種方式,能夠用過幾個參數便可。
--link
參數指定鏈接容器當你執行 docker run --help
能夠很清楚的看到全部可用命令參數
在 -l
分類處 有一個 --link
--link list 鏈接另一個容器
這就明白了。
一、咱們剛啓動的 fpm 容器不動,先修改 nginx 配置
server {
root /usr/share/nginx/html;
index index.html index.php;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location ~ \.php$ {
fastcgi_pass php-app:9000; # php-app就是咱們剛剛啓動的fpm的容器名字 9000也是它的默認監聽端口
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
複製代碼
二、增長 --link php-app 參數 以下從新啓動
docker run
--rm --name test-nginx
-p 8080:80
-v /docker-server/www:/usr/share/nginx/html
-v /docker-server/nginx:/etc/nginx/conf.d
--link php-app
nginx
三、刷新頁面
server {
root /usr/share/nginx/html;
index index.html index.php;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location ~ \.php$ {
root /var/www/html; # PHP-FPM默認的根目錄
fastcgi_pass php-app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
複製代碼
五、指定 fpm 掛載的項目根目錄,啓動 fpm 容器
docker run
--rm
--name php-app
-v /docker-server/www:/var/www/html
php:fpm
六、刷新頁面
--network
指定使用的容器網絡實現互聯docker run --help
能看到對--network 的解釋
--network network Connect a container to a network
在VSCode可視化窗口也能看到當前的網絡
docker network create my-php-network
docker run
--rm
--name php-app
--network my-php-network
-v /docker-server/www:/var/www/html
php:fpm
三、 重啓 nginx,用--network 顯式聲明使用的網絡
docker run
--rm --name test-nginx
-p 8080:80
-v /docker-server/www:/usr/share/nginx/html
-v /docker-server/nginx:/etc/nginx/conf.d
--network my-php-network
nginx
四、刷新頁面,仍舊是咱們熟悉的頁面
多個容器構建還有另一種方案,不過打算在另一節中單獨講。
下一篇主要圍繞 Docker Compose 來編排一個項目,用 nginx
php
mysql
等作演示,一塊兒編寫一個 docker-compose.yml
文件,一鍵啓動項目。