1.3DockerFile


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

构建步骤

  1. 编写一个dockerfile
  2. docker bulid 构建一个镜像
  3. docker run运行镜像
  4. docker push 发布镜像到DockerHub,阿里云镜像仓库

指令

指令说明
FROM指定基础镜像
MAINTAINER镜像是谁写的,姓名+邮箱
RUN镜像构建的时候需要运行的命令
ADD将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
WORKDIR镜像的工作目录
VOLUME挂载的目录位置
EXPOSE指定暴露端口配置
CMD指定这个容器启动的时候要运行的命令(只有最后一个会生效)
EMTRYPOINT指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD当构建一个被继承DockerFile,这个时候就会运行ONBUILD的指令,触发指令
COPY功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
ENV构建的时候设置环境变量
  1. 指令必须为大写字母
  2. 从上到下顺序执行
  3. #为注释
  4. DockerFile 每一个指令都会创建一个新的镜像层.

关于Dockerfile指令的详细语法解释:Dockerfile文件详解
Dockerfile指令介绍的官方文档:https://docs.docker.com/engine/reference/builder/

如何去提交一个Dokcer镜像给他人交付

image-20211227205224584

示例:构建centos加入vim和net-tools

#编写dockerfile
FROM centos
MAINTAINER yjwson<787654478@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

#通过文件构建镜像
docker build -f dockerfile文件目录 -t 镜像名:[tag] .

#可以发现进入了设置的工作目录$MYPATH
[root@d67220e15590 local]# pwd
/usr/local
#并且可以使用vim命令

列出镜像变更历史

docker history

Error response from daemon: no such id: mydentos
[root@iZ70eyv5ttqkcsZ ~]# docker history 738244ab554e
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
738244ab554e        6 minutes ago       /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/b...   0 B                 
7e665d843e16        6 minutes ago       /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "ec...   0 B                 
aef0871f7f8c        6 minutes ago       /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "ec...   0 B                 
e6f6e67d7415        6 minutes ago       /bin/sh -c #(nop)  EXPOSE 80/tcp                0 B                 
4e00d1d65ae7        6 minutes ago       /bin/sh -c yum -y install net-tools             27.3 MB             
2eee4eb2d497        6 minutes ago       /bin/sh -c yum -y install vim                   64.7 MB             
4792fba155e9        7 minutes ago       /bin/sh -c #(nop) WORKDIR /usr/local            0 B                 
5fa99426de96        7 minutes ago       /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0 B                 
6d027965a817        7 minutes ago       /bin/sh -c #(nop)  MAINTAINER yjwson<78765...   0 B                 
b87454c9f973        7 hours ago         /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/b...   0 B                 
47ae91d9d1a5        7 hours ago         /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "ec...   0 B                 
2324d5195be1        7 hours ago         /bin/sh -c #(nop)  VOLUME [volume01 volume02]   0 B                 
5d0da3dc9764        3 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
<missing>           3 months ago        /bin/sh -c #(nop)  LABEL org.label-schema....   0 B                 
<missing>           3 months ago        /bin/sh -c #(nop) ADD file:805cb5e15fb6e0b...   231 MB  

CMD和ENTRYPOING的区别

CMD 		#指定这个容器启动的时候要运行的命令,只有最后一个会生效,可以被代替

ENTRYPOINT 	#指定这个容器启动的时候要运行的命令,可以追加命令

测试cmd
#dockerfile

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

#构建镜像
docker build -f mydockerfile2 -t cmdtest .

#执行镜像之后ls -a 命令生效了
[root@iZ70eyv5ttqkcsZ dockerfile]# docker run f5a0a65d1e51
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
volume01
volume02

#追加-l之后
[root@iZ70eyv5ttqkcsZ dockerfile]# docker run f5a0a65d1e51 -l
container_linux.go:235: starting container process caused "exec: \"-l\": executable file not found in $PATH"
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:235: starting container process caused "exec: \"-l\": executable file not found in $PATH".

#使用 ps -al
[root@iZ70eyv5ttqkcsZ dockerfile]# docker run f5a0a65d1e51 ls -al
total 64
drwxr-xr-x   1 root root 4096 Dec 27 13:50 .
drwxr-xr-x   1 root root 4096 Dec 27 13:50 ..
-rwxr-xr-x   1 root root    0 Dec 27 13:50 .dockerenv
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  340 Dec 27 13:50 dev
drwxr-xr-x   1 root root 4096 Dec 27 13:50 etc
drwxr-xr-x   2 root root 4096 Nov  3  2020 home
lrwxrwxrwx   1 root root    7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3  2020 lib64 -> usr/lib64
drwx------   2 root root 4096 Sep 15 14:17 lost+found
drwxr-xr-x   2 root root 4096 Nov  3  2020 media
drwxr-xr-x   2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x   2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 105 root root    0 Dec 27 13:50 proc
dr-xr-x---   2 root root 4096 Sep 15 14:17 root
drwxr-xr-x   1 root root 4096 Dec 27 13:50 run
lrwxrwxrwx   1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x  13 root root    0 Dec 27 13:50 sys
drwxrwxrwt   7 root root 4096 Sep 15 14:17 tmp
drwxr-xr-x  12 root root 4096 Sep 15 14:17 usr
drwxr-xr-x  20 root root 4096 Sep 15 14:17 var
drwxr-xr-x   2 root root 4096 Dec 27 13:50 volume01
drwxr-xr-x   2 root root 4096 Dec 27 13:50 volume02

#可以看出来是进行了替换而不是追加
测试 entrypoint指令
#编写dockerfile
FROM centos
ENTRYPOINT ["ls","-a"]

#构建镜像
[root@iZ70eyv5ttqkcsZ dockerfile]# docker build -f dockerfile-cmd -t entorypoint-test .
Sending build context to Docker daemon 4.096 kB
Step 1/2 : FROM centos
 ---> b87454c9f973
Step 2/2 : ENTRYPOINT ls -a
 ---> Running in 83e1eeebcc36
 ---> 7fe30dd55dc0
Removing intermediate container 83e1eeebcc36
Successfully built 7fe30dd55dc0

#运行镜像
[root@iZ70eyv5ttqkcsZ dockerfile]# docker run 7fe30dd55dc0
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
volume01
volume02

#追加参数 -l
[root@iZ70eyv5ttqkcsZ dockerfile]# docker run 7fe30dd55dc0 -l
total 64
drwxr-xr-x   1 root root 4096 Dec 27 13:55 .
drwxr-xr-x   1 root root 4096 Dec 27 13:55 ..
-rwxr-xr-x   1 root root    0 Dec 27 13:55 .dockerenv
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  340 Dec 27 13:55 dev
drwxr-xr-x   1 root root 4096 Dec 27 13:55 etc
drwxr-xr-x   2 root root 4096 Nov  3  2020 home
lrwxrwxrwx   1 root root    7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3  2020 lib64 -> usr/lib64
drwx------   2 root root 4096 Sep 15 14:17 lost+found
drwxr-xr-x   2 root root 4096 Nov  3  2020 media
drwxr-xr-x   2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x   2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 104 root root    0 Dec 27 13:55 proc
dr-xr-x---   2 root root 4096 Sep 15 14:17 root
drwxr-xr-x   1 root root 4096 Dec 27 13:55 run
lrwxrwxrwx   1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x  13 root root    0 Dec 27 13:50 sys
drwxrwxrwt   7 root root 4096 Sep 15 14:17 tmp
drwxr-xr-x  12 root root 4096 Sep 15 14:17 usr
drwxr-xr-x  20 root root 4096 Sep 15 14:17 var
drwxr-xr-x   2 root root 4096 Dec 27 13:55 volume01
drwxr-xr-x   2 root root 4096 Dec 27 13:55 volume02
fff

示例:Tomcat镜像+jdk压缩包

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

  2. 编写dockerfile文件,官方命名Dockerfile ,这样build命令自动寻找这根文件不需要-f指定路径了!

FROM centos
MAINTAINER yjw

COPY readme.txt /usr/local/readme.txt
ADD jdk-8u181-linux-x64.tar.gz.gz /usr/local
ADD apache-tomcat-8.5.73.tar.gz /usr/local
RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_181

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

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

#docker build
docker build -t yjwtomcat:1.0 .
  1. docker运行自定义镜像 yjwtomcat:1.0
docker run -d -p 8080:8080 --name yjwtomcat -v /home/newtomcat/test:/usr/local/apache-tomcat-8.5.73/webapps/test -v /home/newtomcat/logs/:/usr/local/apache-tomcat-8.5.73/logs tomcat:1.0
  1. 新建一个test.html文件从宿主机放入/home/newtomcat/test路径下,尝试访问
<!DOCTYPE html>
<html>
    <head>
         <meta charset="UTF-8"/>
        <title>这是个标题</title>
    </head>
    <body>
        <h1>这是一个一个简单的HTML</h1>
        <p>Hello World!</p>
    </body>
</html>

image-20211228000734384

webxml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1"
         metadata-complete="true">
</web-app>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值