Dockerfile 定制镜像
admin
2023-02-28 21:21:21
0

从上一篇文章中我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件等信息,但是命令毕竟只是命令,每次定制都得去重复执行这个命令,而且还不够直观,如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么这些问题不就都可以解决了吗?对的,这个脚本就是我们说的Dockerfile

介绍

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

这里以定制 tomcat 镜像为例,这次我们使用 Dockerfile 来定制。在一个空白目录中,建立一个文本文件,并命名为 Dockerfile:

[root@192 mydocker]# cat Dockerfile
FROM jdk:latest
ADD  apache-tomcat-9.0.27.tar.gz /data/soft
RUN  rm -rf apache-tomcat-9.0.27.tar.gz
WORKDIR /data/soft/
ENTRYPOINT /data/soft/apache-tomcat-9.0.27/bin/startup.sh && tail -f /dev/null

[root@192 mydocker]# docker build -t tomcat:test .
Sending build context to Docker daemon  500.2MB
Step 1/5 : FROM jdk:latest
 ---> d8252cab0866
Step 2/5 : ADD  apache-tomcat-9.0.27.tar.gz /data/soft
 ---> d0f4873733b8
Step 3/5 : RUN  rm -rf apache-tomcat-9.0.27.tar.gz
 ---> Running in 7d54b3ccd7ca
Removing intermediate container 7d54b3ccd7ca
 ---> 1f07735cd7da
Step 4/5 : WORKDIR /data/soft/
 ---> Running in 90dfd42c6134
Removing intermediate container 90dfd42c6134
 ---> 5704cc83ebb3
Step 5/5 : ENTRYPOINT /data/soft/apache-tomcat-9.0.27/bin/startup.sh && tail -f /dev/null
 ---> Running in 5dd6eef5777e
Removing intermediate container 5dd6eef5777e
 ---> d97a77aa1533
Successfully built d97a77aa1533
Successfully tagged tomcat:test
[root@192 mydocker]# docker run --name webserver -d -p 8080:8080 tomcat:test /bin/bash
e13e5b4d7807b5dbeec0eb55192602ed60cb289b95d82a455cdb340581aba150
[root@192 mydocker]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1093/sshd
tcp6       0      0 :::8080                 :::*                    LISTEN      48659/docker-proxy
tcp6       0      0 :::22                   :::*                    LISTEN      1093/sshd

通过浏览器访问

Dockerfile 定制镜像

常用指令

Dockerfile 定制镜像

注意问题

  1. COPY ADD 使用问题会设计到权限的问题如何解决权限
    可以使用 COPY --chown= 或者 ADD --chown= 去解决
    在使用过程中 如ADD使用了.tar.gz自动解压的功能,build执行后,包里面的权限是不会变化的。然后COPY 直接使用权限会直接更改为root。

  2. USER的使用,影响哪些使用
    影响后面的RUN CMD ENTRYPOINT 命令的执行身份,注意的是 而COPY命令却不服从

  3. WORKDIR的使用
    切换目录
    一个事例
    RUN cd /test
    RUN echo "test" >test.txt
    请问最后镜像有/test/test.txt吗? 答:NO
    解释:docker里边有层的概念,每个命令都是生成一个层,每个层都是独立的空间。所以第二个RUN时,工作目录并不会切换到/test下面 。

最后用一张图解释常用指令的意义^-^

Dockerfile 定制镜像

相关内容

热门资讯

今日重磅消息“欢乐岛.怎么开挂... 今日重磅消息“欢乐岛.怎么开挂?”确实真的有挂您好,欢乐岛这个游戏其实有挂的,确实是有挂的,需要了解...
终于懂了“可乐麻将.辅助开挂神... 有 亲,根据资深记者爆料可乐麻将是可以开挂的,确实有挂(咨询软件无需打开...
今日重大通报“YY棋牌.有没有... 家人们!今天小编来为大家解答YY棋牌透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买很...
最新引进“蜀友汇.真的有挂吗?... 网上科普关于“蜀友汇有没有挂”话题很是火热,小编也是针对蜀友汇作*弊开挂的方法以及开挂对应的知识点,...
我来教教您“情怀娱乐.怎么开挂... 家人们!今天小编来为大家解答情怀娱乐透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里买很...
玩家分享攻略“广客账本.可以开... 您好:广客账本这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...
终于了解“极酷牛牛.可以开挂吗... 您好:极酷牛牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...
终于懂了“火神炸金花.开挂神器... 终于懂了“火神炸金花.开挂神器?”果然有透视挂您好,火神炸金花这个游戏其实有挂的,确实是有挂的,需要...
今日重大消息“福建众娱.辅助器... 您好:福建众娱这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...
玩家分享攻略“欢乐贰柒拾.怎么... 有 亲,根据资深记者爆料欢乐贰柒拾是可以开挂的,确实有挂(咨询软件无需打...