Windows下安装Docker需要WSL2及Hyper-v(Windows家庭版没有)
Linux下安装Docker:参考官方文档(Install Docker Engine | Docker Documentation)根据自己的子系统进行安装。
本人由于Windows中的Hyper-v有问题,选择了使用阿里云服务器建立了远程的Linux服务器,并安装了Ubuntu作为子系统。
配置好Docker之后,别忘了设置云服务器的安全组,开放响应的容器端口。
如图:
1SpringBoot项目在打包成Jar之前要确保其能正确运行
2.打包前要核对配置是否正确,如开发环境和测试环境的切换等
3.DockerFile要在项目根目录下,如图
4.DockerFile配置如下
# 基础镜像 开发所使用的Java版本 本项目为Java17 FROM a581957a54d9 # 维护者信息 添加信息 MAINTAINER ac #挂载卷 冒号前为宿主机地址 冒号后为需要挂载的卷 VOLUME /myconfig/webapp/tmp:/tmp # 设置容器时区为当前时区 无需改动 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone # 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下 根据自己的项目进行修改 ADD target/dockerdemo.jar app.jar # 容器启动执行命令 这个使用指定生效的配置文件用的可以不加 ("--spring.profiles.active=test") ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"] # 声明容器提供服务端口 根据自己的情况修改 EXPOSE 8080
1.启动mysql容器
//启动 mysql docker run -d --name=mysql-server -p 3306:3306 -v /home/user/myconfig/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.23
-d
:以后台模式运行容器。
--name
:指定容器的名称为mysql-server
。
-p
:将宿主机的3306端口映射到容器的3306端口,以便在宿主机上访问MySQL服务。
-v
:将宿主机的/home/user/myconfig/mysql
目录挂载到容器的/var/lib/mysql
目录,以便在容器内持久化MySQL数据。
-e
:设置MySQL的环境变量,这里设置MySQL的root用户密码为123456
。
mysql:8.0.23
:指定要运行的MySQL 8.0.23镜像。
2.启动 SpringBoot容器
docker run --name webapp -d -p 8080:8080 -v mywebapp:/var/lib/webapp springboot
--name
:指定容器的名称为 webapp
。
-d
:以后台模式运行容器。
-p
:将宿主机的 8080
端口映射到容器的 8080
端口,以便在宿主机上访问应用程序。
-v
:将宿主机的 mywebapp
目录挂载到容器的 /var/lib/webapp
目录,以便在容器内持久化应用程序数据和配置文件。
springboot
:指定要运行的 Spring Boot Web 应用程序的镜像。
3.启动 redis
docker run -p 6379:6379 --name myredis -v /home/user/myconfig/redis/redis.conf:/etc/redis/redis.conf -v /home/user/myconfig/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
-p
:将宿主机的 6379
端口映射到容器的 6379
端口,以便在宿主机上访问 Redis 服务。
--name
:指定容器的名称为 myredis
。
-v
:将宿主机的 /home/user/myconfig/redis/redis.conf
文件挂载到容器的 /etc/redis/redis.conf
文件,以便在容器内使用自定义的 Redis 配置文件。
-v
:将宿主机的 /home/user/myconfig/redis/data
目录挂载到容器的 /data
目录,以便在容器内持久化 Redis 数据。
-d
:以后台模式运行容器。
redis
:指定要运行的 Redis 镜像。
redis-server /etc/redis/redis.conf
:启动 Redis 服务,并使用 /etc/redis/redis.conf
配置文件。
--appendonly yes
:启用 Redis 的持久化功能,以保证数据不会因为故障而丢失。
4.启动 nginx
docker run -p 80:80 --name nginx -v //home/user/myconfig/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/user/myconfig/nginx/log:/var/log/nginx -v /home/user/myconfig/nginx/html:/usr/share/nginx/html -d nginx
-p
:将宿主机的 80
端口映射到容器的 80
端口,以便在宿主机上访问 Nginx 服务。
--name
:指定容器的名称为 nginx
。
-v
:将宿主机的 /home/user/myconfig/nginx/nginx.conf
文件挂载到容器的 /etc/nginx/nginx.conf
文件,以便在容器内使用自定义的 Nginx 配置文件。
-v
:将宿主机的 /home/user/myconfig/nginx/log
目录挂载到容器的 /var/log/nginx
目录,以便在容器内持久化 Nginx 日志文件。
-v
:将宿主机的 /home/user/myconfig/nginx/html
目录挂载到容器的 /usr/share/nginx/html
目录,以便在容器内持久化 Nginx 静态文件。
-d
:以后台模式运行容器。
nginx
:指定要运行的 Nginx 镜像。
我目前使用的配置
version: "3"
services:
nginx:
image: nginx
#restart: on-failure
container_name: nginx
ports:- "80:80"
volumes:
- /myconfig/nginx/nginx.conf:/etc/nginx/nginx.conf
- /myconfig/nginx/log:/var/log/nginx
- /myconfig/nginx/html:/usr/share/nginx/html
mysql:
image: mysql:8.0.23
# restart: always
ports:
- "3306:3306"
volumes:
- /myconfig/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
container_name: mysql-server
webapp:
image: springboot
# restart: always
ports:
- "8080:8080"
volumes:
- /myconfig/webapp/tmp:/tmp
- /myconfig/webapp/upload:/upload
container_name: webapp
redis:
image: redis:latest
# restart: always
ports:
- "6379:6379"
volumes:
- /myconfig/redis/redis.conf:/etc/redis/redis.conf
- /myconfig/redis/data:/data
- /myconfig/lib:/myconfig/lib
command: [ "redis-server", "/etc/redis/redis.conf", "--appendonly", "yes","--requirepass ","myredis123" ]
container_name: redis-service
可选择全部启动,或部分启动,如下