描述:工作中需要写Dockerfile制作镜像,发现生成的镜像都是700M左右,为了更小更方便的制作镜像,看了一些文件,其中高效编写Dockerfile的几条准则,仅为参考。
下面是自己摸索出来的一个方法,简单有效:
步骤:下载官方最小镜像,然后运行,经过修改参数,配置,时区等内容,后用这个容器创建一个新的自己的镜像。
具体步骤:以tomcat为例:
第一步骤下载镜像:
官方默认的tomcat,大小是147M,时区是UTC是协调世界时(Universal Time Coordinated),不是我们需要的,而CST却同时可以代表如下 4 个不同的时区,我们只需要配置China Standard Time就OK了。
Central Standard Time (USA) UT-6:00
Central Standard Time (Australia) UT+9:30
China Standard Time UT+8:00
Cuba Standard Time UT-4:00
docker pull tomcat:7-alpine
第二步骤启动tomcat镜像,并指定容器和主机的映射端口:
docker run -p 8080:8080 tomcat:7-alpine
正常启动后,可以访问:localhost:8080
第三步骤进入容器,查看默认时间:
#查看运行的全部容器
sai$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
949fdc1d4001 tomcat:7-alpine "catalina.sh run" 3 minutes ago Up 3 minutes 0.0.0.0:8080->8080/tcp sad_thompson
#拿到CONTAINER ID 然后进入正在运行容器并以命令行交互
sai:$ docker exec -it 949fdc1d4001 /bin/sh
#进入容器后,查看容器时间date
/usr/local/tomcat # date
Wed Aug 1 07:59:21 UTC 2018
/usr/local/tomcat #
第四步骤修改容器默认时间UTC修改成CST:
Shanghai时区时间,在centos中/usr/share/zoneinfo/Asia可以拿的,百度盘也放了一份
链接:https://pan.baidu.com/s/1-Zc_nttBCcYaA2Ul9A_s1Q 密码:xwme
#首先从主机复制时间文件到容器sudo docker cp host_path containerID:container_path
docker cp Shanghai 949fdc1d4001:/etc/localtime
#然后再修改时区,注意,要进入容器内执行:
echo "Asia/Shanghai" > /etc/timezone
#然后再查询下
/usr/local/tomcat # cat /etc/timezone
第五步骤,Docker commit 命令 根据已修改的容器创建一个新的自己的镜像:
先普及下知识
#制作镜像-a 是作者,-m是描述
sai:~ ws$ docker commit -a "Honglei" -m "change time zone:CST" 949fdc1d4001 honglei/mydemo/tomcat7:latest
sha256:4355e2ccc12ebf8c2295e2fcded052152877359e292636f55eed3ed6d64c131d
#查看制作后的镜像,以后再运行或者上传自己的镜像仓库,显示时间就是CST了。
sai:~ ws$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
honglei/mydemo/tomcat7 latest 4355e2ccc12e 5 seconds ago 147MB
tomcat 7-alpine 7ec7cfc3ee20 15 hours ago 147MB
以后在这个tomcat中运行项目,日志时间也是CST,不会再有时差。