docker 部署springcloud项目【限制容器内存、CPU】
一、首先从 docker.hub【地址:https://hub.docker.com】 中根据各自的需求 pull 对应的 openjdk镜像
######本次直接在修改后的docker镜像源中下载######
docker pull adoptopenjdk/openjdk8
二、编写Dockerfile
FROM adoptopenjdk/openjdk8 MAINTAINER gyh COPY meisooEureka_1.0.0.jar /home/meisapp/services/meisooEureka/1.0.0/meisooEureka_1.0.0.jar EXPOSE 8761 WORKDIR /home/meisapp/services/meisooEureka/1.0.0 RUN mkdir -p /home/meisapp/services/meisooEureka/1.0.0/logs && ln -s /dev/stdout /stdout.log ENTRYPOINT ["java","-jar","-Xms1024M","-Xmx1024M","/home/meisapp/services/meisooEureka/1.0.0/meisooEureka_1.0.0.jar","--spring.profiles.active=devTest"]
三、构建镜像
docker build -t gyh/openjdk8:v1.0 .
参数:
注意最后有个点,代表使用当前路径的 Dockerfile 进行构建
-t gyh/openjdk8:v1.0 给新构建的镜像取名为gyh/openjdk8:v1.0
四、由于日志数据无论什么情况都不能丢失,所以数据存在容器外部,通过映射操作,映射到容器内部,参数如下
-v hostPath:containerPath【将宿主机的路径,映射到容器内部。这个路径既可以是文件夹,也可以是文件】
五、启动容器,假设在宿主机中数据存放路径为/home/meisapp/services/meisooEureka/1.0.0/logs
docker run -d \ --name meisooEureka_1.0.0_20191211 \ -p 8761:8761 \ -p 2222:22 \ -m 1050M --memory-swap 1050M -c 512 \ -v /etc/localtime:/etc/localtime \ -v /etc/timezone:/etc/timezone \ -v /home/meisapp/services/meisooEureka/1.0.0/logs:/home/meisapp/services/meisooEureka/1.0.0/logs \ gyh/openjdk8:v1.0 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 29f71e153a73 gyh/openjdk8:v1.0 "java -jar -Xms1024M Xmx1024M /home/meisapp/services/meisooEureka/1.0.0/meisooEureka_1.0.0.jar --spring.profiles.active=devTest" 8 hours ago Up 8 hours 0.0.0.0:8761->8761/tcp, 0.0.0.0:2222->22/tcp meisooEureka_1.0.0_20191211
六、具体参数含义
-p 外部端口:容器内部端口 -m 容器内存限制,格式是数字加单位,单位可以为 b,k,m,g。最小为 4M --memory-swap 内存+交换分区大小总限制。格式同上。必须大于等于-m设置的数字 -c 设置容器CPU权重,在CPU共享场景使用 -it 标准输入输出有关 -d 后台启动 -v 文件映射[宿主机目录:容器目录] -e 设置环境变量到容器中 --name 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字 /etc/timezone和/etc/localtime,这是为了让容器的时间和时区与宿主机保持一致。默认情况下容器为 UTC 标准时间。/etc/timezone让容器时间,时区和宿主机一致。但是如果不映射/etc/localtime应用中的时区还是错的,虽然使用date -R命令查看时间和时区都正常