flask+mysql的Docker 部署

一、命令行方式+dockerfile部署。

1️⃣ 部署mysql容器
docker pull mysql #拉取mysql镜像
docker run --name mysql -v /Users/zhaotengwei/Desktop/mysql:/database -p 6666:3306 -e MYSQL_ROOT_PASSWORD=woaini123.. -d mysql

创建一个容器名字叫做mysql
-v 挂载本地目录与容器内的目录,用:区分。冒号前面是本地宿主机目录,后面的是容器内的目录。如果/database不存在的话会自动创建。
挂载好了之后就可以实现本地与容器内目录的互联。比如你在挂载的本地目录里新增一个文件。那么容器内的那个目录也会相应的增加这个文件。
-p 6666:3306 端口映射 :前是本地端口,后是容器端口。 这样设置好之后,那么你连接宿主机上6666端口就可以访问容器内的3306端口了。(6666我随便设的)
下面的Navicat就可以连接了。
-e MYSQL_ROOT_PASSWORD=woaini123.. 设置环境变量 ,也就是设置数据库root密码,我没有设置用户,所以用的root。
-d 后台运行。
最后 的mysql 是镜像名称。

这样运行之后就有了一个mysql容器在运行了。
2️⃣配置mysql并且创建数据库。
单单有这个容器是无法连接上mysql的。Navicat会提示连接失败。
mysql 8.0 默认使用 caching_sha2_password 身份验证机制;客户端不支持新的加密方式。
解决方案:
修改用户(root)的加密方式。
这里看上一篇docker(三)里有讲。

接下来遇到的问题是容器mysql的中文乱码问题。
https://blog.csdn.net/m0_37639542/article/details/72852875这一篇讲的很详细
简单列举一下步骤:
1.docker exec -ti xxx(容器id) /bin/bash #进入容器
2.mysql -u root -p #进入mysql
3.mysql>SHOW VARIABLES LIKE 'character_set_%';//查看数据库字符集
基本上都如图所示:默认就是瑞典latin1

  1. SHOW VARIABLES LIKE 'collation_%';

    图上的第一个 connection 就是我们通过workbench等客户端连接的时候指定的编码。
    外部访问数据乱码的问题就出在这个connection连接层上

5.接下来我做了两件事来解决这个问题:
第一步:

第二步:
修改配置文件
配置文件在etc/mysql/mysql.conf.d/mysql.cnf这个文件里头 (容器目录)
要自己安装vim
apt-get updata
apt-get install vim
修改结果:

最后Navicat导出主机上的sql数据库,在连接的容器数据库中载入sql文件创建容器中的数据库。
mysql 容器部分完成。

3️⃣部署flask 容器。
flask我用的dockerfile部署的。。
1.在你的web项目中touch一个dockerfile。
项目结构:

dockerfile 内容:

WORKDIR 指定工作目录
格式为 WORKDIR <工作目录路径> 。如该目录不存在,WORKDIR 会帮你建立目录。
使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,最好不要在RUN中用cd手动切换目录。
COPY . /app 复制当前目录的所有文件到/app目录下。
dockerfile编写好之后进入dockerfile所在的目录执行
docker build -t flask . #根据dockerfile创建一个叫flask的镜像。
最后
docker run --name web -p 5000:5000 --link mysql:mysql -d flask 创建容器并与mysql容器link.

大功告成,flask可以访问到mysql数据库了。

猜你喜欢

转载自www.cnblogs.com/plusUltra/p/10911661.html