Dockerfile 多个form

本文介绍了如何利用Dockerfile中的多FROM指令实现多阶段构建,通过两个具体案例展示了如何将编译环境与运行环境分离,以降低最终镜像大小并提高安全性。
摘要由CSDN通过智能技术生成

从docker17.05版本开始,dockerfile中允许使用多个FROM指令(multistage),该特性可以使编译环境和发布环境分离。

案例1:

# c++语言环境基础镜像
FROM centos:7.0.3 AS build_base

#安装编译工具,gcc g++ gdb cmake ==

#安装第三方库

# 将源码拷贝到镜像中
COPY project /build/

# 指定工作目录
WORKDIR /build

# 编译镜像时,运行 make生成可执行程序


# 指定容器运行时入口程序 server
ENTRYPOINT ["/build/server"]

#这里重新启动一个镜像,将编译好的可执行文件和运行依赖库拷贝过来就可以了
FROM centos:7.0.3
COPY --from build_base ***.so .
COPY --from build_base /build/server .
#修改环境变量,使之指向动态库的目录
ENV LD_LIBRARY_PATH=./

案例2:

FROM node:12.13.1 as node01
LABEL maintainer="a@abc.com"
COPY . /app/
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org --cache=$HOME/.npm/.cache/cnpm --disturl=https://npm.taobao.org/dist --userconfig=$HOME/.cnpmrc
RUN npm run build

FROM nginx
LABEL maintainer="a@abc.com"
COPY --from=node01 /app/dist /usr/share/nginx/html

不使用较大的node容器,直接使用较小的nginx容器。

参考:

Docker中Dockerfile多From 指令存在的意义 - yang-leo - 博客园

dockerfile中多FROM指令存在的意义(multistage) - 知乎

 Dockerfile多阶段构建之from==0 - 点击领取

Dockerfile中的CMD命令用于指定容器启动时要执行的命令或者程序。根据官方文档,CMD命令有三种格式。 第一种格式是exec form,使用JSON数组的方式指定可执行文件及其参数。例如,CMD ["executable","param1","param2"]。 第二种格式是as default parameters to ENTRYPOINT,也是使用JSON数组的方式指定参数作为ENTRYPOINT的默认参数。例如,CMD ["param1","param2"]。 第三种格式是shell form,使用类似于shell脚本的方式指定命令及其参数。例如,CMD command param1 param2。 需要注意的是,Dockerfile中可以有多个CMD指令,但只有最后一个生效,因为只有最后一个CMD指令会被docker run执行。 所以,根据Dockerfile中的CMD命令的不同格式,可以指定容器启动时要执行的命令或者程序,并且可以设置参数或者作为ENTRYPOINT的默认参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Dockerfile CMD 命令详解](https://blog.csdn.net/xyz/article/details/118269856)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Dockerfile常用命令](https://download.csdn.net/download/weixin_38570278/14885523)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值