1.构建jar包
2.构建自定义的镜像dockerfile
vim Dockerfile
# 使用 OpenJDK 17 作为基础镜像,该镜像包含 JDK 17 环境
# 该镜像适用于需要编译或运行基于 JDK 17 的 Java 应用程序
FROM openjdk:8-jdk-alpine
# 设置容器中的工作目录为 /app
# 所有后续操作(如文件复制、命令执行等)都会基于该目录进行
WORKDIR /app
# 将本地的 JAR 文件 复制到容器的 /app 目录下
# COPY 命令将指定路径的文件从构建上下文复制到镜像中的目标路径
# 将jar包放入/app目录下,并重新命名为app.jar
ADD ruoyi-admin.jar ruoyi.jar
# 暴露容器的 8201端口,使得主机能够与容器的指定端口进行通信
# 通常用于 Web 服务或应用程序监听端口
# 可以根据应用需要更改为其他端口号
EXPOSE 8081
# 定义容器启动时的默认命令,使用 ENTRYPOINT 设置为 java -jar 来启动应用
# 这行命令会在容器启动时运行 Java 应用,加载指定的 JAR 文件
# 如果没有其他命令传入,ENTRYPOINT 将执行默认的 java -jar jar包名称
ENTRYPOINT ["java","-jar"]
CMD ["app.jar"]
# 相当于 java -jar xxx.jar
构建镜像 docker build -t ruoyidemo .
(镜像名称)【注意有.表示当前目录】
启动容器 docker run --name ruoyidemo -p 8081:8081 -d
(容器名称)
1.【报错】“docker run” requires at least 1 argument. 少了镜像名称
docker run -d --name ruoyi -p 8081:8081 ruoyidemo
name后面是容器名称,ruoyidemo是镜像名称
2.端口占用
确实被占用了,又去改dockerfile里的改成8082
3.再运行,可能之前运行错误的时候,末尾写的ruoyi,已创建了个8081端口的错的ruoyi,于是删除docker rm ruoyi。重新再run,成功。
docker run -d --name ruoyi -p 8082:8082 --network hmall ruoyidemo
简单的两个命令,卡我两小时qvq
4.下一步解决项目和mysql、redis互相访问
6379是redis 8081是emqx mysql是3306
# 1.首先通过命令创建一个网络
docker network create hmall
# 2.然后查看网络
docker network ls
# 结果:
NETWORK ID NAME DRIVER SCOPE
639bc44d0a87 bridge bridge local
403f16ec62a2 hmall bridge local
0dc0f72a0fbb host host local
cd8d3e8df47b none null local
# 其中,除了hmall以外,其它都是默认的网络
# 3.让dd和mysql都加入该网络,注意,在加入网络时可以通过--alias给容器起别名
# 这样该网络内的其它容器可以用别名互相访问!
# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名
docker network connect hmall mysql --alias db
# 3.2.db容器,也就是我们的java项目
docker network connect hmall dd
# 4.进入dd容器,尝试利用别名访问db
# 4.1.进入容器
docker exec -it dd bash
# 4.2.用db别名访问
ping db
# 结果
PING db (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=2 ttl=64 time=0.056 ms
# 4.3.用容器名访问
ping mysql
# 结果:
PING mysql (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=2 ttl=64 time=0.054 ms