使用Docker将服务部署到阿里云的服务器上

写在前面

  • 为什么会用Docker?

我在大二的暑假接触了Go语言。并随之得知了其两大杀手应用:Docker和Kubernetes。非常幸运的是,Docker推出了Docker Desktop(Docker For Windlinux系统安装ow) 给安装了WSL2(Windows Subsystem for Linux )的WIndows用户使用java编译器。这得以让当时并不熟悉L容器inux的我成功的Maven越过Linux学习和使用Docker。
在初次下载Docker Desktop后,它的欢迎界面会让你拉取一个“docker/getting-started”的镜像。这个镜像是一个入门教程,我的学习也是从这个教程开始的。伴随着使用的频繁和深入,我也渐渐了windows无法连接到打印机解教程的大部分内容。只有最后一章节:docker-compose我还尚未实践过测试技术第三版贾民平课后答案。而Mis作业的出现正好让我弥补这一空白!

使用Docker将服务部署到阿里云的服务器上

如果你有安装Do网络安全知识cker,并有一定的基础的话。那么欢迎你跟随我的脚步将你的服务部署到服务器上!

服务器

  • 通过学生优惠,你可以在阿里云上免费申请一台为期2周的服务器。

下图为我用学生特权申请到的服务器,并安装了Ubuntu20.04的操作系统。

使用Docker将服务部署到阿里云的服务器上

远程操控

  • 接下来你需要一个用于连接远程服务器的工具,如xshell等。

使用Docker将服务部署到阿里云的服务器上

Docker的安装

  • 接下来你需要在你的服务器上安装Docker和Docker-compose。测试技术第三版

具体的细节你可以到官测试技术应用实例有哪些方文档中获取:
Ubuntu Install do容器技术cker
Ubuntuwindows install Docker cojavascriptmpose
注:如果你实在对英文非常的不感冒的话java环境变量配置,你可以用谷前端开发培训机构推荐歌浏览器打开并使用它的翻译功能。

使用Docker将服务部署到阿里云的服务器上

前后端打包

前端的在老师提供的笔记中以有所提及,这里不再赘述。接下来我们主要讲后端如何打包:
由于服务器上的环境和本网络安全大赛地开发环境会略有不同,所以在这里我们需要针对kubernetes不同的环境提供kubernetes认证不同的配置文件:

使用Docker将服务部署到阿里云的服务器上

其中application-dev.yml, application-test.yml分别对应开发环境和测试环境(这里我将测试环境打包放到线上了,所以没建多一个application-pro.yml(单纯maven打包偷懒)。)

使用Docker将服务部署到阿里云的服务器上

你需要在act前端开发ive中指定linux命令springboot启动的配置文件。如指定dev并在本地运行代码时,mavejavan就会根据applicwindows10激活密钥ation-dev.yml中的内容启动该项目。


application-dev.yml

server:
port: 9200
servlet:
context-path: /iron-man
# druid数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
# 数据源
url: jdbc:mysql://localhost:3306/misp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 避免sql监控被过滤
filters: stat
# mybatis配置
mybatis:
# 项目POJO包
typeAliasesPackage: iron.scau.*.entity
# Mapper文件
mapperLocations: classpath*:mapper/*Mapper.xml
# mybatis配置文件
configLocation: classpath:mybatis/mybatis-config.

application-tjava怎么读est.yml

server:
port: 9200
servlet:
context-path: /iron-man
# druid数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
# 数据源
url: jdbc:mysql://172.1.0.10:3306/misp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 避免sql监控被过滤
filters: stat
# mybatis配置
mybatis:
# 项目POJO包
typeAliasesPackage: iron.scau.*.entity
# Mapper文件
mapperLocations: classpath*:mapper/*Mapper.xml
# mybatis配置文件
configLocation: classpath:mybatis/mybatis-config.xml

application-test.yml与dev的不同之处只是容器英文在mysql的urlmaven仓库有所不同。这个我们稍后会解释。


接下来修改你的根目录下的pom文件添测试技术应用实例有哪些加上如下kubernetes部署的代码:

 <profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<package.environment>dev</package.environment>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<package.environment>test</package.environment>
</properties>
</profile>
</profiles>

上述是告知maven你有多个配置文件,之后你就可以用maven依据不同的配置文件打包。


使用Docker将服务部署到阿里云的服务器上


刷新后点开右上侧折叠的maven菜单,你就可以看到我们的配置生效了!
接下来你需要选中web模块,然后执行mvn clean install。在idea中你可以通过点击图中的"M"字样调出maven的命令清单。然windows10后依次点击mvn clean前端开发和后端开发有什么区别、mvn install。kubernetes翻译

使用Docker将服务部署到阿里云的服务器上


在idea提示Build Successed 后,你便可以在web模块的targetlinux操作系统基础知识目录下看到生成的jar 包:

使用Docker将服务部署到阿里云的服务器上

如果你不放心的话,可以在当网络安全大赛前目录下执windows许可证即将过期怎么办行 java -jar xxx.jar来看看是否启动了这dockerhub个项目。

撰写Dockerfile为前后端打包镜像

  • 有关Dockerfile的撰写和学习可以参照一些开源项目并maven依赖配合官方文档的解释进行。笔者这里给出的也不完善,仅供参考。kubernetes认证但是我会尽量的给出相应的注释!!
  • 前端(Maven在根目录下创建Dockerfile)
# 基于nginx镜像构建
FROM nginx
MAINTAINER alita@stu.scau.edu.cn
ENV LANG en_US.UTF-8
# 容器内tmp目录下的数据将以匿名卷的形式挂载到宿主机
VOLUME /tmp
# 以下是nginx的配置
RUN echo "server {  \
listen       80; \
location ^~ /iron-man { \
proxy_pass              http://172.1.0.20:9200/iron-man/; \
} \
#解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 \
location / { \
root   /var/www/html/; \
index  index.html index.htm; \
if (!-e \$request_filename) { \
rewrite ^(.*)\$ /index.html?s=\$1 last; \
break; \
} \
} \
access_log  /var/log/nginx/access.log ; \
} " > /etc/nginx/conf.d/default.conf \
&&  mkdir  -p  /var/www \
&&  mkdir -p /var/www/html
# 将打包生成的dist文件拷贝到容器中相应目录下
ADD dist/ /var/www/html/
# 暴露80端口(nginx默认监听80端口)
EXPOSE 80
EXPOSE 443

在项目maven命令的根目录下运行docker build -t 仓库前缀/镜像容器技术名:版本号 .
如 docker build -t intellinan/hell:1.0 .

  • 后端(在web模块右键创建一个Dockerfile文件)
# 以配有jdk8的apline(一种Linux系统)为基础镜像构建
FROM bladex/alpine-java:openjdk8-openj9_cn_slim
MAINTAINER alita@stu.scau.edu.cn
# 创建文件夹
RUN mkdir -p /intellinan/mis
# 指定工作目录
WORKDIR /intellinan/mis
EXPOSE 9200
# 将生成的jar包添加到工作目录下并重命名
ADD ./target/aotu-man-web.jar ./app.jar
# 运行jar包
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
# 指定配置文件参数和输出日志
CMD ["--spring.profiles.active=test", "catalina.out 2>&1"]

在Web模块的项目下运行:docker bu网络安全教育ild -t intel测试技术应用实例有哪些linan/damn:1.0 .


在服务器上用docker-compose组合镜像:

上传已经构建好的前后端镜像:

在Docker Hub上注册一个免费账号,确定自己的名称。这个名称就是你镜容器技术像仓库的前缀。然后建立两个仓库,其名字要和你本地镜像容器内的压力产生的应力的名字相对应。maven配置如你Docker Hub的名称是 superbaby。假设你创建了一个仓库用来存储后端生成的镜像,名称是mis-java。那么你在本地打包后端镜像时其名称应该是 superbaby/mis-java

创建一个网络

回到服务器上,确保docker在运行的情况下使用以下命令:
docker network create --subnet 17windows10激活密钥2.1.0.0/24 alitmaven安装与配置a
这条命令为docker声明了一个名为alita,供容器之间通信的网络。如果你学过企业组网的话,那么我相信你应该很快就能明白172.1.0.0/24的含义。

编写docker-compose.yml

如下:

version: '2.2'
services:
mysql:
image: mysql:5.7
container_name: mysql
# 持久化数据库数据
volumes:
- /home/mysql:/var/lib/mysql/
networks:
alita:
# 声明自己的IP地址(如果你细心的话你会发现这个IP地址正好是我在application-test.yml中mysql的url中的IP地址
ipv4_address: 172.1.0.10
ports:
- "3306:3306"
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max_connections=3000
environment:
MYSQL_ROOT_PASSWORD: 123456
TZ: Asia/Shanghai
backend:
# 确保名字和版本号和你上传上Docker Hub的一致。
image: intellinan/mis-java:2.0
container_name: Jmis
ports:
- "9200:9200"
networks:
alita:
ipv4_address: 172.1.0.20
front:
image: intellinan/mis-vue:2.0
container_name: Vmis
ports:
- "8080:80"
networks:
alita:
ipv4_address: 172.1.0.30

将上述文件传到服务器上(你也可以直接在服务器上编写)。保存后在该目录下输入一下代码
dockerjava编译器-compose up -d
如果顺利的话你会看到以下输出:

使用Docker将服务部署到阿里云的服务器上

防火墙

如果这个javaee时候你在浏览器访问服务器的IP地址的8080端口的话你会发现访问超时了。这是因为服务器本身的安全策略的限制。
登录阿里云 -> 来到控制台

使用Docker将服务部署到阿里云的服务器上


使用Docker将服务部署到阿里云的服务器上


使用Docker将服务部署到阿里云的服务器上


恭喜你!到这里为止你就大功告成了!!!
接下来鼓起勇气访问你的服务器看看效果吧!

点一下看看吧!

使用Docker将服务部署到阿里云的服务器上


使用Docker将服务部署到阿里云的服务器上