一:安装docker
首先,根据docker的官网,找到对应的操作系统进行安装docker。
对应操作系统
这里给我的是Ubuntu,点进入之后在Get Docker Engine - Ubuntu (Community)下点击网址。
Ubuntu
根据步骤进行安装,然后他会自行启动。
如果是centos系统,我们可以直接使用
yum install docker
启动后设置为开机启动
systemctl start docker
systemctl enable docker
二:安装mysql
在dockerhub上找到mysql的安装方式:dockerhub
输入sudo docker pull mysql
然后可以通过docker images进行查看镜像。
接下来需要在容器中运行mysql。
注意: 这里需要注意,根据dockerhub mysql的运行来说:这里不仅要端口映射,后台运行,还得设置它的密码。
那我们怎么做呢?
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
实际上,应该是这么做:
sudo docker run --name demomysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
三:avicat ssh连接中ssh tunnel:the negotiation of encryption is failed
在navicat使用ssh通道连接服务器端数据库时,会出现
ssh tunnel:the negotiation of encryption is failed 或者ssh tunnel:server does not support diffie-hellman-group1-sha1 forkeyexchange的问题。
这是因为服务器关于ssh的加密设置没有和navicat协调好。
需要做以下操作:
1.进入文件
sudo vim /etc/ssh/sshd_config
2.在文件的末尾添加
KexAlgorithms diffie-hellman-group1-sha1
Ciphers 3des-cbc
3.保存,然后运行
ssh-keygen -A
service sshd restart
四:mysql 1251
很遗憾,这次我下的是8.0.15版本,所以Navicat依旧连接不上,那么我还得继续解决这个问题,残念...
那么我们还是看看..
进入怎么进入mysql的容器吧。
sudo docker ps -a
查看容器sudo docker start containerID
然后进入它的base中
docker exec -it mysql(容器名) bash
接下来就可以操作了:
mysql -uroot -p
接下来操作:
1.对远程连接进行授权
mysql> GRANT ALL ON *.* TO 'root'@'%';
2.更改密码的加密规则
mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
'root' 为你自己定义的用户名
'localhost' 指的是用户开放的IP,可以是'localhost'(仅本机访问,相当于127.0.0.1),可以是具体的'...'(具体某一IP),也可以是 '%' (所有IP均可访问)
'password' 是你使用的用户密码
3.刷新权限
mysql> flush privileges;
完成!
三:部署spring boot项目
这里首先将项目生成一个jar包。
1.生成镜像
在服务器上新建一个文件夹。 比如我就在/home/user下建立了一个docker文件夹。然后将jar包放入其中。
进行第二步,写一个Dockerfile文件:建议查看这个
FROM java:8
VOLUME /tmp
ADD cms-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
和jar包放入一个文件夹。
然后使用docker build命令生成镜像:
sudo docker build -t xxx(镜像名字) .
注意:这里的.是不能漏的,表示在当前文件夹下(所以你一定要cd进这个jar包所在文件夹)
然后运行这个镜像
sudo docker run --net=host -d xxx
注意一定要使用host网络连接方式,否则项目会连接不上mysql
这是因为docker会自动给每个容器分配ip,但是项目里配置的mysql地址是localhost,在容器内连接localhost是连接容器本身而不是宿主机的localhost,所以一直找不到mysql。所以采用host的网络方式将容器与宿主机共用一个Network Namespace,这样容器内localhost就是宿主机的localhost了
完毕。