当前位置:   article > 正文

三、初识Dockerfile_第1关:初识dockerfile

第1关:初识dockerfile

Dockerfile 就是用来构建docker镜像的构建文件!是一段命令脚本

新建一个dockerfile1文件:vim dockerfile
通过这个脚本来生成镜像:
#文件中的内容,指令都是大写的


FROM centos

VOLUME ["volume01","volume02"]

CMD echo "-----end-----" 

CMD /bin/bash
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

然后通过: docker build -f dockerfile -t wch/centos .

-f  代表镜像的地址及dockerfiles01
-t  target生成名称为wch/centos的centos镜像
记得最后有一个    .    ()
  • 1
  • 2
  • 3

构建镜像

在这里插入图片描述这个卷和外部一定有一个同步的目录!
查看卷挂载路径:docker inspect 1c7bbe007566
在这里插入图片描述``

dockerfile是用来构建docker镜像的文件,构建步骤如下:

1、编写一个dockerfile文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库)
  • 1
  • 2
  • 3
  • 4

查看官方是怎么做的?
在这里插入图片描述在这里插入图片描述很多官方镜像都是基础包,很多功能都是没有的,我们通常会搭建自己的镜像。

DockerFile构建过程

基础知识:
1、每个保留关键字(指令)都必须是大写字母
2、执行顺序是从上到下顺序执行
3、# 表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

步骤:开发、部署、运维
DockerFile:构建文件,定义了一切的构建步骤、源代码。
DockerImages:通过DockerFile构建生产的镜像,最终发布和运行的产品。
Docker容器:容器就是镜像运行起来的样子,即运行提供的服务器。
  • 1
  • 2
  • 3
  • 4

DockerFile的指令

FROM			# 基础镜像,一切从这里开始构建
MAINTAINER 		# 镜像是谁写的,姓名+邮箱
RUN				# 镜像构建的时候需要运行的命令
ADD				# 步骤,添加tomcat等镜像
WORKDIR			# 镜像的工作目录
VOLUME			# 挂载的目录
EXPOSE			# 对外暴露的端口
CMD				# 指定容器启动时,要运行的命令,该指令只能在文件中存在一次,如果有多个,则只执行最后一条,可被替代
ENTRYPOINT		# 指定容器启动时,要运行的命令,可以追加命令
ONBUILD			# 当构建一个被继承的 DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY			# 类似ADD,将我们文件拷贝到镜像中
ENV				# 构建的时候设置环境变量(如设置mysql密码!!!)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

CMD 和 ENTRYPOINT 的区别

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

构建一个最简单的 dockerfile-cmd-test:

FROM centos
CMD ["ls","-a"]
  • 1
  • 2

构建镜像:

docker build -f dockerfile-cmd-test -t cmdtest .
  • 1

执行进入镜像:

docker run f55d10e02520(自己的镜像id)
  • 1

可以看到,进入镜像后,直接执行了cmd命令 ls -a
在这里插入图片描述
试一下追加一个 -l 命令,希望返回ls -al,返回列表的详细数据,但是结果如下

[root@VM-0-16-centos dockerfiles]# docker run f55d10e02520 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.
  • 1
  • 2

cmd的情况下,-l 替换了 CMD[“ls”,"-a"] 命令,但是 -l 不是命令,所以报错

试一下构建一个 dockerfile-entrypoint-test:

FROM centos
ENTRYPOINT ["ls","-a"]
  • 1
  • 2

构建镜像:

docker build -f dockerfile-entrypoint-test -t entrypointtest .
  • 1

执行进入镜像:

docker run 3f2f94ab5d75(自己的镜像id)
  • 1

在这里插入图片描述
再试一下 -l,可以发现,这样是行得通的!!
在这里插入图片描述

实战测试

# 编写Dockerfile的文件
FROM centos
MAINTAINER wch<631730809@qq.com>

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

# 通过这个文件构建镜像
命令:docker build -f dockerfiles01 -t wch_centos01 .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号