1、自动部署四个容器,分别为Nginx容器,Mysql容器,Redis容器,Python容器,一键运行配置
2、这是本人docker地址: hub.docker.com/r/zhaozn91
3、是用Dockerfile配置的,启动镜像自动运行里面/home/start.sh文件,可以在运行的时候替换
4、get_docker.sh 文件内容
# 更新源
apt-get update
# 安装docker
apt-get install -y docker.io
# 从我的docker拉去四个镜像,都是公共镜像,可以随便拉取
docker pull zhaozn91/mysql:latest
docker pull zhaozn91/redis:ubuntu
docker pull zhaozn91/python3.5:ubuntu
docker pull zhaozn91/nginx:ubuntu
# 初始化docker镜像
sh init_docker.sh
5、init_docker.sh 文件内容
# 关闭所有的容器
docker stop $(docker ps -a -q)
# 删除所有的容器
docker rm $(docker ps -a -q)
# 启动Mysql容器 -d(后台启动) -p 配置端口 -v 配置映射把服务器的文件映射到容器内(对于mysql来说使用相对路径把容器内的sql数据映射到服务器上)
# --name 取得别名 zhaozn91/mysql:latest 镜像名称
docker run -d -p 3306:3306 -v docker_mysql:/var/lib/mysql --name=my_mysql zhaozn91/mysql:latest
# redis我没有配置把数据映射到本地路径,需要的可以按照mysql自己配置
docker run -d -p 6379:6379 --name=my_redis zhaozn91/redis:ubuntu
# python容器多出来一个 --link=--link=my_mysql:db 相当于把两个容器关联可以使python容器访问mysql容器,my_mysql就是自己命名的别名 db就是在python容器中自己为my_mysql取得别名, 在Python程序中把连接数据库host=db就可以了,redis相同操作
docker run -d -v /home/docker/init_python.sh:/home/start.sh -v /home/XViews2:/home/XViews2 --name=my_python --link=my_redis:redis --link=my_mysql:db zhaozn91/python3.5:ubuntu
# nginx容器
docker run -d -p 80:80 -v /home/xview/:/home/xview/ --name=my_nginx --link my_python:my_python zhaozn91/nginx:ubuntu
6、Mysql容器中没有创建数据库以及各种表结构,我是在执行python程序的时候判断mysql数据库是否有表结构,没有则创建数据库及对应表结构,但是也可以在启动mysql时候创建数据库及结构,可以-v 映射到容器内的/home/start.sh 进行配置替换
7、Redis容器没有配置密码,直接可以连接,要进行修改配置都可以映射替换/home/start.sh进行配置替换
8、Nginx容器,创建镜像的时候我已经把default文件进行拷贝了,把我需要的默认配置进行替换了,这个根据个人nginx配置,进行映射替换就好,容器内替换置/etc/nginx/sites-available/
9、Python容器,我自己也是映射的配置文件,配置如下:
# mysql容器内mysql可能还没有起来,所以默认睡10秒,保证mysql正常运行
sleep 10
# 查询数据库是否有这个tables
my_sql=$(mysql -h db -u root --password=密码 -N -e "SELECT COUNT(*) FROM information_schema.TABLES WHERE table_schema = 'tables名称'; ")
# 判断是否存在,存在则不创建数据库及相应表数据,不存则创建数据库及表结构
if [ $my_sql -eq 0 ]
then echo "CREATE DATABASE IF NOT EXISTS (tables名称) DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;USE mysql;GRANT ALL PRIVILEGES ON *.*TO 'root'@'%' IDENTIFIED BY '设置外部访问密码' WITH GRANT OPTION;FLUSH PRIVILEGES;" | mysql -h db -u root --password=密码
# 切换到自己映射python文件的目录下
cd /XXXX/XXXX/
# 我是初始化了数据库管理员权限,根据个人需要自己配置就好
python3 init_db_admin.py
echo '初始化数据库,创建超级管理员用户成功!'
fi
#rm -rf /usr/bin/celery
#ln -s /usr/local/python3/bin/celery /usr/bin/celery
# 删掉进程 celery
pkill celery
# 删掉进程 python3
pkill python3
# 运行自己程序就好
xxxxxxxx
# 添加前台运行,以保证容器不断开
tail -f /home/XViews2/log/info.log
10、目前还没有配置Uwsgi,过两天配置完会进行更新。