[phvia/dkc] Docker Compose 快速構建(LNMP+Node)運行環境



快速構建(LNMP+Node)運行環境.

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

准備

安裝 docker


選擇1) 從 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.將普通用戶 xxxx 加入 docker 組
$ sudo usermod -aG docker xxxx

# 3.退出終端重新登錄才擁有 docker 執行權限

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

選擇2) 下載 package 安裝

用 dpkg 安裝完deb包,依然執行上面 2,3 兩步.

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

安裝 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

下載項目初始化


$ git clone https://github.com/phvia/dkc
$ cd dkc/ && cp .env.default .env

修改網站目錄


默認您的網站項目代碼放置於 web/,當然你可以修改 docker-compose.yml 中 volume 的映射關系,然后放置在任何地方。

可以拷貝項目目錄到 web/ 中。

指南

如何啟動所有服務


修改 docker-compose.yml volume 配置項中 dkc/ 在你主機上的正確路徑,然后啟動所有:

$ dkc up --build -d

如何運行 Nginx 靜態站點


修改nginx服務 volumes 中 web 目錄位於主機內的絕對路徑; 修改 ports 需要暴露的端口.

$ vi docker-compose.yml

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

# 項目路徑、暴露端口等配置一般在 nginx/conf.d/default.conf

$ vi nginx/conf.d/default.conf

常用命令

# 啟動 nginx 服務
# 等同 docker run nginx:xxx

$ dkc up -d nginx

# 修改完配置都要重啟 nginx 服務
# 等同 docker restart nginx-con

$ dkc restart nginx

# 停止 nginx 服務
# 等同 docker stop nginx-con

$ dkc stop nginx

# 跟蹤查看 nginx 服務日志
# 等同 docker logs -f nginx-con

$ dkc logs -f --tail 20 nginx

# 查看所有運行的容器
# 等同 docker ps

$ dkc ps

# 進入 nginx 容器
# 等同 docker exec -it nginx-con bash

$ dkc exec nginx bash

現在可以在瀏覽器中訪問: http://ip

更多內容見 nginx/README.mdnginx/Dockerfile

MySQL 服務


docker-compose.yml ports 選項的主機與容器開放的端口映射關系可以修改,以增加安全性。

# 啟動 MySQL 服務,及其常用操作

$ dkc up -d mysql
$
$ dkc logs -f --tail 20 mysql
$
$ dkc exec mysql bash
$
$ mysql -uroot -p

使用自定義的 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 數據庫到宿主機,例如

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

使用一個已存在的數據庫

如果啟動MySQL容器時帶上一個包含數據庫的目錄,$MYSQL_ROOT_PASSWORD 變量不應該放在命令行中;在任何項目中都該忽略此變量,然后已存在的數據庫不會以任何方式改變。

導入本地數據庫文件到容器中

# dkc exec [options] [-e KEY=VAL...] SERVICE COMMAND [ARGS...]

$ dkc exec -T mysql mysql -uroot -p123456 testdb < testdb.sql

MYSQL_ROOT_PASSWORD 環境變量用來初始化 root 用戶密碼, 只在第一次啟動時使用.

一旦初始化數據文件后無法再通過設置本變量更改, 需要刪除 volume 之后重新啟動,或者進入容器中更改.

MYSQL_DATABASE 設置鏡像啟動時新建的數據庫,同樣只生效一次,只能進容器內更改 (或者刪除 volume).

更多內容見 mysql/Dockerfile

PHP 服務


依賴 MySQL 服務。與 Web Server 配合使用時,關鍵在於 nginx 配置中要指明 PHP 后端服務的地址為 php-address, fastcgi_pass php-address:9000;

而 php-address 是在 nginx 服務中配置的 --links 項。

已安裝常用擴展以及 Composer,現在可以在瀏覽器中訪問: http://ip/phpinfo.php

更多內容見 php-fpm/README.mdphp-fpm/Dockerfile

Redis 服務


解決四個WARNING

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

默認已通過在 redis/Dockerfile 中使用配置文件 redis/redis.conf 解除了 WARNING,詳細見子目錄內 README,你可以修改 redis/redis.conf 的配置項滿足你的需要。

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

默認已通過在 docker-compose.yml 中配置 sysctls 的選項解除了 WARNING。

3.vm.overcommit_memory is set to 0!

需要你切換至 root,然后按如下設置:

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

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

需要你切換至 root,然后按如下設置:

$ echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
$ source /etc/rc.local

更多內容見 redis/README.mdredis/Dockerfile

FAQ

使用 COPY 還是 VOLUME


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

VOLUME 需要跟主機掛鈎,而 COPY 直接拷貝到容器中。

正式環境建議使用 COPY 拷貝項目到鏡像中,避免項目文件更改而影響到運行環境。

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

PHP 文件如何連接 MySQL 和 Redis


配置的 host 填寫服務名,port 填寫容器中暴露的端口,非主機端口.

幾個平常可能使用的腳本


  • ./compose_remove_all_container.sh # 停止並移除docker-compose啟動的容器
  • ./remove_none_name_images.sh # 移除名稱為 (即沒有名稱)的鏡像
  • ./start_all_container.sh # 使用 docker 命令逐個啟動所有容器
  • ./stop_and_remove_all_container.sh # 使用 docker 命令逐個停止並刪除所有容器

系列文章


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

Project:  https://github.com/phvia/dkc

Link: https://www.cnblogs.com/farwish/p/9307671.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM