Dockerfile的使用场景

Dockerfile

1. Dockerfile的介绍

Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义镜像
Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。
Docker分为四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时默认要执行的指令

2. 指令

指令描述
FROM指定构建新lmage时使用的基础lmage,通常必须是Dockerfile的第一个有效指令,但其前面也可以出现ARG指令
LABEL附加到Image之上的元数据,键值格式;一般后面加MAINTAINER 用来描述作者信息
ENV以键值格式设定环境变量,可被其后的指令所调用,且基于新生成的Ilmage运行的Container中也会存在这些变量
ARG定义专用于build过程中的变量,但仅对该指标之后的调用生效,其值可由命令行选项" --build-arg"进行传递
RUN以FROM中定义的lmage为基础环境运行指定命令,生成结果将作为新Image的一个镜像层,并可由后续指令所使用
CMD基于该Dockerfile生成的lmage运行Container时,CMD能够指定容器中默认运行的程序,因而其只应该定义一次
ENTRYPONT类似于CMD指令的功能,但不能被命令行指定要运行的应用程序覆盖,且与CMD共存时CMD的内容将作为该指令中定义的程序的参数
WORKDIR为RUN、CMD、ENTRPOINT、COPY和ADD等指令设定工作目录
COPY复制主机上或者前一阶段构建结果中(需要使用–from选项)文件或目录生成新的镜像层
ADD与COPY指令的功能相似,但ADD额外也支持使用URL指定的资源作为源文件
VOLUME指定基于新生成的Image运行Container时期望作为Volume使用的目录
EXPOSE指定基于新生成的Image运行Container时期望暴露的端口,但实际暴露与否取决于"docket run"命令的选项,支持TCP和UDP协议
USER为Dockerfile中该指令后面的RUN、CMD和ENTRYPOING指令中要运行的应用程序指定运行者身份UID,以及一个可选的GID
ONBUILD触发器,生效于由该Dockerfile构建出的新lmage被用于另一个Dockerfile中的FROM指令作为基础镜像时

实验步骤:

要求: 用podman进行dockerfile做一个httpd编译安装的镜像,要求要控制版本号,要用到dockerfile中所有指令及用脚本方式启动程序,传到官方仓库并提交镜像的名称:版本

1. 准备源码包存放在目录,以便Dockerfile的ADD指令的运用

[root@master ~]# mkdir httpd
[root@master httpd]# mkdir tools/
[root@master httpd]# cd tools/
[root@master tools]# ls
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.54.tar.gz

2. 编写entrypoint.sh脚本

[root@master httpd]# vim entrypoint.sh
#!bin/bash

sed -i '/^#ServerName/s/#//g' /usr/local/apache/conf/httpd.conf

exec "$@"
[root@master httpd]# chmod +x entrypoint.sh 

3. 编写dockerfile文件

[root@master ~]# podman  images
REPOSITORY                  TAG         IMAGE ID      CREATED        SIZE
docker.io/library/nginx     latest      605c77e624dd  8 months ago   146 MB
docker.io/library/httpd     latest      dabbfbe0c57b  8 months ago   148 MB
docker.io/library/registry  latest      b8604a3fe854  9 months ago   26.8 MB
quay.io/centos/centos       8           5d0da3dc9764  11 months ago  239 MB
docker.io/library/centos    latest      5d0da3dc9764  11 months ago  239 MB

[root@master httpd]# vim Dockerfile 
# 指定镜像
FROM centos:8

# 指定维护者信息
LABEL MAINTAINER='yxt 2237966451@qq.com'

# 指定环境变量
ENV apache_version=2.4.54
ENV PATH /usr/local/apache/bin:$PATH

#复制指定的<src>到容器中的<dest>。其中<src>可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;还可以是一个tar文件(会自动解压为目录)
ADD tools/apr-1.7.0.tar.gz /usr/src/
ADD tools/apr-util-1.6.1.tar.gz /usr/src
ADD tools/httpd-${apache_version}.tar.gz /usr/src
ADD entrypoint.sh /

# 运行的命令
RUN rm -rf /etc/yum.repos.d/*  && \
    cd /etc/yum.repos.d/ && \
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo && \
    sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && \
    yum clean all && yum makecache && \
    yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ make && \
    cd /usr/src/apr-1.7.0 && \
    sed -i '/$RM "$cfgfile"/d' configure && \
    ./configure --prefix=/usr/local/apr && \
    make && make install && \
    cd && \
    cd /usr/src/apr-util-1.6.1 && \
    ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && \
    make && make install && \
    cd && \
    cd /usr/src/httpd-${apache_version} && \
    ./configure --prefix=/usr/local/apache \
    --enable-so \
    --enable-ssl \
    --enable-cgi \
    --enable-rewrite \
    --with-zlib \
    --with-pcre \
    --with-apr=/usr/local/apr \
    --with-apr-util=/usr/local/apr-util/ \
    --enable-modules=most \
    --enable-mpms-shared=all \
    --with-mpm=prefork && \
    make && make install

# 暴露端口
EXPOSE 80

# 启动容器时默认执行的命令,指定了多条命令,只有最后一条会被执行
# 如果用户docker run 容器时指定了运行的命令,则会覆盖掉CMD指定的命令
CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]

# 不可被docker run 容器时覆盖, 而且如果在docker run的后面提供了参数,这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序
# 每个Dockerfile中只能有一个ENTRYPOINT,当指定多个ENTRYPOINT时,只有最后一个生效
ENTRYPOINT ["/bin/bash","/entrypoint.sh"]

# 进入容器后,指定工作的目录
WORKDIR /usr/local/apache

[root@master httpd]# podman build -t httpd:v0.2 .
[root@master httpd]# podman  images
REPOSITORY                  TAG         IMAGE ID      CREATED         SIZE
localhost/httpd             v0.2        a6a42574dc59  53 seconds ago  727 MB
docker.io/library/nginx     latest      605c77e624dd  8 months ago    146 MB
docker.io/library/httpd     latest      dabbfbe0c57b  8 months ago    148 MB
docker.io/library/registry  latest      b8604a3fe854  9 months ago    26.8 MB
quay.io/centos/centos       8           5d0da3dc9764  11 months ago   239 MB
docker.io/library/centos    latest      5d0da3dc9764  11 months ago   239 MB


[root@master httpd]# podman  login docker.io
Username: yexiaotian
Password: 
Login Succeeded!
[root@master httpd]# podman  tag a6a42574dc59 docker.io/yexiaotian/httpd:v0.3
[root@master httpd]# podman  images
REPOSITORY                  TAG         IMAGE ID      CREATED         SIZE
localhost/httpd             v0.2        a6a42574dc59  5 minutes ago   727 MB
docker.io/yexiaotian/httpd  v0.3        a6a42574dc59  5 minutes ago   727 MB
docker.io/library/nginx     latest      605c77e624dd  8 months ago    146 MB
docker.io/library/httpd     latest      dabbfbe0c57b  8 months ago    148 MB
docker.io/library/registry  latest      b8604a3fe854  9 months ago    26.8 MB
quay.io/centos/centos       8           5d0da3dc9764  11 months ago   239 MB
docker.io/library/centos    latest      5d0da3dc9764  11 months ago   239 MB
[root@master httpd]# podman  push docker.io/yexiaotian/httpd:v0.3

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值