Docker 容器化部署实践之Dockerfile

网友投稿 259 2022-10-22

Docker 容器化部署实践之Dockerfile

就前面两篇文章​​Docker 容器化部署实践--入门​​​,​​Docker容器化部署实践Docker Compose​​,我讲了Docker常用命令的使用,通过docker-compose.yml文件进行Docker容器化的编排。

这其中我们基本都是直接Docker pull进行镜像拉取的。我们如果是使用一些基础组件,直接拉取官方当然是很方便,比如nginx,redis,mongo等等。

但是我们应用服务基本会做一些构建操作,做一些定制化操作,安装一些我们需要的特定包。所以今天我们来聊一下Docker的镜像制作,使用Dockerfile进行镜像的构建。

一个例子

为了更好的理解,我们这儿以 ​​hub.docker.com​​ 的官方​redis​进行为例进行讲解。注释请看命令后面。

ENTRYPOINT和CMD的区别是:其中​​ENTRYPOINT​​​是提供镜像的主命令,允许将镜像当成命令本身来运行,这里是结合辅助脚本docker-entrypoint.sh 使用,​​CMD​​ 提供命令默认选项。docker-entrypoint.sh 文件和Dockerfile目录一个层级,下面是docker-entrypoint.sh 文件。

# docker-entrypoint.sh#!/bin/shset -e# first arg is `-f` or `--some-option`# or first arg is `something.conf`if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then set -- redis-server "$@"fi# allow the container to be started with `--user`if [ "$1" = 'redis-server' -a "$(id -u)" = '0' ]; then find . \! -user redis -exec chown redis '{}' + exec gosu redis "$0" "$@"fiexec "$@"

如果我们要加入自己的配置文件,可以在基于官方​redis​添加Dockerfile和对应的redis.conf文件。

# DockerfileFROM redisCOPY redis.conf /usr/local/etc/redis/redis.confCMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ] # 后面配置文件是命令对应的参数。

打包镜像要注意

精简镜像:尽量让每个镜像的用途都比较集中、单一;避免不必要的包,比如编辑器推荐使用 alpine 只有5MB 或者 debian等小巧镜像。使用明确的版本号信息,而非latest,避免一些意外情况。减少镜像层数,尽量合并指令,例如多个RUN指令可以合并为一条;提高构建镜像速度,在目录下新建一个 .dockerignore 文件来指定要忽略的文件和目录同.gitignore.

另外如果我们没有使用自己构建的镜像,一定要注意第三方镜像的安全性,尽可能从官方维护拉取。因为Docker通过命名空间进行隔离,容器中的应用可以访问系统内核和部分系统文件。如果容器中应用是不可信的,会影响到本地系统。

容器化部署实践,我打算从基础操作到实战应用以一个系列进行分享,今天是第三篇Dockerfile 镜像构建,后期我将持续分享更多相关内容,从容器化入门使用到部署实践编排构建等等,欢迎大家持续进行关注。

相关文章:

​​Docker 容器化部署实践--入门​​

​​Docker容器化部署实践Docker Compose​​

​​聊聊Redis数据持久化备份​​

​​【私货】MongoDB 副本集的运维部署​​

​​「附PPT」2018成都Web前端大会概述​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用Docker容器化部署实践之Django应用部署(一)
下一篇:mybatis中的test语句失效处理方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~