一、首先从 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命令查看时间和时区都正常