栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

DockerFile

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DockerFile

一、Dockerfile介绍

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

构建步骤

1、编写一个Dockerfile文件。

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

3、docker run 运行镜像

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

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

 

二、Dockerfile指令
基础知识

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

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

3、#代表注释

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

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

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

Dockerfile:构建镜像的命令脚本

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

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

 Dockerfile指令

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

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

        CMD:指定这个容器启动时要运行的命令,只有最后一个生效,可被docker run  容器启动时的命令 替代。【如果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"%>




菜鸟教程(runoob.com)


Hello world



[root@fang2 WEB_INF]# cat web.xml 




[root@a8b151536342 WEB_INF]# cat web.xml 



  

(7)测试项目是否成功

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762700.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号