快速构建(LNMP+Node)运行环境.php
dkc 在此做为 docker-compose 的缩写,你能够理解为 alias dkc=docker-compose
html
选择1) 从 repository 安装mysql
# 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-repositorylinux
选择2) 下载 package 安装nginx
用 dpkg 安装完deb包,依然执行上面 2,3 两步.git
@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/github
$ 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-composeweb
$ git clone https://github.com/phvia/dkc $ cd dkc/ && cp .env.default .env
默认您的网站项目代码放置于 web/
,固然你能够修改 docker-compose.yml
中 volume 的映射关系,而后放置在任何地方。redis
能够拷贝项目目录到 web/
中。sql
修改 docker-compose.yml
volume 配置项中 dkc/
在你主机上的正确路径,而后启动全部:
$ dkc up --build -d
修改nginx服务 volumes 中 web 目录位于主机内的绝对路径; 修改 ports 须要暴露的端口.
$ vi docker-compose.yml
修改 nginx 的配置 nginx/nginx.conf
,nginx/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.md
, nginx/Dockerfile
。
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
。
依赖 MySQL 服务。与 Web Server 配合使用时,关键在于 nginx 配置中要指明 PHP 后端服务的地址为 php-address, fastcgi_pass php-address:9000;
而 php-address 是在 nginx 服务中配置的 --links 项。
已安装经常使用扩展以及 Composer,如今能够在浏览器中访问: http://ip/phpinfo.php
更多内容见 php-fpm/README.md
, php-fpm/Dockerfile
。
解决四个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.md
, redis/Dockerfile
。
VOLUME 是支持热重载的,而 COPY 须要从新 build。
VOLUME 须要跟主机挂钩,而 COPY 直接拷贝到容器中。
正式环境建议使用 COPY 拷贝项目到镜像中,避免项目文件更改而影响到运行环境。
移除全部未使用的 volume:docker volume prune
配置的 host 填写服务名,port 填写容器中暴露的端口,非主机端口.
docker
命令逐个启动全部容器docker
命令逐个中止并删除全部容器Project: https://github.com/phvia/dkc