dkc
快速构建(LNMP+Nodejs)运行环境.
dkc在此作为docker-compose的缩写,你可以理解为 aliasdkc=docker-compose
准备安装docker选择1) 从repository安装
@guide https://docs.docker.com/istall/liux/docker-ce/ubutu/#istall-usig-the-repository
# 1.支持 Ubutu 和 CetOS 的安装脚本$ sudo wget https://raw.githubusercotet.com/farwish/delicateShell/master/support/istallDockerCE.sh && chmod +x istallDockerCE.sh && ./istallDockerCE.sh && rm -f istallDockerCE.sh# 2.将普通用户 xxxx 加入 docker 组$ sudo usermod -aG docker xxxx# 3.退出终端重新登录才拥有 docker 执行权限选择2) 下载package安装
@address https://dowload.docker.com/liux/ubutu/dists/xeial/pool/stable/amd64/@guide https://docs.docker.com/istall/liux/docker-ce/ubutu/#istall-from-a-package
# 通过 lsb_release -a 查看是不是 xeial,对号选择 package 下载.$ wget https://dowload.docker.com/liux/ubutu/dists/xeial/pool/stable/amd64/docker-ce_18.06.0~ce~3-0~ubutu_amd64.deb# Ubutu$ sudo dpkg -i /path/to/package.deb# 用 dpkg 安装完deb包,依然执行上面 2,3 两步,让普通用户拥有 docker 执行权限.安装docker-compose$ sudo curl -L https://github.com/docker/compose/releases/dowload/1.21.2/docker-compose-$(uame -s)-$(uame -m) -o /usr/local/bi/docker-compose$ sudo chmod +x /usr/local/bi/docker-compose@guide https://docs.docker.com/compose/istall/#istall-compose
下载项目并初始化$ git cloe https://github.com/phvia/dkc$ cd dkc/ && cp .ev.default .ev$ vi .ev # 编辑第一行,即本项目所在路径$ dkc up -d # 启动所有服务网站目录默认您的网站项目代码放置于 web/,可以拷贝项目目录到 web/ 中。
(当然你可以修改 docker-compose.yml 中volume的映射关系,然后放置在任何地方。)
指南如何自定义所有服务dkcup-d 使用的是 docker-compose.yml 文件,如果只是调整volume/etwork/cofiguratio,可以修改文件后重新运行命令。(docker-compose.yml 里面使用的image是基于 docker-compose-build.yml build项使用的Dockerfile构建好的。)
所以,如果希望修改Dockerfile后重新构建,可以通过运行 dkc-fdocker-compose-build.ymlup--build-d 来构建。
如何运行Ngix静态站点修改gix服务volumes中web目录位于主机内的绝对路径;修改ports需要暴露的端口.
$ vi docker-compose.yml修改gix的配置 gix/gix.cof,gix/cof.d/default.cof
# 项目路径、暴露端口等配置一般在 gix/cof.d/default.cof$ vi gix/cof.d/default.cof常用命令
# 启动 gix 服务# 等同 docker ru gix:xxx$ dkc up -d gix# 修改完配置都要重启 gix 服务# 等同 docker restart gix-co$ dkc restart gix# 停止 gix 服务# 等同 docker stop gix-co$ dkc stop gix# 跟踪查看 gix 服务日志# 等同 docker logs -f gix-co$ dkc logs -f --tail 20 gix# 查看所有运行的容器# 等同 docker ps$ dkc ps# 进入 gix 容器# 等同 docker exec -it gix-co bash$ dkc exec gix bash现在可以在浏览器中访问: https://host-ip:port
更多内容见 gix/README.md, gix/Dockerfile。
MySQL服务docker-compose.yml ports选项的主机与容器开放的端口映射关系可以修改,以增加安全性。
# 启动 MySQL 服务,及其常用操作$ dkc up -d mysql$$ dkc logs -f --tail 20 mysql$$ dkc exec mysql bash$$ mysql -uroot -p导入本地数据库文件到容器中
# dkc exec [optios] [-e KEY=VAL...] SERVICE COMMAND [ARGS...]$ dkc exec -T mysql mysql -uroot -p123456 testdb < testdb.sqlMYSQL_ROOT_PASSWORD 环境变量用来初始化root用户密码,只在第一次启动时使用。
一旦初始化数据文件后无法再通过设置本变量更改,需要删除volume之后重新启动,或者进入容器中更改。
MYSQL_DATABASE 设置镜像启动时新建的数据库,同样只生效一次,只能进容器内更改(或者删除volume)。
更多内容见 mysql/README.md。
其它:
使用自定义的MySQL配置文件,例如
The default cofiguratio for MySQL ca be foud i /etc/mysql/my.cf$ docker ru --ame mysql-co -v /my/custom:/etc/mysql/cof.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql-img-farwish:v1把敏感配置值放在文件中,例如
docker ru --ame mysql-co -e MYSQL_ROOT_PASSWORD_FILE=/ru/secrets/mysql-root -d mysql-img-farwish:v1目前官方镜像只支持 MYSQL_ROOT_PASSWORD, MYSQL_ROOT_HOST, MYSQL_DATABASE, MYSQL_USER, ad MYSQL_PASSWORD.Dump数据库到宿主机,例如
docker exec mysql-co sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /home/ubutu/all-databases.sql使用一个已存在的数据库
如果启动MySQL容器时带上一个包含数据库的目录,$MYSQL_ROOT_PASSWORD 变量不应该放在命令行中;在任何项目中都该忽略此变量,然后已存在的数据库不会以任何方式改变。PHP服务依赖MySQL服务。与WebServer配合使用时,关键在于gix配置中要指明PHP后端服务的地址为php, fastcgi_passphp:9000;
--liks不是必须的,默认服务之间可以通过服务名相互通讯,因为etworkdriver默认使用bridge,虽然容器间隔离,但是可以通过名称通信。
--liks的格式是 SERVICE:ALIAS,也就是使用其它服务的服务名(SERVICE)和别名(ALIAS)都可以来通讯。
当前已支持常用扩展(比如pctlsocketsphpredis...),现在可以在浏览器中访问: https://host-ip:port/phpifo.php
更多内容见 php-fpm/README.md, php-fpm/Dockerfile。
Redis服务需要手动解决前两个WARNING
1.vm.overcommit_memoryissetto0!
Host切换至root,然后按如下设置:
$ echo vm.overcommit_memory = 1 >> /etc/sysctl.cof$ sysctl vm.overcommit_memory=12.youhaveTrasparetHugePages(THP)supporteablediyourkerel.
Host切换至root,然后按如下设置:
# 注意 rc.local 里面如果有 `exit 0`,要放在它之前.$ echo 'echo ever > /sys/kerel/mm/trasparet_hugepage/eabled' >> /etc/rc.local$ source /etc/rc.local3.ocofigfilespecified,usigthedefaultcofig.
已通过在 redis/Dockerfile 中使用配置文件 redis/redis.cof 解除了WARNING,你可以修改 redis/redis.cof 的配置项满足你的需要。
4.TheTCPbacklogsettigof511caotbeeforcedbecause/proc/sys/et/core/somaxcoissettothelowervalueof128.
已通过在 docker-compose.yml 中配置sysctls的选项解除了WARNING。
更多内容见 redis/README.md, redis/Dockerfile。
Web服务基于PHP服务镜像的PHP程序环境(包含Composer与web项目目录),具体见 web/README.md
Fe服务基于Web服务镜像的Node程序环境(包含odejspmwebpackvue-cli...),具体见 web/README.md
FAQphvia/dkc能用在哪些宿主机环境在Ubutu16.04上总是能够build通过并运行。
其它环境暂时没有测试数据。
使用COPY还是VOLUMEVOLUME是支持热重载的,而COPY需要重新build。
VOLUME需要跟主机挂钩,而COPY直接拷贝到容器中。
正式环境建议使用COPY拷贝项目到镜像中,避免项目文件更改而影响到运行环境。
移除所有未使用的volume:dockervolumeprue
PHP文件如何连接MySQL和Redis配置的host填写服务名,port填写容器中暴露的端口,非主机端口.
几个平常可能使用的脚本./compose_remove_all_cotaier.sh#停止并移除docker-compose启动的容器
./remove_oe_ame_images.sh#移除名称为(即没有名称)的镜像
./start_all_cotaier.sh#使用 docker 命令逐个启动所有容器
./stop_ad_remove_all_cotaier.sh#使用 docker 命令逐个停止并删除所有容器
系列文章https://www.cblogs.com/farwish/tag/Docker/
评论