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命令查看时间和时区都正常
原文地址:https://www.cnblogs.com/faithH/p/11981227.html