DockerFile

本文介绍了Dockerfile的基础知识,包括它是什么以及常规的使用步骤。详细讲解了Dockerfile的常用指令,并通过两个实例——CentOS和简单项目部署,展示了如何编写Dockerfile,构建镜像以及创建容器。

目录

 

一.dockerfile简介

1.dockerfile是什么

2.常规使用步骤

二.常规指令

三 实例

1.centos

2.简单项目部署

一.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命令参考

# 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值