docker笔记之DockerFile

一、DockerFile是什么?

  1. dockerfile是一种文档,我们可以在里面添加一些命令,构建属于我们自己的镜像,因为原生的镜像,你通过镜像启动一个容器,并且运行这个容器的时候,很多命令是不能使用的,为了能够做到这一点,扩展命令,方便我们的操作,docker提供了dockerfile让我们自动构建文件。
  2. 此外,通过编写Dockerfile生成镜像,可以为开发、测试团队提供基本一致的环境,从而提升开发、测试团队的效率,不用再为环境不统一而发愁,同时运维也能更加方便地管理我们的镜像。

二、基本命令

#创建一个用于构建docker的目录,并且创建一个dockerfile文件。
[root@iZbp10d5h2h0qbsabf055iZ /]# mkdir dockerTest
[root@iZbp10d5h2h0qbsabf055iZ /]# ls
bin   dev         etc   lib    lost+found  mnt  proc  run   srv  test  usr
boot  dockerTest  home  lib64  media       opt  root  sbin  sys  tmp   var
[root@iZbp10d5h2h0qbsabf055iZ /]# cd dockerTest/
[root@iZbp10d5h2h0qbsabf055iZ dockerTest]# ls
[root@iZbp10d5h2h0qbsabf055iZ dockerTest]# vim DockerFile
[root@iZbp10d5h2h0qbsabf055iZ dockerTest]# cat DockerFile 
FROM nginx # From命令指定基础镜像,可以理解为在这个基础镜像的基础上,加上一些额外的操作或者命令。
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html  # Run命令就代表运行什么。
[root@iZbp10d5h2h0qbsabf055iZ dockerTest]# 

&&连接符号可以把执行的命令连接起来,并且连接起来之后,就相当于只构建了一层镜像,而不是三层,因为每一个run就代表构建了一层镜像。

FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

ps:构建镜像的层数多了之后,会让整个镜像很臃肿,并不建议,因此多使用&&连接符号

#通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)
#docker build -t 镜像名称:镜像标签 .
[root@iZbp10d5h2h0qbsabf055iZ dockerTest]# docker build -t nginx:v3 .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM nginx
 ---> f6d0b4767a6c
Step 2/2 : RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
 ---> Running in 12eb306f5999
Removing intermediate container 12eb306f5999
 ---> 5bd8693315d1
Successfully built 5bd8693315d1
Successfully tagged nginx:v3
[root@iZbp10d5h2h0qbsabf055iZ dockerTest]# 

最后一个参数.代表上下文路径,意思是docker在构建镜像的时候,需要使用到一些文件,如果指定了路径,会将路径下的所有文件打包一起交给docker引擎使用。

解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。

注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

命令

  • RUN命令,代表运行什么内容
  • ADD命令,代表添加压缩包,自动复制并解压到指定的目录下。
  • CMD命令,代表运行某些额外的内容,在docker run 启动容器的时候,会先附带执行CMD里面的内容,不过需要注意的是,如果docker run 里面已经有了要运行的内容,那么就会把CMD上的内容覆盖掉(只有当docker run没有指定运行什么内容的情况下,CMD内容才生效),当有多个CMD在镜像文件当中时,只有最后一个生效。
  • ENTRYPOINT命令,和CMD命令类似,但是有一个不同的地方是,它一定会执行,不管docker run 启动容器的时候,有没有指定要运行的内容,ENTRYPOINT里面的内容都会运行,同理,多个ENTRYPOINT命令,只有最后一个生效。
  • ENV命令,设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量,使用符号$引用即可。
  • VOLUME命令,在启动容器的时候,没有使用-v挂载数据卷的话,那么默认会使用VOLUME里面的匿名挂载,格式:VOLUME [“路径一”,“路径二”,…]
  • EXPOSE命令,只是声明端口,在容器开启的时候,如果没有使用-P指定端口,那么会默认使用EXPOSE里面的端口。
  • WORKDIR命令,设置当前工作目录

三、总结

构建步骤

  1. 创建一个目录,用于存储Dockerfile文件(注意,必须是Dockerfile文件,不能是DockerFile,不然报错)
  2. 往Dockerfile文件里面填充内容,在基础镜像的基础上,加上一些自己相加的内容,使之成为一个新的镜像
  3. docker build -t 镜像名称:标签 上下文路径(一般是.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值