DockerFile

一、Dockerfile介绍

Dockerfile是用来构建docker镜像的文件,是命令参数脚本。

构建步骤

1、编写一个Dockerfile文件。

2、docker build 构建成为一个镜像。文件名字任意 ,-f 指定文件,如果未使用-f 指定文件名字,会默认去找名字为Dockerfile的文件。推荐使用Dockerfile命名,这样便可以不用指定文件名。

3、docker run 运行镜像

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

docker hub官网,每个镜像都可点进去查看dockerfile源码

 

 二、Dockerfile指令

Dockerfile执行流程 

基础知识

1、每个命令都是大写字母

2、dockerfile执行从上向下依次执行

3、#代表注释

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

注:从百度图片搜索图片可以更好的理解知识点。  很好的学习方法。

 dockerfile镜像逐渐成为企业的交付标准,必须掌握。

Dockerfile:构建镜像的命令脚本

dockerImages:通过dockerfile构建生成的镜像。可通过命令,让启动容器后,自动运行指定程序

docker容器:容器就是镜像运行起来提供服务的。

 Dockerfile指令

        MAINTAINER:镜像的作者,一般是姓名+邮箱

        ONBUILD:当构建一个被继的 DockerFile 时就会运行ONBUILD 的指令。是一个触发指令。

        CMD:docker run 容器  ,启动容器时会自动运行CMD指定的命令。会被docker run  容器 命令 的命令覆盖CMD的命令运行。如果Dockerfile文件有多个CMD,构建时都会执行,但是镜像构建好,以后启动容器时,只有最后一个CMD会执行。

        WORKDIR:镜像的工作目录。进入容器后,直接进入此目录。不指定默认根目录 /

        RUN和CMD区别? RUN是镜像编译时运行命令,CMD是容器启动时运行命令。

        CMD和ENTRYPOINT区别?启动容器后会运行的命令。docker run -it 镜像名 新命令。新命令就是容器启动后执行的命令,会覆盖CMD指定的指令,而新命令+ENTRYPOINT指定的指令会作为最终指令在容器启动后运行。

        COPY和ADD区别?ADD会解压文件并导入,COPY不会解压,仅是导入。

 CMD和ENTRYPOINT区别

测试CMD命令

(1)编写Dockerfile文件

[root@fang2 docker_lesson]# cat dockerfile_cmd_test 
FROM  centos:centos7
CMD ["ls","-a"]

(2)构建镜像

[root@fang2 docker_lesson]# docker build -f dockerfile_cmd_test -t cmdtest .
Sending build context to Docker daemon  4.096kB
Step 1/2 : FROM  centos:centos7
...
Successfully tagged cmdtest:latest

(3)从镜像启动容器

[root@fang2 docker_lesson]# docker run cmdtest
.dockerenv
...
var

(4)想追加一个 -l参数。即 ls -a -l

[root@fang2 docker_lesson]# docker run cmdtest -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.

CMD情况下,-l替换了CMD ["ls","-a"]命令,而-l不是命令,所以报错。


测试ENTRYPONT

(1)编写Dockerfile

[root@fang2 docker_lesson]# cat dockerfile_entrypoint_test 
FROM  centos:centos7
ENTRYPOINT ["ls","-a"]

(2)构建镜像和上面相同。 此处省略。直接从镜像启动容器

       -l直接追加到了ENTRYPOINT ["ls","-a"]命令,即ls -a -l。

[root@fang2 docker_lesson]# docker run entry -l
total 12
drwxr-xr-x   1 root root     6 Mar 12 20:37 .
。。。
drwxr-xr-x  18 root root   238 Nov 13  2020 var

 实战测试

        Docker Hub 中99%镜像都是从这个基础镜像过来的 FROM scratch, 然后配置需要的软件和配置来构建自己的镜像。scratch类似于引导加载。

 构建centos

        docker hub上的centos进具备基础功能,vim、ipconfig等功能不具备。有时镜像需要这些命令,故构建。

(1)编写Dockerfile 

        文件名字任意 -f 指定文件,如果未使用-f 指定文件名字,会默认去找名字为Dockerfile的文件。推荐使用Dockerfile命名。

FROM  centos:centos7
MAINTAINER fang<1542755282@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        

注:

  • 如果镜像yum安装失败,是因为镜像里面基于的基础镜像Centos有问题,而不是宿主机有问题。
  • 不要使用FROM centos,此时会默认下载centos最新版本centos8,centos8 yum安装软件时会遇见问题

(2)build

        0.1是版本号,不指定会默认latest

 docker build -f mydockerfile-centos -t fang/centos:0.1 .

(3)运行镜像 

        官网镜像是没有vim、ifconfig功能的。新建镜像都有了。

        docker run -it fang/centos:0.1 命令 。命令可以覆盖CMD指定的命令。命令是容器启动后执行的命令。上面的镜像CMD /bin/bash,因此容器启动后自动进入bash。

docker run -it fang/centos:0.1

 (4)docker history 查看镜像构建历史

        可以查看官网镜像的构建历史 

构建tomcat

(1)准备镜像文件需要的Tomcat压缩包,jdk的压缩包。官网下载。tomcat和jdk解压后的文件路径需要知道,用来设置环境变量。

(2)编写dockerfile文件,官方命名Dockerfile, build命令会自动寻找Dockerfile文件,就不需要 -f 指定了

        易错:jdk解压后的文件名字

FROM centos:centos7
MAINTAINER Fang<1542755282@qq.com>

COPY ./reademe.txt /user/local/readme.txt
ADD ./apache-tomcat-8.5.76.tar.gz /usr/local/
ADD ./jdk-8u311-linux-x64.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_311
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.76
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.76
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-8.5.76/bin/startup.sh && tail -F /url/local/apache-tomcat-8.5.76/bin/logs/catalina.out

(3)构建镜像

docker build docker build -t mytomcat .

(4)运行镜像容器

docker run -d -p 8088:8080 -v /opt/docker_lesson/tomcat/webapps:/usr/local/apache-tomcat-8.5.76/webapps/  -v /opt/docker_lesson/tomcat/logs:/usr/local/apache-tomcat-8.5.76/logs mytomcat

(5)测试端口是否可访问 localhost:8088 

(6)发布项目到容器

        宿主机的webapps会自动同步到容器内部的webapps下。因此以后向容器tomcat发布项目可以直接放在宿主机webapps目录下即可。下面示例向宿主机放了test项目。

        test文件夹包含WEB_INF文件夹,WEB_INF文件夹里面包含web.xml 和 index.jsp.为web项目最简单形式。


[root@fang2 WEB_INF]# cat index.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
Hello world
</body>
</html>

[root@fang2 WEB_INF]# cat web.xml 
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>

[root@a8b151536342 WEB_INF]# cat web.xml 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                               http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
           version="2.5">

  </web-app>

(7)测试项目是否成功

目前一直失败  不知道什么原因 

构建jar程序

1.编写jar程序

2.编写Dockerfile  jar程序放在Dockerfile同级目录下

FROM java:7
ARG gitUrl="https://gitee.com/pan648540858"

VOLUME /tmp
ADD app.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8080
WORKDIR /opt/wvp

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

3.docker服务器运行

 docker build   -t demoJar:7  文件名字任意 ,-f 指定文件,如果未使用-f 指定文件名字,会默认去找名字为Dockerfile的文件。推荐使用Dockerfile命名,这样便可以不用指定文件名。

4.启动容器

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fang·up·ad

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值