DockerFile介绍

DockerFile :  就是用来构建docker镜像的构建文件,命令脚本

构建步骤:

1、编写一个dockerFile 文件

2、docker build 构建成为一个镜像

3、docker run 运行镜像

4、docker push 发布镜像(DockerHub、阿里云镜像仓库)

DockerFile构建过程

基础知识:

1、每个保留关键字(指令)都是必须是大写

2、执行从上到下顺序执行

3、# 表示注释

4、每一个指令都会创建一个新的镜像层,并提交

通过dockerfile 搭建lnmp 构建dockerfile_容器

DockerFile的指令

FROM                              #基础镜像,一切从这里开始构建

MAINTAINER                  #镜像是谁写的,姓名+邮箱

RUN                                # 镜像构建的时候需要运行的命令

ADD                                # 步骤:Tomcat镜像,这个Tomcat的压缩包!添加内容

WORKDIR                      #镜像的工作目录

VOLUME                         #挂载的目录

EXPOSE                         #保留端口配置

CMD                                #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代

ENTRYPOINT                  #指定这个容器启动的时候要运行的命令,可以追加命令

ONBUILD                         #当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令

COPY                               #类似ADD,将我们文件拷贝到镜像中

ENV                                  #构建的时候设置环境变量

创建一个自己的centos

# 1、编写自己的dockerFile

FROM centos
MAINTAINER zzj<123456@>

ENV MYPATH  /usr/local
WORKDIR $MYPATH

RUN  yum -y install vim
RUN  yum -y install net-tools

EXPOSE  80

CMD echo $MYPATH
CMD echo "-----end-----"
CMD /bin/bash

# 2.通过这个文件构建镜像

 docker build -f .\dockerFile1 -t mycentos:0.1 .

通过dockerfile 搭建lnmp 构建dockerfile_通过dockerfile 搭建lnmp_02

 

 

通过dockerfile 搭建lnmp 构建dockerfile_通过dockerfile 搭建lnmp_03

我们可以通过命令 docker history

 

通过dockerfile 搭建lnmp 构建dockerfile_centos_04

 我们平时拿到一个镜像,可以查看它是怎么做的

CMD 和 ENTRYPOINT 的区别

CMD                                #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代

ENTRYPOINT                  #指定这个容器启动的时候要运行的命令,可以追加命令

测试CMD

# 1、编写dockerFile

通过dockerfile 搭建lnmp 构建dockerfile_运维_05

# 2、构建镜像

docker build -f .\dockerFileCmd -t mycentoscmd .

 # 3、run运行,发现cmd命令生效

通过dockerfile 搭建lnmp 构建dockerfile_通过dockerfile 搭建lnmp_06

如果直接在run 后面增加参数

PS C:\docker\dockerFiles> docker run 7d202bdf002b -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.

只会去执行 -l ,把cmd的参数 ls -a直接替换了,就报了上面的错误

正确的做法就是:重新写完整参数,这就是cmd的特殊点

 docker run 7d202bdf002b ls -al

通过dockerfile 搭建lnmp 构建dockerfile_通过dockerfile 搭建lnmp_07

测试 ENTRYPOINT

1、编写dockerFile

PS C:\docker\dockerFiles> cat .\dockerFileEntryPoint
FROM centos
ENTRYPOINT ["ls","-a"]
2、构建镜像

 docker build -f .\dockerFileEntryPoint -t cneotsentrypoint .

3、测试命令

直接添加命令可以执行,我们的追加命令是可以直接拼接在ENTRYPOINT后面的

 docker run cneotsentrypoint -l

通过dockerfile 搭建lnmp 构建dockerfile_运维_08

 

通过dockerfile 搭建lnmp 构建dockerfile_docker_09

Docker命令小结

通过dockerfile 搭建lnmp 构建dockerfile_运维_10