Dockerfile实现容器镜像的自定义及生成

一.Dockerfile介绍

Dockerfile是一种能够被Docker程序解释的剧本。Dockerfile由一条一条指令组成,并且有自己的书写格式和支持的命令。当我们需要在容器镜像中指定自己额外的需求时,只需要在Dockerfile上添加和修改指令,然后通过docker build生成我们自定义的容器镜像(image)

二.Dockerfile指令

1.构建类指令

用于构建image,其指定的操作不会在运行image的容器上运行

FROM MAINTAINER RUN ENV ADD COPY

2. 设置类指令

用于设置image的属性,其指定的指令将在运行的image的容器中执行

CMD ENTRYPOINT USER VOLUME WORKDIR ONBUILD EXPOSE

指令说明

 1.FROM

FROM <image>:<tag>
如FROM centos:latest

2.RUN

RUN指令用于构建镜像中执行命令,有以下两种格式

shell格式

RUN <命令>
如 RUN echo 'kunkun' > /var/www/html/index.html

exec格式

RUN ["可执行文件","参数1","参数2"]
如 RUN ["/bin/bash","-C","echo kubkub > /var/www/html/index.html"]

注意:如果有多条RUN指令,应该用&&连接,方便查看

 3.CMD

CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时索要执行的命令
格式有三种

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

一个在物理机中执行,一个在容器中执行

每个Dockerfile只能有一条CMD指令,如果有多条CMD指令,只有最后一条会被执行;

如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令

什么是启动容器时指定运行的命令

docker run -d -p 80:80 镜像名 运行的命令

4.EXPOSE

EXPOSE指令用于指定容器在运行时监听的端口

EXPOSE <port> [<port> ....]
如 EXPOSE 80 3306 8080

上述运行的端口还需要使用docker run运行容器时通过 -p 映射到宿主机的端口

5.ENV

ENV指令用于指定一个环境变量

格式:ENV <key> <value> 或者 ENV <key>=<value>
例: ENV JAVA_HOME /usr/local/jdkxxx/

6.ADD

ADD指令用于把宿主机上的文件拷贝到镜像中

ADD <src> <dest>
<src> 可以是本地文件或本地压缩文件吗,也可以是一个url
<dest>路径填写可以是容器内的绝对路径,也可以是相对于工作路径的相对路径

7.COPY

COPY指令与ADD指令类似,但COPY的源文件只能是本地文件

COPY <src> <dest>

8.ENTRYPOINT

ENTRYPOINT和CMD非常类似

相同点:一个Dockerfile只写一条,如果写了多条,只有最后一条生效;

都是容器启动时才运行

不同点:如果用户启动容器时候指定了运行命令,ENTRYPOINT不会被运行的命令覆盖而CMD会被覆盖

ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2

9.VOLUME

VOLUME指令用于把宿主机里的目录与容器里的目录映射

只指定挂载点,docker宿主机映射的目录为自动生成的

VOLUME ["<mountpoint>"]

10.USER

USER指令设置启动容器的用户(像hadoop需要hadoop用户操作,oracle需要oracle用户操作),可以是用户名或UID

USER daemon
如USER 1001

11.WORKDIR

WORKDIR指令设置工作目录,类似与cd命令。不建议使用 RUN cd /root ,建议使用WORKDIR

WORKDIR /root

三.Dockerfile基本构成

基础镜像信息:如 centos:latest

维护者信息:出问题了该找谁

镜像操作指令:在容器中执行的命令,通常为linux的操作命令

容器启动时执行指令:如CMD

1.Dockerfile生成容器镜像方法

 

 拿到Dokerfile文件后,先build生成image,然后用run根据image生成容器

2.使用dockerfile生成容器镜像案例

第一步:创建一个文件夹

第二步:在文件夹中创建Dockerfile文件及其他文件

第三步:使用docker build命令构建镜像

第四步:使用构建的镜像启动容器

以Dockerfile生成Nginx容器镜像为例

mkdir nginxroot
cd nginxroot
echo "nginx's running" > index.html
vim Dockerfile

Dockerfile文件中的内容 

注意:#先下载wget再使用

FROM centos:centos7

MAINTAINER "www.kubemsb.com"
#先安装wget再使用
RUN yum -y install wget

RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

RUN yum -y install nginx

ADD index.html /usr/share/nginx/html/
#给容器一个进程,使容器处于运行状态
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

EXPOSE 80
#启动nginx
CMD /usr/sbin/nginx

根据Dockerfile生成文件

docker build -t centos7-nginx:v1 .

注意: 如果文件名字不为Dockerfile则命令结尾的 . 应该换成 -f 来指定文件

 根据镜像生成容器

docker run -p 10002:80 -d centos7-nginx:v1

然后就可以访问物理机的10002端口来进行访问容器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jjj34

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值