美文网首页
11.DockerFile的指令

11.DockerFile的指令

作者: _FireFly_ | 来源:发表于2023-11-21 09:31 被阅读0次

DockerFile的指令

DockerFile的指令
命令 解释
FORM 基础镜像,一切从这里开始构建
MAINTAINER 镜像是谁写的,姓名+邮箱
RUN 镜像构建的时候需要运行的命令
ADD 步骤: tomcat镜像,这个tomcat压缩包! 添加内容
WORKDIR 镜像的工作目录
VOLUME 挂载的目录
EXPOSE 暴露端口配置
CMD 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令。触发指令。
COPY 类似ADD ,将我们文件拷贝到镜像中
ENV 构建的时候设置环境变量

实战测试

Docker Hub中99%的镜像都是从这个基础镜像过来的FORM scratch,然后配置需要的软件和配置来进行的构建。


官网的实战测试案例

创建一个自己的centos,里面有vim命令和ifconfig命令

dockerfile的位置
dockerfile的位置 创建一个自己的centos

1.编写DockerFile文件

FROM centos     #基于centos镜像层
MAINTAINER guobaofeng<1246999516@qq.com>  #说明创作者

ENV MYPATH /usr/local      #配置运行环境目录
WORKDIR $MYPATH          #指定运行环境 $符号来指定


RUN yum -y install vim         #安装vim命令
RUN yum -y install net-tools    #安装ifconfig命令

EXPOSE 80                #暴露80端口
 
CMD echo $MYPATH      #编写配置文件
CMD echo "----end----"    #打印----end----
CMD /bin/bash                #命令以/bin/bash结尾

2.通过这个文件构建镜像
命令:docker build -f dockerfile文件路径 -t 镜像名:[tag]

docker build -f mydockerfile-centos -t mycentos:0.1 .
#最后面有个.一定不能丢失
#-f:指定脚本文件名
#-t:-target  生成镜像的名字及版本号
通过这个文件构建镜像

运行我们刚刚构建的镜像

1.查看docker镜像列表


查看docker镜像列表

2.运行我们构建的镜像

docker run -it mycentos:0.1

3.pwd查看工作目录,确定脚本是否生效


pwd查看工作目录,确定脚本是否生效

4.ifconfig 和vim命令也可用


ifconfig 和vim命令也可用
ifconfig命令

5.对比原生的centos


对比原生的centos

CMD和ENTRYPOINT 区别

CMD和ENTRYPOINT 区别

CMD命令实操

再次写一个dockerfile

1.创建一个dockerfile-cmd-test文件

vim dockerfile-cmd-test
FROM centos
CMD ["ls","-a"]

2.运行dockerfile-cmd-test文件

docker build -f dockerfile-cmd-test -t cmdtest .
运行dockerfile-cmd-test文件

3.查看生成的cmdtest镜像

docker images
查看生成的cmdtest镜像

4.运行cmdtest镜像

docker run 06f2cc65ea4a
运行cmdtest镜像

5.我们想追加一个命令 -l ls -al 发现报错了

[root@localhost dockerfile]# docker run 06f2cc65ea4a -l
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-l": executable file not found in $PATH: unknown.
我们想追加一个命令 -l ls -al 发现报错了

结论:cmd的命令下 -l 替换了CMD["ls","-a"]命令, -l不是命令所以报错

6.因为发现cmd命令是替换,所以我们再次更换命令使用docker run 06f2cc65ea4a ls -al

替换命令后运行成功

ENTRYPOINT实操

1.再次新建一个dockerfile-cmd-entrypoint文件

FROM centos
ENTRYPOINT ["ls","-a"]

2.由ENTRYPOINT构建镜像

docker build -f dockerfile-cmd-entrypoint -t entrypointo-test .
#一定不要忽略最后面的.
由ENTRYPOINT构建镜像

3.运行镜像并追加 -l 发现ENTRYPOINT可以直接追加命令 不是像cmd一样进行命令替换

docker run b325f5b97233 -l
运行镜像并追加 -l 发现ENTRYPOINT可以直接追加命令 不是像cmd一样进行命令替换

Dockfile中很多命令都是十分的相似,我们需要了解他们的区别,最好的学习方法是对比他们然后进行测试效果。

实战做一个Tomcat镜像

1.准备镜像文件,tomcat压缩包,jdk压缩包


准备镜像文件,tomcat压缩包,jdk压缩包

2.编写dockerfile文件,官方命令Dockerfile ,build会自动寻找这个文件,就不需要-f指定了
使用Dockerfile 这个文件名,启动时候不用再-f指定文件名了,默认会执行这个Dockerfile文件

FROM centos:7
MAINTAINER guobaofeng<1246999516@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u391-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.83.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

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

EXPOSE 8080

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

3.准备工作完成,构建自己的tomcat

docker build -t diytomcat .
准备工作完成,构建自己的tomcat

4.构建完成,查看本地镜像

docker images
构建完成,查看本地镜像

5.启动diytomcat

docker run -d -p 9090:8080 --name gbftomcat -v /home/guobaofeng/build/tomcat/test:/usr/local/apache-tomcat-9.0.83/webapps/test -v /home/guobaofeng/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.83/logs diytomcat

-d:后台运行 -p:外端9090端口暴露内端8080端口

-v :外端路径/home/guobaofeng/build/tomcat/test 挂载内端/url/local/apache-tomcat-9.0.83/webapps/test

外端路径/home/guobaofeng/build/tomcat/tomcatlogs/ 挂载内端/url/local/apache-tomcat-9.0.83/logs

6.进入镜像

docker exec -it af09b8a308dc /bin/bash
进入镜像

查看tomcat内部结构


查看tomcat内部结构

7.访问9090端口,访问成功


访问9090端口,访问成功

8.外部网页访问,也可以访问成功


外部网页访问,也可以访问成功

9.发布项目(由于做了卷挂载,我们直接在本地编写项目就可以直接发布了)

<?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>

10.在WEB-INF下编写web.xml文件


在WEB-INF下编写web.xml文件

11.在test目录下再创建一个index.jsp文件

vim index.jsp

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello.guobaofeng</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("-----my test web logs------");
%>
</body>
</html>
编写index.jsp 访问成功

12.查看tomcat日志
根据挂载目录查看日志
-v /home/guobaofeng/build/tomcat/test:/usr/local/apache-tomcat-9.0.83/webapps/test
-v /home/guobaofeng/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.83/logs

cd tomcatlogs
查看tomcat日志 日志路径

相关文章

  • MIPS指令集与简要分析

    R格式指令 基本格式 指令 算数类指令 逻辑类指令 位移类指令 跳转指令 I格式指令 基本格式 指令 算数指令 逻...

  • Angular 指令,管道,服务

    1. 指令 Directive 指令是 Angular 提供的操作 DOM 的途径。指令分为属性指令和结构指令...

  • 控制器、微程序控制

    1.控制器的功能 (1)取指令(指令地址,控制信号) (2)分析指令(解释指令,指令译码) (3)执行指令 (4)...

  • 指令指令

    /tellraw @a {"rawtext":[{"text":"你的名字 获得了成就 §a[你要的成就]"}]}...

  • 04Angular属性型指令

    指令的分类 组件(带模板的指令)结构型指令(改变宿主文档结构)属性型指令(改变宿主行为) 内置指令 结构型指令(改...

  • nginx简介和使用2

    nginx由多个经配置文件配置中的指令定义的模块组成,。 指令分为:简单指令和块指令。 简单的指令: 指令名、空格...

  • Linux——DAY2进阶指令

    1、df 指令 2、free指令 3、head指令 4、tail指令 5、less指令 6、wc指令 7、date...

  • Java Web开发学习中2.(JSP指令元素)

    JSP指令元素: page指令, include指令,taglib指令. 一. page指令: 用来设定JSP页面...

  • linux指令大全(归类整理)

    一.文件目录指令 1 pwd指令 2 ls指令 3 cd指令 4 mkdir指令 5 rmdir指令 6 touc...

  • 常用交易指令

    国际上常用的交易指令有:市价指令、限价指令、止损指令和取消指令等。我国期货交易所规定的交易指令有两种:限价指令和取...

网友评论

      本文标题:11.DockerFile的指令

      本文链接:https://www.haomeiwen.com/subject/bvvpwdtx.html