写在前面
这学期上了《软件过程管理》课,课程要求是做一个商城系统,并且要使用相应的项目管理工具。经过小组同学的努力,最终项目已经在本地写好了,需要部署到老师给的服务器上。然后部署的活儿就交给我啦。
第一想法:下一个tomcat,设置端口8081,再下一个mysql,设置端口3307。(因为有其它同学也在用这个服务器,所以端口号得改一下)
然而!!毕竟刚学了docker,所以决定,用tomcat容器和mysql容器来做这件事。
第一步:下载并启动容器
参考我自己写的博客:进行下面的步骤:
1、docker pull mysql:5.7
下载5.7版本的docker镜像
2、docker run -p 3307:3306 --name mysql -v /root/group26/mydocker/mysql/conf:/etc/mysql/conf.d -v /root/group26/mydocker/mysql/logs:/logs -v /root/group26/mydocker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
启动mysql容器
3、docker pull tomcat
下载tomcat镜像
4、docker run -it -p 8081:8080 --name tomcat --link mysql:dbhost -v /root/group26/tomcat/webapps:/usr/local/tomcat/webapps tomcat
启动tomcat容器
5、将war包放到对应的webapps目录下,这时记得修改jdbc的连接为这样:String DB_URL = "jdbc:mysql://mysql:3306/tmsshopping?serverTimezone=UTC&useSSL=false&userUnicode=true&allowPublicKeyRetrieval=true";
因为我们mysql容器的名字就是mysql,所以地址我们写mysql:3306
,注意不是mysql:3307
哦,因为容器对应的端口是3306的。
第二步:解决数据库中文无法输入问题
点开网页一看,中文全部没有了,再检查一下数据库,发现所有应该是中文的地方都是空的,不知道是变成了空格还是怎样。
1、在网上找了一圈,发现是要修改配置文件为这样:
# dvice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
character-set-server=utf8
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
default-character-set=utf8
其实就是在[mysqld]下面添加character-set-server=utf8
,[client]下面添加default-character-set=utf8
。
【注意】这个配置文件要命名成my.cnf
,并且要放在容器内的/etc
文件夹下。
2、这个时候进入mysql容器,命令是docker exec -it mysql /bin/bash
,然后进入mysql,输入命令查看字符集,show variables like '%char%'
发现其它的都是urf8,character_set_database
为latin1。
使用ALTER DATABASE tmsshopping CHARACTER SET utf8
这样就全是utf8了。
3、然而!!还是不行!!最后又看到什么终端编码什么的,也就是,最好不要直接复制sql语句来建立数据库,而是source tmsshopping.sql
命令来建库。
所以,把tmsshopping.sql文件放到mysql容器的/bin目录下,建库,最后终于成功!!
总结
docker是个好东西啊,不然的话还是配置tomcat的环境变量啊什么的。使用docker容器后,tomcat容器暴露8080端口(宿主机的8081),mysql暴露3306端口(宿主机的3307),然后将两个容器进行连接就可以了!!