1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        dkc用 docker-compose 加速構(gòu)建 PHP 環(huán)境

        聯(lián)合創(chuàng)作 · 2023-10-01 09:21

        dkc

        快速構(gòu)建(LNMP+Nodejs)運(yùn)行環(huán)境.

        dkc 在此作為 docker-compose 的縮寫(xiě),你可以理解為 alias dkc=docker-compose

        準(zhǔn)備

        安裝 docker

        選擇1) 從 repository 安裝

        @guide https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repository

        # 1.支持 Ubuntu 和 CentOS 的安裝腳本
        $ sudo wget https://raw.githubusercontent.com/farwish/delicateShell/master/support/installDockerCE.sh && chmod +x installDockerCE.sh && ./installDockerCE.sh && rm -f installDockerCE.sh
        
        # 2.將普通用戶(hù) xxxx 加入 docker 組
        $ sudo usermod -aG docker xxxx
        
        # 3.退出終端重新登錄才擁有 docker 執(zhí)行權(quán)限

        選擇2) 下載 package 安裝

        @address https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/
        @guide https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-from-a-package

        # 通過(guò) lsb_release -a 查看是不是 xenial,對(duì)號(hào)選擇 package 下載.
        $ wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_18.06.0~ce~3-0~ubuntu_amd64.deb
        
        # Ubuntu
        $ sudo dpkg -i /path/to/package.deb
        
        # 用 dpkg 安裝完deb包,依然執(zhí)行上面 2,3 兩步,讓普通用戶(hù)擁有 docker 執(zhí)行權(quán)限.

        安裝 docker-compose

        $ sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
        $ sudo chmod +x /usr/local/bin/docker-compose

        @guide https://docs.docker.com/compose/install/#install-compose

        下載項(xiàng)目并初始化

        $ git clone https://github.com/phvia/dkc
        $ cd dkc/ && cp .env.default .env
        $ vi .env  # 編輯第一行,即本項(xiàng)目所在路徑
        $ dkc up -d # 啟動(dòng)所有服務(wù)

        網(wǎng)站目錄

        默認(rèn)您的網(wǎng)站項(xiàng)目代碼放置于 web/,可以拷貝項(xiàng)目目錄到 web/ 中。

        (當(dāng)然你可以修改 docker-compose.yml 中 volume 的映射關(guān)系,然后放置在任何地方。)

        指南

        如何自定義所有服務(wù)

        dkc up -d 使用的是 docker-compose.yml 文件,
        如果只是調(diào)整 volume/network/configuration,可以修改文件后重新運(yùn)行命令。
        docker-compose.yml 里面使用的 image 是基于 docker-compose-build.yml build 項(xiàng)使用的 Dockerfile 構(gòu)建好的。)

        所以,如果希望修改 Dockerfile 后重新構(gòu)建,可以通過(guò)運(yùn)行 dkc -f docker-compose-build.yml up --build -d 來(lái)構(gòu)建。

        如何運(yùn)行 Nginx 靜態(tài)站點(diǎn)

        修改nginx服務(wù) volumes 中 web 目錄位于主機(jī)內(nèi)的絕對(duì)路徑; 修改 ports 需要暴露的端口.

        $ vi docker-compose.yml

        修改 nginx 的配置 nginx/nginx.conf,nginx/conf.d/default.conf

        # 項(xiàng)目路徑、暴露端口等配置一般在 nginx/conf.d/default.conf
        
        $ vi nginx/conf.d/default.conf

        常用命令

        # 啟動(dòng) nginx 服務(wù)
        # 等同 docker run nginx:xxx
        
        $ dkc up -d nginx
        
        # 修改完配置都要重啟 nginx 服務(wù)
        # 等同 docker restart nginx-con
        
        $ dkc restart nginx
        
        # 停止 nginx 服務(wù)
        # 等同 docker stop nginx-con
        
        $ dkc stop nginx
        
        # 跟蹤查看 nginx 服務(wù)日志
        # 等同 docker logs -f nginx-con
        
        $ dkc logs -f --tail 20 nginx
        
        # 查看所有運(yùn)行的容器
        # 等同 docker ps
        
        $ dkc ps
        
        # 進(jìn)入 nginx 容器
        # 等同 docker exec -it nginx-con bash
        
        $ dkc exec nginx bash

        現(xiàn)在可以在瀏覽器中訪問(wèn): http://host-ip:port

        更多內(nèi)容見(jiàn) nginx/README.mdnginx/Dockerfile。

        MySQL 服務(wù)

        docker-compose.yml ports 選項(xiàng)的主機(jī)與容器開(kāi)放的端口映射關(guān)系可以修改,以增加安全性。

        # 啟動(dòng) MySQL 服務(wù),及其常用操作
        
        $ dkc up -d mysql
        $
        $ dkc logs -f --tail 20 mysql
        $
        $ dkc exec mysql bash
        $
        $ mysql -uroot -p

        導(dǎo)入本地?cái)?shù)據(jù)庫(kù)文件到容器中

        # dkc exec [options] [-e KEY=VAL...] SERVICE COMMAND [ARGS...]
        
        $ dkc exec -T mysql mysql -uroot -p123456 testdb < testdb.sql

        MYSQL_ROOT_PASSWORD 環(huán)境變量用來(lái)初始化 root 用戶(hù)密碼, 只在第一次啟動(dòng)時(shí)使用。

        一旦初始化數(shù)據(jù)文件后無(wú)法再通過(guò)設(shè)置本變量更改, 需要?jiǎng)h除 volume 之后重新啟動(dòng),或者進(jìn)入容器中更改。

        MYSQL_DATABASE 設(shè)置鏡像啟動(dòng)時(shí)新建的數(shù)據(jù)庫(kù),同樣只生效一次,只能進(jìn)容器內(nèi)更改 (或者刪除 volume)。

        更多內(nèi)容見(jiàn) mysql/README.md。

        其它:

        使用自定義的 MySQL 配置文件,例如

        The default configuration for MySQL can be found in /etc/mysql/my.cnf
        
        $ docker run --name mysql-con -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql-img-farwish:v1

        把敏感配置值放在文件中,例如

        docker run --name mysql-con -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql-img-farwish:v1
        
        目前官方鏡像只支持 MYSQL_ROOT_PASSWORD, MYSQL_ROOT_HOST, MYSQL_DATABASE, MYSQL_USER, and MYSQL_PASSWORD.

        Dump 數(shù)據(jù)庫(kù)到宿主機(jī),例如

        docker exec mysql-con sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /home/ubuntu/all-databases.sql

        使用一個(gè)已存在的數(shù)據(jù)庫(kù)

        如果啟動(dòng)MySQL容器時(shí)帶上一個(gè)包含數(shù)據(jù)庫(kù)的目錄,$MYSQL_ROOT_PASSWORD 變量不應(yīng)該放在命令行中;在任何項(xiàng)目中都該忽略此變量,然后已存在的數(shù)據(jù)庫(kù)不會(huì)以任何方式改變。

        PHP 服務(wù)

        依賴(lài) MySQL 服務(wù)。與 Web Server 配合使用時(shí),關(guān)鍵在于 nginx 配置中要指明 PHP 后端服務(wù)的地址為 php, fastcgi_pass php:9000;

        --links 不是必須的,默認(rèn)服務(wù)之間可以通過(guò)服務(wù)名相互通訊,因?yàn)?network driver 默認(rèn)使用 bridge,雖然容器間隔離,但是可以通過(guò)名稱(chēng)通信。

        --links 的格式是 SERVICE:ALIAS,也就是使用其它服務(wù)的服務(wù)名(SERVICE)和別名(ALIAS)都可以來(lái)通訊。

        當(dāng)前已支持常用擴(kuò)展(比如 pcntl sockets phpredis ...),現(xiàn)在可以在瀏覽器中訪問(wèn): http://host-ip:port/phpinfo.php

        更多內(nèi)容見(jiàn) php-fpm/README.mdphp-fpm/Dockerfile。

        Redis 服務(wù)

        需要手動(dòng)解決前兩個(gè)WARNING

        1.vm.overcommit_memory is set to 0!

        Host 切換至 root,然后按如下設(shè)置:

        $ echo vm.overcommit_memory = 1 >> /etc/sysctl.conf
        $ sysctl vm.overcommit_memory=1

        2.you have Transparent Huge Pages (THP) support enabled in your kernel.

        Host 切換至 root,然后按如下設(shè)置:

        # 注意 rc.local 里面如果有 `exit 0`,要放在它之前.
        $ echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
        $ source /etc/rc.local

        3.no config file specified, using the default config.

        已通過(guò)在 redis/Dockerfile 中使用配置文件 redis/redis.conf 解除了 WARNING,你可以修改 redis/redis.conf 的配置項(xiàng)滿足你的需要。

        4.The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

        已通過(guò)在 docker-compose.yml 中配置 sysctls 的選項(xiàng)解除了 WARNING。

        更多內(nèi)容見(jiàn) redis/README.mdredis/Dockerfile

        Web 服務(wù)

        基于PHP服務(wù)鏡像的PHP程序環(huán)境(包含 Composer 與 web項(xiàng)目目錄),具體見(jiàn) web/README.md

        Fe 服務(wù)

        基于Web服務(wù)鏡像的Node程序環(huán)境(包含 nodejs npm webpack vue-cli ...),具體見(jiàn) web/README.md

        FAQ

        phvia/dkc 能用在哪些宿主機(jī)環(huán)境

        在 Ubuntu16.04 上總是能夠 build 通過(guò)并運(yùn)行。

        其它環(huán)境暫時(shí)沒(méi)有測(cè)試數(shù)據(jù)。

        使用 COPY 還是 VOLUME

        VOLUME 是支持熱重載的,而 COPY 需要重新 build。

        VOLUME 需要跟主機(jī)掛鉤,而 COPY 直接拷貝到容器中。

        正式環(huán)境建議使用 COPY 拷貝項(xiàng)目到鏡像中,避免項(xiàng)目文件更改而影響到運(yùn)行環(huán)境。

        移除所有未使用的 volume:docker volume prune

        PHP 文件如何連接 MySQL 和 Redis

        配置的 host 填寫(xiě)服務(wù)名,port 填寫(xiě)容器中暴露的端口,非主機(jī)端口.

        幾個(gè)平常可能使用的腳本

        • ./compose_remove_all_container.sh # 停止并移除docker-compose啟動(dòng)的容器

        • ./remove_none_name_images.sh # 移除名稱(chēng)為 (即沒(méi)有名稱(chēng))的鏡像

        • ./start_all_container.sh # 使用 docker 命令逐個(gè)啟動(dòng)所有容器

        • ./stop_and_remove_all_container.sh # 使用 docker 命令逐個(gè)停止并刪除所有容器

        系列文章

        http://www.cnblogs.com/farwish/tag/Docker/

        瀏覽 39
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            超碰在线国产97 | 豪门大乱淫交全文阅读 | 蜜芽av在线观看 精品成人一区二区 | 国产三级片播放 | 久久婷婷国产麻豆91天堂 | 天堂资源最新在线 | 婷婷婷五月天 | 日本一级特黄大片色视频在线观看 | 丰满熟妇毛茸茸HD | 无人乱码一区二区三区的观看模式 |