[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.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
。
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.md
, php-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.md
, redis/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
命令逐个停止并删除所有容器
系列文章
Project: https://github.com/phvia/dkc
Link: https://www.cnblogs.com/farwish/p/9307671.html
[phvia/dkc] Docker Compose 快速构建(LNMP+Node)运行环境的更多相关文章
- 使用 Docker Compose 快速构建 TiDB 集群
本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...
- Docker Compose 一键部署LNMP
Docker Compose 一键部署LNMP 目录结构 [root@localhost ~]# tree compose_lnmp/ compose_lnmp/ ├── docker-compose ...
- docker&flask快速构建服务接口(二)
系列其他内容 docker快速创建轻量级的可移植的容器✓ docker&flask快速构建服务接口✓ docker&uwsgi高性能WSGI服务器生产部署必备 docker&g ...
- docker:Dockerfile构建LNMP平台
docker:Dockerfile构建LNMP平台 1.dockerfile介绍 Dockerfile是Docker用来构建镜像的文本文件,包含自定义的指令和格式.可以通过docker buil ...
- 从零入门 Serverless | 教你 7 步快速构建 GitLab 持续集成环境
作者 | 存诚 阿里云弹性计算团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...
- .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...
- 快速构建springmvc+spring+swagger2环境
快速构建springmvc+spring+swagger2环境 开发工具:Intellij idea jdk: 1.8 开发步骤: 1.创建maven工程,如图建立工程结构 ...
- windows下9款一键快速搭建PHP本地运行环境的好工具(含php7.0环境)
推荐几款一键快速搭建PHP本地运行环境的好工具(含php7.0及apache,nigix,mysql) 首推phpstudy2016和wampServer3.0.6 理由支持php7.0 目前 ...
- 利用Docker Compose快速搭建本地测试环境
前言 Compose是一个定义和运行多个Docker应用的工具,用一个YAML(dockder-compose.yml)文件就能配置我们的应用.然后用一个简单命令就能启动所有的服务.Compose编排 ...
随机推荐
- ES6新增的数据类型Map和Set。
Javascript的默认对象表示方式 {} ,即一组键值对. 但是Javascript的对象有个小问题,就是键必须是字符串.但实际上Number或者其他数据类型作为键也是非常合理的. 为了解决这个问 ...
- ubuntu安装yaf
ubuntu 下PHP安装yaf扩展,需要先安装其他软件 sudo apt-get install libncurses5-dev libpcre3-dev pcre-devel -y 然后再执行 p ...
- Vbox隐藏虚拟机,实现后台运行
Vbox隐藏虚拟机,实现后台运行 1.进入vBox安装位置的命令行 D:\Program Files\VirtualBox> 2.执行命令: .\VBoxManage startvm Xp_ ...
- Azure CosmosDB (9) Unique Key Constraints
<Windows Azure Platform 系列文章目录> 在Azure Cosmos DB中,还支持Unique Key Constraints(唯一键约束). 我们可以在Azure ...
- listener.starting()源码探究
容器启动时,监听器调用starting方法,本质是找到匹配的监听器,广播事件,开始监听 上节对寻找匹配监听器做了分析,其是这个过程比较重要的部分,本文开始监听,反而不是那么复杂,如下: 找匹配监听器就 ...
- C89 和 C99 标准比较
注1: GCC支持C99, 通过 --std=c99 命令行参数开启,如: 代码:gcc --std=c99 test.c 注2:FFMPEG使用的是C99.而VC支持的是C89(不支持C99) ...
- UEFI引导过程及windows引导修复
UEFI启动是一种新的主板引导项.传统引导方式就是Legacy模式. CSM的选项是UEFI模拟Legacy模式启动,选中后则可使用Legacy模式启动机器. Legacy模式仅支持传统的MBR分区, ...
- SSM框架-初学Mybatis框架
SSM(Spring+SpringMVC+Mybatis)是目前项目开发比较流行的一套组合框架,而Mybatis是负责数据库操作的那部分框架,具体 我也说不上来 传统的JDBC操作比较冗长而繁琐,而用 ...
- 修改Linux主机名
如果安装时没有设置,一般默认主机名为localhost.localdomain. 通过以下方式修改成自己设置的主机名: 1. vi /etc/sysconfig/network NETWORKING= ...
- NOIAC41 最短路(线性基)
/* 暴力可以st表维护线性基, 从而复杂度两个log 实际上我们可以离线来做, 并且记录可行最右值, 就是一个log的了 */ #include<cstdio> #include< ...