美文网首页
Docker 定制镜像

Docker 定制镜像

作者: FConfidence | 来源:发表于2020-01-28 21:32 被阅读0次

使用Dockerfile定制镜像

  1. Dockerfile
FROM node:10.0

# 在容器中创建一个目录
RUN mkdir -p /usr/src/nodejs/

# 定位到容器的工作目录
WORKDIR /usr/src/nodejs/

# RUN/COPY 是分层的,package.json 提前,只要没修改,就不会重新安装包
COPY package.json /usr/src/app/package.json
RUN cd /usr/src/app/
RUN npm i

# 把当前目录下的所有文件拷贝到 Image 的 /usr/src/nodejs/ 目录下
COPY . /usr/src/nodejs/


EXPOSE 3000
CMD npm start
  1. from指定镜像基础
  • 在 Docker Hub 上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如 nginx、redis、mongo、mysql、httpd、php、tomcat 等;
  • 有一些方便开发、构建、运行各种语言应用的镜像,如 node、openjdk、python、ruby、golang 等。可以在其中寻找一个最符合我们最终目标的镜像为基础镜像进行定制。
  • 官方镜像中还提供了一些更为基础的操作系统镜像,如 ubuntu、debian、centos、fedora、alpine 等,这些操作系统的软件库为我们提供了更广阔的扩展空间。
  • 除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。
  1. run执行命令
  • RUN 指令在定制镜像时是最常用的指令之一。其格式有两种:
    • shell 格式:RUN <命令>,就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的 RUN 指令就是这种格式。
      RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
      
    • exec 格式:RUN ["可执行文件", "参数1", "参数2"],这更像是函数调用中的格式。
  1. 不好的做法
FROM debian:stretch

RUN apt-get update
RUN apt-get install -y gcc libc6-dev make wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN mkdir -p /usr/src/redis
RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1
RUN make -C /usr/src/redis
RUN make -C /usr/src/redis install
  • 每一个 RUN 的行为,就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后,commit 这一层的修改,构成新的镜像。
  • 而上面的这种写法,创建了 7 层镜像。这是完全没有意义的,而且很多运行时不需要的东西,都被装进了镜像里,比如编译环境、更新的软件包等等。
  • 结果就是产生非常臃肿、非常多层的镜像,不仅仅增加了构建部署的时间,也很容易出错。
  1. 正确的做法
FROM debian:stretch

RUN buildDeps='gcc libc6-dev make wget' \
    && apt-get update \
    && apt-get install -y $buildDeps \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && mkdir -p /usr/src/redis \
    && tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
    && make -C /usr/src/redis \
    && make -C /usr/src/redis install \
    && rm -rf /var/lib/apt/lists/* \
    && rm redis.tar.gz \
    && rm -r /usr/src/redis \
    && apt-get purge -y --auto-remove $buildDeps
  1. 换行和注释
  • Dockerfile 支持 Shell 类的行尾添加 \ 的命令换行方式,以及行首 # 进行注释的格式。
  1. 每一层构建的最后一定要清理掉无关文件。

相关文章

  • mac下使用docker部署pm2管理的node.js项目

    安装docker 定制化node镜像 定制镜像有两种方式 定制应用镜像 基于基本的node镜像,根据具体应用定制应...

  • Dokcer使用DokcerFile定制镜像

    Dokcer使用DokcerFile定制镜像 定制docker镜像的方式有两种: 手动修改容器内容,导出新的镜像。...

  • skywalking安装及使用

    Dokcer使用DokcerFile定制镜像 定制docker镜像的方式有两种: 手动修改容器内容,导出新的镜像。...

  • Docker 定制镜像

    使用Dockerfile定制镜像 Dockerfile from指定镜像基础 在 Docker Hub 上有非常多...

  • docker常用操作命令

    Dockerfile镜像定制 vim Dockerfile 创建定制文件,写入具体配置内容 docker buil...

  • docker 笔记6

    Dockerfile 定制镜像 touch Dockerfile docker build -t myngin...

  • Dockerfile注意事项

    从镜像仓库得到Docker镜像,很多时候为了适应实际的生产环境,需要对镜像进行定制,首选方法就是编辑Dockerf...

  • 制作 golang 的 docker 镜像

    自己动手定制了一个 golang 的 docker 镜像。 如图:请根据个人事迹情况修改 go_docker.pn...

  • Docker(2)

    Docker镜像的定制 在上一篇文章,仅仅只是大致介绍了Docker的Image、Container以及Regis...

  • Docker基础操作

    Docker部署 Docker安装 镜像加速 Docker 基础命令 Docker镜像管理 搜索镜像docker ...

网友评论

      本文标题:Docker 定制镜像

      本文链接:https://www.haomeiwen.com/subject/pvbmthtx.html