目录
一.dockerfile简介
1.dockerfile是什么
dockerfile是用来构建docker镜像的文件!命令参数脚本!
Dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!
Docker镜像逐渐成企业交付的标准,必须要掌握!
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行产品。
Docker容器:容器就是镜像运行起来提供服务。
2.常规使用步骤
步骤:
1、 编写一个dockerfile文件
2、 docker build 构建称为一个镜像
3、 docker run运行镜像
4、 docker push发布镜像(DockerHub 、阿里云仓库)
但是很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!
官方既然可以制作镜像,那我们也可以!
基础知识:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序
3、#表示注释
4、每一个指令都会创建提交一个新的镜像曾,并提交!
二.常规指令
# DockerFile常用指令
1. FROM
# 基础镜像,一切从这里开始构建
2. MAINTAINER
# 镜像是谁写的, 姓名+邮箱
3. RUN
# 镜像构建的时候需要运行的命令,参见CMD指令(比如在centos镜像中安装常见命令vim)
# 它接受命令作为参数并用于创建镜像。RUN会在shell或者exec的环境下执行命令。
#示例:
RUN echo helloworld
RUN[“程序名”,“参数1”,“参数2”]#可以免除运行/bin/sh的消耗,如果参数中引号等特殊字符,需要进行转义
4. ADD
# ADD和COPY作用相似,可以从一个URL地址下载内容复制到容器的文件系统中,还可以将压缩打包格式的文
件. 解压后复制到指定位置。文件复制均使用 COPY 指令,在 需要自动解压缩的场合使用 ADD。
5. COPY
# COPY指令用来将本地的文件或者文件夹复制到镜像的指定路径下。
# 示例
COPY /local/path/file /images/path/file
ADD file /images/path/file
ADD lasts.tar.gz /var/www
6. WORKDIR
# 为RUN、CMD、ENTRYPOINT以及COPY和AND设置工作目录
7. VOLUME
# 向镜像创建的容器中添加数据卷,数据卷可以在容器之间共享和重用。
# 数据卷的修改是立即生效的。数据卷的修改会对更新镜像产生影响。数据卷会一直存在,直到没有任何容器使用
它。
# 示例
VOLUME [“/data”,”/data2”]
VOLUME /data
8. EXPOSE
# 标明这个镜像中的应用将会监听某个端口,并且希望能将这个端口映射到主机的网络界面上,使容器内的应用可
以通过端口和外界交互。
# 这里只是暴露了容器的端口,具体指定映射需要在运行容器的时候-p(小写)
# 示例
expose 8080
9. CMD
# CMD和RUN命令相似,CMD可以用于执行特定的命令。CMD每次启动容器时运行,RUN在创建镜像时执行一次,固
化在image中。RUN命令先于CMD和ENTRYPOINT。
# Dockerfile只允许使用一次CMD指令,一般都是脚本中最后一条指令。
# 如果docker run后面出现与CMD指定的相同的命令,那么CMD就会被覆盖。而ENTRYPOINT会把容器名后面的
所有内容都当成参数传递给其指定的命令
# 示例
CMD ["executable","param1","param2"] #CMD 的推荐格式。
CMD ["param1","param2"] #为 ENTRYPOINT 提供额外的参数,此时 ENTRYPOINT 必须使用 Exec 格
式。
CMD command param1 param2 #Shell 格式
10. ENTRYPOINT
# 类似CMD.配置容器启动后执行的命令,但是它不可被 docker run 提供的参数覆盖
# 每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
# 示例
ENTRYPOINT ["executable", "param1", "param2"]# exec 这是 ENTRYPOINT 的推荐格式
ENTRYPOINT command param1 param2 #shell格式
# 备注
#Exec 格式
#ENTRYPOINT 的 Exec 格式用于设置要执行的命令及其参数,同时可通过 CMD 提供额外的参数。
#ENTRYPOINT 中的参数始终会被使用,而 CMD 的额外参数可以在容器启动时动态替换掉。
#举例: Dockerfile 片段:
ENTRYPOINT ["/bin/echo", "Hello"]
CMD ["world"]
#当容器通过 docker run -it [image] 启动时,输出为: Hello world
#而如果通过 docker run -it [image] haha启动,则输出为: Hello haha
Shell 格式
ENTRYPOINT 的 Shell 格式会忽略任何 CMD 或 docker run 提供的参数。
11. ONBUILD
#为镜像添加触发器。其指令在构建镜像时候并不执行,而是在其子镜像中执行
#当我们在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A镜像)
不会产生实质性影响。但是当我们编写一个新的Dockerfile文件来基于A镜像构建一个镜像(比如为B镜像)
时,这时构造A镜像的Dockerfile文件中的ONBUILD指令就生效了,在构建B镜像的过程中,首先会执行
ONBUILD指令指定的指令,然后才会执行其它指令。需要注意的是,如果是再利用B镜像构造新的镜像时,那个
ONBUILD指令就无效了,也就是说只能再构建子镜像中执行,对孙子镜像构建无效。
#示例
FROM ubuntu:14.04
ONBUILD RUN echo “you not see me later”
12. ENV # 设置环境变量(如设置mysql的用户名密码)
# 设置镜像环境变量。在build docker imag的过程中有效,在image被创建和container启动后作为环境变
量依旧也有效,并且可以重写覆盖。printenv可查看其值
13. USER
# 设置构建用户
14. ARG
# 在构建镜像时,指定一些参数,仅在build docker imag的过程中有效
三 实例
1.centos
# 1.创建dockerfile文件(文件名可任意)
vim mydockerfile-centos
# 2.编辑dockerfile文件内容
FROM centos
MAINTAINER cheng<1204598429@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
# 3.执行dockerfile文件(命令:docker build -f 文件路径 -t 镜像名:[tag] .)
docker build -f mydockerfile-centos -t mycentos:0.1 .
# 4.测试:创建容器
docker run -it mycentos:0.1
2.简单项目部署
1. 准备tomcat 和 jdk到当前目录,编写好README 。

2.编写dokerfile
FROM centos #
MAINTAINER cheng<1204598429@qq.com>
COPY README /usr/local/README #复制文件
ADD jdk-8u231-linux-x64.tar.gz /usr/local/ #复制解压
ADD apache-tomcat-9.0.35.tar.gz /usr/local/ #复制解压
RUN yum -y install vim
ENV MYPATH /usr/local #设置环境变量
WORKDIR $MYPATH #设置工作目录
ENV JAVA_HOME /usr/local/jdk1.8.0_231 #设置环境变量
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.35 #设置环境变量
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib #设置环境变量 分隔符是:
EXPOSE 8080 #设置暴露的端口
CMD /usr/local/apache-tomcat-9.0.35/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.35/logs/catalina.out # 设置默认命令
3.构建镜像和创建容器
# 构建镜像:因为dockerfile命名使用默认命名 因此不用使用-f 指定文件
docker build -t mytomcat:0.1 .
# 创建容器
docker run -d -p 8080:8080 --name tomcat01 -v /home/kuangshen/build/tomcat/test:/usr/local/apache-tomcat-9.0.35/webapps/test -v /home/kuangshen/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.35/logs mytomcat:0.1
本文介绍了Dockerfile的基础知识,包括它是什么以及常规的使用步骤。详细讲解了Dockerfile的常用指令,并通过两个实例——CentOS和简单项目部署,展示了如何编写Dockerfile,构建镜像以及创建容器。

2961

被折叠的 条评论
为什么被折叠?



