文件结构以fdfs上传文件应用为例:
fdfs --jar 文件夹 --lib 依赖包 --xxx.jar jar文件 --Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明 --startup.sh jar文件执行脚本
Dockerfile内容
From java8:latest # 将运行脚本加入到容器中 COPY startup.sh /shell/startup.sh # 指定容器时区:东八区 ENV TZ=Asia/Shanghai # 中文日志乱码 ENV LANG en_HK.utf8 # 权限和时区 创建jar包目录 RUN chmod +x /shell/startup.sh \ && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \ && echo $TZ > /etc/timezone \ && mkdir jar # 挂载 jar目录 VOLUME ["/jar"] # 进行运行脚本 CMD [ "sh","/shell/startup.sh" ]
注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:
FROM centos RUN yum -y install wget RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos RUN yum -y install wget \ && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \ && tar -xvf redis.tar.gz
对于dockerfile中的From java8:latest是自己构建的镜像,如何拷贝本地镜像如下:
https://blog.csdn.net/guoqingru0311/article/details/124212885 将镜像打包成本地文件 指令:docker save 镜像id > 文件名.tar 加载本地文件到镜像: 指令:docker load < 文件名.tar 执行完上述语句后,查看本地镜像,会看到新加载的镜像名字和标签都是none,利用该镜像的id对名字和标签重新命名即可: 指令:docker tag 镜像id 镜像名:标签 docker tag eba167b421f9 java8:latest 创建容器 指令:docker run -it --name java8 172825a55619 /bin/bash java8 :容器名称 172825a55619 :镜像id
startup.sh内容
#!/bin/bash # 服务名 server_name="fdfs" kill -s 9 `ps -aux | grep $server_name | awk '{print $2}'` # 切换到jar目录启动,目的配置外置 cd /jar # 启动 java -jar -Duser.timezone=GMT+08 -Dloader.path=lib \ -XX:+HeapDumpOnOutOfMemoryError \ -Xms512m -Xmx512m \ $server_name.jar
构建镜像和启动容器
docker build -t fdfs . docker run -di --net=host --restart=always --name=fdfs -v /etc/localtime:/etc/localtime -v /usr/local/docker/service/fdfs/jar:/jar --privileged=true fdfs