Flask Vue.js全栈开发|第21章:Docker容器部署
Synopsis: 第一部分我们手动启动 MySQL、Redis、Elasticsearch、Python、Nginx 等容器,第二部分使用 Docker Compose 来编排我们的服务,非常推荐大家试一下 Docker 容器来运行我们的微型博客应用,到此为止,本系列就全部完结了,感谢大家的关注,接下来将开始 Golang 微服务实战系列,期待您的加入
请确保已正确安装并启动了 Docker
服务,关于 Docker
基本使用方法,请参考: http://www.madmalls.com/blog/post/visualizing-docker-containers-and-images/
假设你已将本项目 最新完整代码
下载到 /home/www
目录下:
[root@CentOS www]# pwd /home/www [root@CentOS www]# ls -l total 12 drwxr-xr-x 5 root root 182 Apr 23 09:44 back-end drwxr-xr-x 6 root root 214 Apr 23 09:44 front-end -rw-r--r-- 1 root root 1104 Apr 23 09:44 LICENSE -rw-r--r-- 1 root root 5389 Apr 23 09:44 README.md
1. MySQL 容器
创建 MySQL
配置文件,指定字符集为 UTF-8
:
[root@CentOS www]# mkdir -p $PWD/docker/mysql/conf.d [root@CentOS www]# vim $PWD/docker/mysql/conf.d/custom.cnf 内容如下: [mysqld] character-set-server = utf8 collation-server = utf8_general_ci skip-character-set-client-handshake
注意:
utf8_general_ci
数据表中的字段值不区分大小写(ci, case insensitive),比如Madman
和madman
被认为是一样的。如果你想区分大小写,则要设置为utf8_bin
(不能设置为utf8_general_cs
,容器会无法启动)
然后将宿主机上的 配置文件
和 数据目录
链接到 MySQL 容器,这样就算后续不小心删除了此容器,数据库中的数据文件还存在于本地,下次再重新启一个 MySQL 容器即可:
[root@CentOS www]# docker run -d \ --name mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -e MYSQL_DATABASE=madblog \ -e MYSQL_USER=testuser \ -e MYSQL_PASSWORD=password \ -p 3306:3306 \ --rm \ -v $PWD/docker/mysql/conf.d:/etc/mysql/conf.d \ -v $PWD/docker/mysql/data:/var/lib/mysql \ mysql:5.6
让我们测试一下连接,再启动一个 MySQL 容器,需要先 链接
上面的 MySQL Server 容器,并设置主机名为 mysql-server
,这样 -hmysql-server
才能解析到 MySQL Server 容器所绑定的 IP 地址:
[root@CentOS www]# docker run -it --link mysql:mysql-server --rm mysql:5.6 mysql -hmysql-server -utestuser -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.25 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | madblog | +--------------------+ 2 rows in set (0.00 sec) mysql> quit Bye
2. Redis 容器
[root@CentOS www]# docker run -d \ --name redis \ -p 6379:6379 \ --rm \ -v $PWD/docker/redis/data:/data \ redis redis-server --appendonly yes
启动此容器时要运行 redis-server --appendonly yes
命令,表示启用了 Redis
数据持久性,所以指定了映射宿主机上的 $PWD/docker/redis/data
目录到容器的 /data
目录
测试连接:
[root@CentOS www]# docker run -it --link redis:redis-server --rm redis redis-cli -h redis-server redis-server:6379> keys * (empty list or set) redis-server:6379> quit
3. Elasticsearch 容器
https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
由于我们的代码中使用了 ik
分词器,所以需要在 Elasticsearch 官方提供的镜像中先安装 ik
,再保存为修改后的镜像:
# 1. 启动容器 [root@CentOS www]# docker pull docker.elastic.co/elasticsearch/elasticsearch:7.0.0 [root@CentOS www]# docker run -d \ --name elasticsearch \ -p 9200:9200 \ -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \ docker.elastic.co/elasticsearch/elasticsearch:7.0.0 # 2. 安装 IK 分词器 [root@CentOS www]# docker exec -it elasticsearch /bin/bash [root@da774b5b5d99 elasticsearch]# elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.0.0/elasticsearch-analysis-ik-7.0.0.zip .0.0.zip-> Downloading https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.0.0/elasticsearch-analysis-ik-7.0.0.zip [=================================================] 100%?? @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: plugin requires additional permissions @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * java.net.SocketPermission * connect,resolve See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html for descriptions of what these permissions allow and the associated risks. Continue with installation? [y/N]y -> Installed analysis-ik [root@da774b5b5d99 elasticsearch]# exit exit # 3. 保存为新的镜像 [root@CentOS www]# docker commit elasticsearch my-elasticsearch-ik sha256:65cca25b877d7c904c7d3b8aa1e36edd1c20e79f614e052a0918eed163f047ad # 4. 删除容器 [root@CentOS www]# docker rm -f elasticsearch elasticsearch
启动我们自己的镜像:
9 条评论
评论者的用户名
评论时间FutureSenzhong
2020-02-09T13:20:18ZFutureSenzhong FutureSenzhong
2020-02-09T13:20:47Z容器部署一直报错找不到原因求解答
Madman FutureSenzhong Author
2020-02-09T14:47:10Z检查你的后端代码,手动执行 flask db upgrade 应该是失败的,自己对比附件的最新代码
FutureSenzhong Madman
2020-02-10T04:55:00Z用的就是的代码
FutureSenzhong FutureSenzhong
2020-02-10T04:55:16Z你的最新的代码
Madman FutureSenzhong Author
2020-02-10T06:02:51Zlpchg1992
2020-03-13T14:22:35ZOday1024
2020-03-15T15:46:12Z友情提醒: 第4.2章节 Dockerfile pip安装修改为:
否则pip install cryptography==2.7时会报错
bhb603
2020-07-06T08:28:39Z请问能提供一下这份Docker教程的源码吗?