在docker中部署前后端项目

一:安装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

查看容器
1.png
sudo docker start  containerID

然后进入它的base中

docker exec -it mysql(容器名) bash

接下来就可以操作了:

mysql -uroot -p
2.png

接下来操作:

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;
image.png

完成!

三:部署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了

image.png

完毕。

推荐阅读更多精彩内容