快速构建(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

[phvia/dkc] Docker Compose 快速构建(LNMP+Node)运行环境的更多相关文章

  1. 使用 Docker Compose 快速构建 TiDB 集群

    本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...

  2. Docker Compose 一键部署LNMP

    Docker Compose 一键部署LNMP 目录结构 [root@localhost ~]# tree compose_lnmp/ compose_lnmp/ ├── docker-compose ...

  3. docker&flask快速构建服务接口(二)

    系列其他内容 docker快速创建轻量级的可移植的容器✓ docker&flask快速构建服务接口✓ docker&uwsgi高性能WSGI服务器生产部署必备 docker&g ...

  4. docker:Dockerfile构建LNMP平台

    docker:Dockerfile构建LNMP平台   1.dockerfile介绍  Dockerfile是Docker用来构建镜像的文本文件,包含自定义的指令和格式.可以通过docker buil ...

  5. 从零入门 Serverless | 教你 7 步快速构建 GitLab 持续集成环境

    作者 | 存诚 阿里云弹性计算团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...

  6. .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行

    本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...

  7. 快速构建springmvc+spring+swagger2环境

    快速构建springmvc+spring+swagger2环境 开发工具:Intellij idea               jdk: 1.8 开发步骤: 1.创建maven工程,如图建立工程结构 ...

  8. windows下9款一键快速搭建PHP本地运行环境的好工具(含php7.0环境)

    推荐几款一键快速搭建PHP本地运行环境的好工具(含php7.0及apache,nigix,mysql) 首推phpstudy2016和wampServer3.0.6     理由支持php7.0 目前 ...

  9. 利用Docker Compose快速搭建本地测试环境

    前言 Compose是一个定义和运行多个Docker应用的工具,用一个YAML(dockder-compose.yml)文件就能配置我们的应用.然后用一个简单命令就能启动所有的服务.Compose编排 ...

随机推荐

  1. DevExpress GridControl控件行内新增、编辑、删除添加选择框

    以下为内容以图片居多1234表示点击顺序 先新增一行 操作和新增数据行一样 打开ColumnEdit  选择new ButtenEdit  new上方会出现一个系统命名的button 命名可以更改必须 ...

  2. ORA-00257: archiver error. Connect internal only, until freed……

    今天给客户测 试问题,让客户把数据发过来了.解压缩后一看,他们还是用的oracle 815版本的(他们exp导出时,带了导出日志,从导出日志中看出来是oracle 815版本的),不过没有关系,低版本 ...

  3. H3C BFD MAD检测方式的IRF典型配置举例

    一.组网需求 由于网络规模迅速扩大,当前中心交换机(Device A)转发能力已经不能满足需求,现需要在保护现有投资的基础上将网络转发能力提高一倍,并要求网络易管理.易维护. 二.组网图 三.配置思路 ...

  4. 关于C6678的网口问题

    1.C6678 Keystone1架构的GbE switch subsystem如图所示: 2.从图中可以看到MAC层与物理层PHY芯片的连接接口是由SGMII+SerDES构成,SGMII是以太网M ...

  5. C++指针速记

    基本原则:指针类型变量存储的就是地址! 1.数组名就是数组首元素的地址** int age[3]; int* p = age; 2.使用new操作符实际上是向操作系统申请一块内存(包含类型信息),返回 ...

  6. Excel与Google Sheets中实现线性规划求解

    很久没更新过APS系列文章了,这段时间项目工作确实非常紧,所以只能抽点时间学习一下运筹学的入门知识,算是为以后的APS项目积累点基础.看了一些运筹学的书(都是科普级别的)发现原来我目前面对的很多排产. ...

  7. Optaplanner终于支持多线程并行运行 - Multithreaded incremental solving

    Optaplanner 7.9.0.Final之前,启动引擎开始对一个Problem进行规划的时候,只能是单线程进行的.也就是说,当引擎对每一个possible solution进行分数计算的过程中, ...

  8. Ubuntu16.04下安装Hyperledger Fabric 1.0.0

    系统环境 * Ubuntu: 16.04 * Go: 1.9.2 * NodeJS: v6.12.0 * Docker: 17.09.0-ce * HyperLedger Fabric: 1.0.0 ...

  9. struct2depth 记录

    把效果图放在前面 03.28 handle_motion  False architecture    simple joint_encoder  False depth_normalization  ...

  10. 一个故事带你理解if __name__ == '__main__'

    如果你刚刚接触python,相信会在看别人的程序的时候会遇到if __name__ == '__main__'酱紫的语法,如果当时没看懂现在也一知半解的话,看下去,本文可以帮你解决这个问题. 大家都知 ...