用docker开发php,使用Docker建立PHP开发环境

说明

包括组件

必须安装以下软件后,才可以运行

MySQL说明

连接地址

devops-mysql:3306

帐号

user:root

pwd:root

客户端

docker run -it --link mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

导出SQL

docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql

Postgresql

帐号

user:postgres

pwd:postgres

Memcached

帐号

pwd:root

Redis

帐号

pwd:root

RabbitMQ

帐号

user:root

pwd:root

Adminer

访问地址

Mongo

Mongo 增加管理员帐号

$ docker exec -it some-mongo mongo admin

connecting to: admin

> db.createUser({ user: 'jsmith', pwd: 'some-initial-password', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });

Successfully added user: {

"user" : "jsmith",

"roles" : [

{

"role" : "userAdminAnyDatabase",

"db" : "admin"

}

]

}

构建$./build.sh

启动$./start.sh

关闭$./stop.sh

创建APP$./create-vhost.sh

代码存放在 apps 目录下

删除APP$./remove-vhost.sh

重启APP容器$./restart-vhost.sh

命令

创建基础环境 build.sh#!/bin/bash

## load images from docker-registry

images=(zookeeper kafka mysql postgres mongo memcached redis elk rabbitmq kibana httpd-php)

forimage in ${imagesdo

is_exists=$(docker images | grep ${image})if [ !"$is_exists"]; then

echo'pulling image ${image}';

docker pull$imagefi

done

## load images for location

for file in ./images/*

do

if test -f$filethen

echo"Loading Image:$file"docker load -i${file}fi

done

## build

name=devops

passwd=root

result=$(docker ps -a | grep "$name-")if [ !"$result"]; then

# run --restart=always

docker run --restart=always --name$name-zookeeper -p 2181:2181-p 2888:2888-p 3888:3888-v"$PWD/zookeeper/conf":/conf-v"$PWD/zookeeper/data":/data-d zookeeper

docker run --restart=always --name$name-kafka -p 9092:9092-v /var/run/docker.sock:/var/run/docker.sock--link$name-zookeeper -e KAFKA_CREATE_TOPICS="$name:1:1"-e KAFKA_ZOOKEEPER_CONNECT="$name-zookeeper:2181"-e KAFKA_ADVERTISED_HOST_NAME="$name-kafka"-d kafka

docker run --restart=always --name$name-mysql -p 3306:3306-v"$PWD/mysql/conf":/etc/mysql-v"$PWD/mysql/data":/var/lib/mysql-e MYSQL_ROOT_PASSWORD=$passwd-d mysql

docker run --restart=always --name$name-postgres -v"$PWD/postgres/data":/var/lib/postgresql/data-e POSTGRES_PASSWORD=$passwd-d postgres

docker run --restart=always --name$name-mongo -v"$PWD/mongo/configdb":/data/configdb-v"$PWD/mongo/db":/data/db-d mongo --storageEngine wiredTiger --auth

docker run --restart=always --name$name-memcached -d memcached

docker run --restart=always --name$name-redis -v"$PWD/redis/conf":/usr/local/etc/redis-v"$PWD/redis/data":/data-d redis

docker run --restart=always --name$name-rabbitmq -v"$PWD/rabbitmq/data":/var/lib/rabbitmq-e RABBITMQ_ERLANG_COOKIE=devops-rabbitmq -e RABBITMQ_DEFAULT_USER=rabbitmq -e RABBITMQ_DEFAULT_PASS=$passwd-d rabbitmq

docker run --restart=always --name$name-elk -p 5601:5601-p 9200:9200-p 5044:5044\

-v"$PWD/elasticsearch/etc":/etc/elasticsearch\

-v"$PWD/elasticsearch/config":/opt/elasticsearch/config\

-v"$PWD/elasticsearch/data":/var/lib/elasticsearch\

-v"$PWD/elasticsearch/log":/var/log/elasticsearch\

-v"$PWD/elasticsearch/plugins":/opt/elasticsearch/plugins\

-v"$PWD/logstash/etc":/etc/logstash\

-v"$PWD/logstash/config":/opt/logstash/config\

-v"$PWD/logstash/data":/opt/logstash/data\

-v"$PWD/logstash/log":/var/log/logstash\

-v"$PWD/kibana/config":/opt/kibana/config\

-v"$PWD/kibana/plugins":/opt/kibana/plugins\

-v"$PWD/kibana/data":/opt/kibana/data\

-v"$PWD/kibana/log":/var/log/kibana\

-d elk:5.6.1docker run --restart=always --name$name-adminer -p 8080:8080\

--link$name-mysql:$name-mysql \

--link$name-mysql-slave-1:$name-mysql-slave-1 \

--link$name-mysql-slave-2:$name-mysql-slave-2 \

--link$name-postgres:$name-postgres \

--link$name-mongo:$name-mongo \

--link$name-memcached:$name-memcached \

--link$name-redis:$name-redis \

--link$name-elk:$name-elk \

--link$name-rabbitmq:$name-rabbitmq \

-e ADMINER_DESIGN='nette'\

-d adminer

else

echo"Devops Already Exists!"exit 0

fi

删除基础环境 remove.sh#!/bin/bash

read -p "Are you sure you want to clean the devops [YES/NO]:" accept

## onley devops

#if [ "$accept" == "YES" ]; then

# echo 'cleaning...'

# docker ps | grep "devops-" | awk '{print $1}' | xargs docker stop

# docker ps -a | grep "devops-" | awk '{print $1}' | xargs docker rm

# echo 'cleaned'

#fi

## ALL

if [ "$accept" == "YES" ]; thenecho 'removing...'

docker stop $(docker ps -a | grep devops | awk '{print $1}')

docker rm $(docker ps -a | grep devops | awk '{print $1}')

echo 'successfully'

fi

启动 start.sh#!/bin/bash

name=devops

images=(zookeeper kafka mysql mysql-slave-1 mysql-slave-2 postgres mongo memcached redis elk rabbitmq adminer)

forimage in ${imagesdo

echo"docker start$name-$image"docker start$name-$imagedone

停止 stop.sh#!/bin/bash

## only devops

#name=devops

#images=(zookeeper kafka mysql postgres mongo memcached redis elk rabbitmq kibana apache-php)

#for image in ${images

#do

# docker start $name-$image

#done

## all

docker stop $(docker ps -a -q)

创建虚拟主机 create-vhost.sh#!/bin/bash

read -p "Please Input The Vhost Name:" vhost

if [ ! -n "$vhost" ]; thenecho "Please Input The Vhost Name"

exit0

firead -p "Please Input The Vport:" vport

if [ ! -n "$vport" ]; thenecho "Please Input The Vport"

exit0

else

ifgrep '^[[:digit:]]*$' <<< "$vport";thenecho '';

elseecho 'Error Port!'

exit0

fiport_pid=`/usr/sbin/lsof -i :$vport|grep -v "PID" | awk '{print $2}'`

if [ "$port_pid" != "" ];thenecho "Port Already Used!"

exit0

fi

finame=devops

if [ ! -d "$PWD/apache/$vhost-sites" ]; thenmkdir $PWD/apache/$vhost-sites

cp ./apache/conf/default.conf ./apache/$vhost-sites/default.conf

#sed -i "" "s/html/html\/web/g" ./apache/$vhost-sites/default.conf

sed -i "s/domain/${vhost}/g" ./apache/$vhost-sites/default.conf

sed -i "s/\/access/\/${vhost}-access/g" ./apache/$vhost-sites/default.conf

sed -i "s/\/error/\/${vhost}-error/g" ./apache/$vhost-sites/default.conf

fi

if [ ! -d "$PWD/apps/$vhost" ]; thenmkdir $PWD/apps/$vhost

fi

## docker

docker run --restart=always --name $vhost-apache-php -p $vport:80 \

-v "$PWD/apache/$vhost-sites":/etc/apache2/sites-enabled \

-v "$PWD/apache/logs":/var/log/apache2 \

-v "$PWD/apps/$vhost":/var/www/html \

-v "$PWD/php":/usr/local/etc/php \

--link $name-mysql:$name-mysql \

--link $name-postgres:$name-postgres \

--link $name-mongo:$name-mongo \

--link $name-memcached:$name-memcached \

--link $name-redis:$name-redis \

--link $name-elk:$name-elk \

--link $name-rabbitmq:$name-rabbitmq \

-d apache-php:5.6

清理虚拟主机 remove-vhost.sh#!/bin/bash

read -p "Please Input The Vhost Name:" vhost

if [ ! -n "$vhost" ]; thenecho "Please Input The Vhost Name"

exit0

elseresult=$(docker ps -a | grep "$vhost-apache-php")

if [ ! "$result" ]; thenecho "The Vhost Is Not Exists!"

exit0

elsedocker stop $vhost-apache-php

docker rm $vhost-apache-php

rm -rf ./apache/$vhost-sites

rm ./apache/logs/$vhost-access.log

rm ./apache/logs/$vhost-error.log

#为了安全期间,不自动删除代码,请手动删除

#rm -rf ./apps/$vhost

fi

fi

重启虚拟主机 restart-vhost.sh#!/bin/bash

read -p "Please Input The Vhost Name:" vhost

if [ ! -n "$vhost" ]; thenecho "Please Input The Vhost Name"

exit0

elsedocker ps -a | grep "$vhost-apache-php" | awk '{print $1}' | xargs docker restart

fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值