准备工作
准备构建好的 jar包
Dockerfile (跟jar包放一个位置)
# 环境变量 容器启动后仍保留
#ENV JAVA_OPTS="-Xms248M -Xmx512M -XX:PermSize=248M -XX:MaxPermSize=512M"
# 指定容器运行时的参数,容器启动后就失效了,必须在from之前定义
# ARG JAVA_OPTS="-Xms248M -Xmx512M -XX:PermSize=248M -XX:MaxPermSize=512M"
# 以什么镜像为前提 由于是springboot应用所以需要现有java环境
FROM java:8
# 镜像构建时就会执行命令
#RUN ["/bin/bash", "-c", "echo hello"]
#容器启动时运行的命令
# 指定这个容器启动的时候要运行的命令,不可以追加命令
#CMD
#作者
MAINTAINER jan
## 容器的工作地址 相当于cd
WORKDIR /app/mblog
## 把本地的包添加到工作目录下并改名 还有一个copy原理是一样的
ADD blog-latest.jar app.jar
## 挂载数据卷到宿主机中,容器不存储数据
## 关于VOLUME如果想了解更深看这个 https://cloud.tencent.com/developer/article/1896358
VOLUME /tmp
LABEL version="1.0" description="牧码人博客" by="牧码人"
## 指定容器运行时的user
USER root
## 镜像触发器
## 当所构建的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发
## ONBUILD RUN /usr/local/bin/python-build --dir /app/src
## 暴露的端口
EXPOSE 8080
# 指定运行容器启动过程执行命令,覆盖CMD参数
# 指定这个容器启动的时候要运行的命令,可以追加命令(与CMD的区别)
ENTRYPOINT ["java","-jar","/app/mblog/app.jar"]
docker-compose
docker-compose.yml
非必须,由于本人喜欢用docker-compose所以才使用了
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.
Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用一个YAML文件来配置应用程序的服务。然后,使用一个命令创建并启动配置中的所有服务
Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用一个YAML文件来配置应用程序的服务。然后,使用一个命令创建并启动配置中的所有服务
说人话:大概就是使用docker-compose可以管理多容器的docker程序,使用一个yaml文件配置下就可以。举个例子:一个简单的java程序需要jdk环境,数据库环境,redis环境。如果不使用docker-compose你就需要多次运行。如果使用docker-compose你只需要在yaml配置好,然后docker-compose up 一下。多个应用便会同时启动。 本篇示例只讲了docker-compose管理单个容器的情况,主要是了解一下yaml的配置。使用yaml配置个人觉得比较优雅,如果不使用它那么你的docker启动命令是这样的 docker run --net=host -p 8269:8080 -v /app/mblog/storage/:/app/mblog/storage/ -d mblog:latest 参数一多这个docker命令便非常长了。
# 版本根据你的docker版本来的,目前主流应该都是3.几的版本
version: '3.8
services:
mblog:
## 启动前,先执行build构建镜像
## 等同于 docker build -t mblog:latest .
build:
context: .
dockerfile: ./Dockerfile
# 镜像名
image: mblog:latest
# 容器名
container_name: mblog
# 自动重启
restart: always
#端口映射
ports:
- 8269:8080
# 环境变量
environment:
- spring.profiles.active=mysql
- JVM_OPTS=-server -Xmx218M -Xms1024M -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+HeapDumpOnOutOfMemoryError -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xloggc:/logs/gc.log
# 目录映射
volumes:
- /app/mblog/storage/:/app/mblog/storage/
启动命令
原生docker方式制作镜像并启动
- 构建镜像命令:
docker build -t mblog:latest .
- 启动命令
docker run --net=host -p 8269:8080 -v /app/mblog/storage/:/app/mblog/storage/ -d mblog:latest
- docker-compose方式启动项目
docker-compose up -d --build
随后docker ps
查看容器是否启动成功即可