一、项目运行的实质
1.Spring Boot 默认内置了一个 Web 容器(比如 Tomcat),启动后就会监听某个端口,比如:
server:
port: 8090
只要运行了java -jar app.jar就自动启动了一个http服务在服务器的8090端口
2.你本地localhost或者云服务器放行了这个端口,所以你能通过https://127.0.0.1:8090访问到Spring Boot项目
3.Spring Boot默认监听的是0.0.0.0,所以外部浏览器访问https://127.0.0.1:8090能被接收
server:
address: 0.0.0.0 # 或者干脆不写,默认就是这个
4.当你直接通过浏览器打开index.html,你会发现localhost:63342
二、打包项目
先点击clean 再点击install,也可以在终端上执行mvn clean install
然后,项目栏会生成一个target目录,目录下有一个项目的jar包
三、构建镜像
将工程jar包构建成镜像
一、使用Dockerfile构建镜像
Dockerfile:
# 选择基础镜像
FROM openjdk:17-jdk-slim
# 作者
MAINTAINER author
# 配置
ENV PARAMS=""
# 时区
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 将jar包添加到容器中
ADD app.jar /app.jar
#容器启动时运行的命令
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS app.jar $PARAMS"]
docker build -t author/app:1.0 -f Dockerfile .
二、本地构建镜像
但是这里构建镜像时有可能因为电脑版本不同会出现一些问题:Mac电脑可以直接将以上命令保存成一个build.sh文件,然后点击绿色三角会自动构建镜像到本地。然后通过docker push 推送到dockerhub。
三、云服务器构建镜像
将你的Dockerfile、build.sh和jar包上传到云服务器
执行./build.sh即可构建镜像,然后执行docker images查看是否构建成功。
四、上传镜像
一、方法一:上传到dockerhub
首先需要再dockerhub上创建一个仓库,namespace需要和你执行docker build 里的author一样,仓库名称和镜像名称一样。
从本地点击push to hub推送到dockerhub
由于我本地wsl和dockerdesk系统原因一直安装不成功,云服务器不知道为什么也不能推送到hub,所以使用了方法二——上传到阿里云。后续运行容器时再从阿里云拉取镜像。
二、方法二:从阿里云拉取镜像
1.首先仍然是创建一个同命名空间同仓库名称的仓库
2.然后需要绑定一下你代码仓库地址的账号
3.根据操作指南将本地或者云服务器上的镜像推送到阿里云(注意记住自己的阿里云密码)
登录打标签然后push(操作指南里有)
五、拉取镜像
一.安装环境
#Docker Compose版本
version: '3'
services:
#定义一个名为Redis的服务
redis:
#拉取容器的地址
image:
container_name: redis
restart: always
#设置容器的主机名
hostname: redis
#特权模式允许容器访问宿主机的硬件资源
privileged: true
#将容器内部的端口映射到宿主机
ports:
- 16379:6379
#卷挂载——将宿主机的./redis/redis.conf挂载到容器的路径
volumes:
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf
#指定容器启动时运行的命令
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- my-network
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 10s
timeout: 5s
retries: 3
redis-admin:
image:
container_name: redis-admin
hostname: redis-commander
restart: always
ports:
- 8081:8081
#设置容器的环境变量
environment:
- REDIS_HOSTS=local:redis:6379
- HTTP_USER=admin
- HTTP_PASSWORD=admin
- LANG=C.UTF-8
- LANGUAGE=C.UTF-8
- LC_ALL=C.UTF-8
networks:
- my-network
depends_on:
redis:
condition: service_healthy
#桥接网络允许容器之间通过网络通信
networks:
my-network:
driver: bridge
docker-compose -f docker-compose-environment-aliyun.yml up -d
二.安装软件
yourcontainerName:
#填写你的镜像,一般是阿里云给你的特定字符串/namespace/镜像名称:版本号
image:
container_name:
restart: on-failure
ports:
# 宿主机端口:容器内应用端口
- "8090:8090"
#上一步安装的环境的一些配置,根据自己配置的环境来填写
environment:
- TZ=PRC
- SERVER_PORT=8090
- SPRING_DATASOURCE_USERNAME=
- SPRING_DATASOURCE_PASSWORD=
- SPRING_DATASOURCE_URL=
- SPRING_DATASOURCE_DRIVER_CLASS_NAME=
- REDIS_SDK_CONFIG_HOST=redis
- REDIS_SDK_CONFIG_PORT=6379
volumes:
- ./log:/data/log
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
- my-network
docker-compose -f docker-compose-app-v1.0.yml up -d
如果有哪里不理解也可以在评论区提出问题!