说明
包括组件
必须安装以下软件后,才可以运行
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