国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從零構建一個基于Docker的Laravel應用

ixlei / 1597人閱讀

摘要:簡介其實在這樣的一個云計算時代早就已被人眾所周知了它改變了傳統物理機的虛擬化方式使得機器的資源得到了高效的利用因為運行在中的應用實際上就是運行在宿主機上的所以它是不需要進行硬件層面的虛擬化以及運行一個完整操作系統來支持于是在應用代碼的執行效

Docker簡介

其實在這樣的一個云計算時代, Docker 早就已被人眾所周知了,它改變了傳統物理機的虛擬化方式,使得機器的資源得到了高效的利用. 因為運行在 Docker 中的應用實際上就是運行在宿主機上的, 所以它是不需要進行硬件層面的虛擬化以及運行一個完整操作系統來支持. 于是在應用代碼的執行效率, 內存的使用以及文件的讀取速度都比傳統虛擬化的方式來的強. 而且它的啟動速度非常快,往往都是在毫秒級的,可以大大的節約了開發測試以及部署的時間.
其實對于開發人員來說, Docker 一個更大的意義就是可以保證擁有一致的運行環境, 程序員最常見的就是在開發測試部署環境不一致的情況下, 經常會觸發一些莫名奇妙的BUG, 為了杜絕「這段代碼在我機器上沒問題啊」這類的問題,這也是我們要去學習 Docker 的理由之一.

如何學習 Docker?

網上充斥著大量的關于 Docker 各個方面的教程和資料, 而且由于 Docker 的飛速發展, 很多教程其實都過時了, 對于初學者來說很難去分辨把握, 隨之而來的就是一系列的坑與問題, 漸漸的磨滅了學習者的動力. 其實學習一門新技術最好的永遠都是從官方的文檔入手, 然后就是 GitHub 上面一個技術人員的學習筆記, 最重要的是要去摸索實踐, 并且做好學習筆記. 其實學習一門新技術, 如果有正確的學習方法是可以少走很多彎路的, 這個有機會會寫一篇心得.

快速入門

這里限制于篇幅和作者水平, 不會大談 Docker 底層原理以及技術實現,也不會教你如何寫一個繁瑣的 Dockerfile, 而是會從一個普通開發者的身份入手, 帶你從零搭建一個基于 Docker 的 Laravel 應用.我們的系統環境使用的是 Ubuntu17.04, 其他系統也差不多,當然 Window 的話可能就要另當別論了.

安裝Docker

在 Ubuntu 下 Docker 的安裝和常規的軟件一樣,但是由于中國特色,還有有很多要注意的點,待會會詳細說明. Docker 的安裝方式有很多種,這里建議使用官方的一鍵安裝腳本來,避免一系列繁瑣的操作。

1. 下載安裝
  curl -fsSL get.docker.com -o get-docker.sh

然后安裝,并且選擇從阿里鏡像源下載:

sudo sh get-docker.sh --mirror Aliyun
2. 基本配置

其實安裝后基本上就可以使用了,主要是配置一些鏡像源和用戶組。配置鏡像源的目的不多說,用戶組主要是為了再使用的時候不用使用超級管理員權限即可運行。

加入用戶組

sudo usermod -aG docker $USER
PS. 配置用戶組后,可能還是會出現還是提示沒有權限的情況,這時重啟機器即可

配置鏡像源

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-"EOF"
{
  "registry-mirrors": ["https://be62qq2e.mirror.aliyuncs.com"]
}
EOF
PS. 這里的鏡像源是我自己阿里云的,同學們可以自行去阿里云獲取專有鏡像源地址

重啟

sudo systemctl daemon-reload
sudo systemctl restart docker
3. 安裝docker-compose

docker-compose類似一個包管理工具,方便我們管理鏡像。

curl -L https://github.com/docker/compose/releases/download/1.17.1/run.sh > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
基本概念

Docker 有兩個很重要的基本概念就是鏡像和容器. 這兩個其實就類似面向對象中的類和實例. 鏡像構建起來后就是容器,然后容器可以啟動停止,對于運行于容器中的應用在運行過程中產生的數據,實際上是可以保留下來的,只要不銷毀容器. 如果銷毀或者重新構建容器后數據自然就不存在了,所以官方建議用掛載的方式來持久化, 接下來會說到.

docker-compose

docker-compose 可以說是真正的讓 Docker 現代化了. 它就類似于 PHP 的 Composer 包管理工具一樣, 是用來管理多個鏡像的. 它極大的降低了學習 Docker 的難度. 我們在日常的開發中, 經常會碰到需要多個容器相互配合來完成某項任務的情況,比如 Web 容器和數據庫容器之間的通信,我們可以多帶帶的把一個項目中需要的所有容器和配置寫到一個 docker-compose.yml 文件中,來統一管理.來看一下一個簡單的配置文件格式:

version: "3"
services:
  nginx:
    build: .
    ports:
     - "80:80"

  redis:
    image: "redis:alpine"

一個項目可以由多個服務(容器)工程,而 docker-compose 是面向項目進行管理.

文件系統和網絡

這是 Docker 比較復雜的一塊,簡單介紹一下. Docker 里面的文件系統其實很真實宿主機的一樣, 可以用同樣的命令去操作, 只是要注意的一點就是我們在容器中運行的應用配置文件的路徑全部都是基于 Docker 的,不是基于宿主機的,很多文件不存在的問題都是這個引起來的.比如我們在運行一個 Nginx 容器和 PHP-FPM 容器的時候,不僅要把宿主機的項目路徑映射到 Nginx 容器中,還要映射到 PHP-FPM 容器中,否則就會是一系列的 File not found.
Docker 中的網絡是有多種模式的, 在默認情況下是會創建一個虛擬網橋的, 實際上是 Linux 的一個 bridge,它會在掛載到它的網口之間進行轉發。并且會隨機分配一個本地未被使用的屬于 172.17.0.0/16 網段的 IP 到各個容器中.這是一個網絡拓撲圖:

部署 Laravel 應用

基本介紹后我們會通過一個簡單的實例來加深理解, 就是部署一個 Laravel 應用. Web 服務器我們會使用 Nginx, 并且通過 PHP-FPM 來處理動態請求,用 MySQL 來存儲數據, Redis 作為我們的緩存和隊列驅動. 不同于網上的通過 Supervisor 來把所有服務運行在同一個容器中,我們會把這四個服務運行在四個容器中,這也是官方推薦的一種做法,然后我們會通過 docker-compose 來管理所有的服務(容器).

Nginx

直接上配置文件:

version: "2"
services:
    nginx:
        image: nginx
        ports:
            - "8090:80"
        links:
            - php-fpm
        volumes:
          - ./nginx/www:/var/www/html
          - ./nginx/sites:/etc/nginx/sites-enabled
          - ./nginx/nginx.conf:/etc/nginx/nginx.conf
        command: [nginx-debug, "-g", "daemon off;"]

其中的 services 節點下每一個表示一個服務;然后 nginx 這是個服務名可以隨便取;image 指定使用哪個鏡像來構建; ports 表示要暴露的端口,其中 8090 是指宿主機的端口,80 是指容器中的端口;volumes 表示掛載的目錄和文件,我們這里掛載了代碼目錄,虛擬主機目錄以及配置文件;command 表示容器啟動后要運行的命令。我們還要在當前目錄下創建一個 nginx 的目錄,用來存放一系列的文件,還需要把配置文件新建并且寫入配置內容(具體配置內容可以去官網查看,這里不說明),最后的目錄結構是這樣

Docker
    - docker-compose.yml
    - nginx
        - www
        - sites
        - nginx.conf
    
可以把日志一起掛載,這里沒有表述出來

然后執行啟動容器的命令:

docker-compose up nginx

以上不會在后臺啟動,而是會直接在當前的 shell 上,然后我們訪問應該就可以看到 Welcome to nginx!

PHP-FPM MySQL Redis

同理我們再次配置 PHP-FPM,MySQL 以及 Redis 的容器了,具體過程不多講,這里貼出配置:

  php-fpm:
    image: "bitnami/php-fpm:7.1"
    volumes:
      - ./nginx/www:/var/www/html
      - ./php-fpm/php.ini:/bitnami/php/conf/php.ini
    links:
      - mysql
      - redis

  mysql:
    image: mysql
    restart: always
    environment:
        MYSQL_ROOT_PASSWORD: example
    volumes:
      - /var/lib/mysql:/var/lib/mysql

  redis:
    image: redis

有一點要注意的是,在配置PHP-FPM容器的時候是需要把代碼目錄也掛載到容器里面的,這一點很容易被遺忘,網上很多教程都沒提到,導致最后雖然按照步驟走了但就是跑不起來。其中的 links 就是配置要連接到哪個容器中。比如配置了 Nginx 容器連接到 PHP-FPM 的容器,這樣我們在 Nginx 的容器中就可以直接 ping php-fpm,在配置的時候也可以這樣 php-fpm:9000 來配置了。

配置文件

Nginx 的配置文件,然后還要修改一下本地的 hosts 文件。

server {
    listen 80;
    listen [::]:80;
    root /var/www/html/laravel/public;
    index index.html index.php;
    server_name laravel-docker.app;
    location / {
            try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ .php$ {
            fastcgi_split_path_info ^(.+.php)(/.+)$;
            fastcgi_pass php-fpm:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
運行訪問 附錄

貼一些常用的 docker-compose 命令,其中的 dc 表示 docker-compose 命令。

dc  stop            停止所有容器
dc  stop    nginx   停止指定容器
dc  up      -d      啟動容器后臺運行
dc  ps              查看當前容器
dc  logs    kafka   查看指定容器日志

歡迎關我的個人公眾號:左手代碼

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27188.html

相關文章

  • docker實操】使用docker部署一個laravel應用

    摘要:最近部署上線一個項目,新的服務器,在生產環境安裝配置等各種東西一大堆很麻煩。本文是我學習并使用部署項目的一個記錄。另外我們可以部署不同版本的應用,例如,并且互不干擾。之后部署只需要移植鏡像生成容器,就能保證環境的一致。需要使用三個鏡像。 最近部署上線一個項目,新的服務器,在生產環境安裝配置nginx、php、mysql、git、composer等各種東西一大堆很麻煩。docker已經火...

    quietin 評論0 收藏0
  • docker實操】使用docker部署一個laravel應用

    摘要:最近部署上線一個項目,新的服務器,在生產環境安裝配置等各種東西一大堆很麻煩。本文是我學習并使用部署項目的一個記錄。另外我們可以部署不同版本的應用,例如,并且互不干擾。之后部署只需要移植鏡像生成容器,就能保證環境的一致。需要使用三個鏡像。 最近部署上線一個項目,新的服務器,在生產環境安裝配置nginx、php、mysql、git、composer等各種東西一大堆很麻煩。docker已經火...

    SunZhaopeng 評論0 收藏0
  • PHP開發環境03 - 使用KFKDock搭建PHP項目環境

    摘要:基于快速搭建服務根據自定義配置文件快速搭建環境。目錄此項目能做什么地址視頻教程包含軟件項目目錄結構快速運行運行服務運行項目運行前端服務此項目能做什么搭建開發生產環境。搭建開發生產環境。 基于Docker快速搭建Web服務 根據自定義配置文件快速搭建Web環境。 目錄 此項目能做什么 GItHub地址、視頻教程 包含軟件 項目目錄結構 快速運行KFKDock 運行PHP服務 運行L...

    Zhuxy 評論0 收藏0
  • PHP開發環境03 - 使用KFKDock搭建PHP項目環境

    摘要:基于快速搭建服務根據自定義配置文件快速搭建環境。目錄此項目能做什么地址視頻教程包含軟件項目目錄結構快速運行運行服務運行項目運行前端服務此項目能做什么搭建開發生產環境。搭建開發生產環境。 基于Docker快速搭建Web服務 根據自定義配置文件快速搭建Web環境。 目錄 此項目能做什么 GItHub地址、視頻教程 包含軟件 項目目錄結構 快速運行KFKDock 運行PHP服務 運行L...

    yagami 評論0 收藏0

發表評論

0條評論

ixlei

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<