Dockerfile 定制镜像

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

介绍

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

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

[[email protected] 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

[[email protected] 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
[[email protected] mydocker]# docker run --name webserver -d -p 8080:8080 tomcat:test /bin/bash
e13e5b4d7807b5dbeec0eb55192602ed60cb289b95d82a455cdb340581aba150
[[email protected] 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

通过浏览器访问

常用指令

注意问题

  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下面 。

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

原文地址:https://blog.51cto.com/perin/2447878

时间: 2024-11-08 23:49:24

Dockerfile 定制镜像的相关文章

使用 Dockerfile 定制镜像

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. FROM nginx RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html FROM 指定基础镜像,在该镜像的基础上进行定制,FROM是必备的指令,并且必须是第一条指令 RUN 执行命令行命令 ,其有两种格式: shell格式:RUN

docker-6.使用Dockerfile定制镜像

一般情况下,Dockerfile分为四部分:基础镜像信息.维护者.镜像操作指令和容器启动时执行的指令 例: #This Dockerfile uses the centos image #This is a nginx web server #version 0.1 #time 2017年10月27日13:00:01 #指定基础镜像,可同时指定多个镜像 FROM centos #维护者 MAINTAINER blog.rootr.cn [email protected] #指定运行容器时的用户名

dockerfile定制镜像的使用

就是写个docker的脚本然后依次运行,有点类似于gitlab中持续化集成的一系列步骤的自动部署和程序的顺序执行. 以tomcat为例 ,通常我们在 usr/local/ 目录下 创建文件夹tomcat mkdir tomcat 然后需要创建一个大小写敏感的Dockerfile文件 可以vi 可以vim可以touch Dockerfile 然后编辑Dockerfile文件 第一行:from 容器名 这里from tomcat 原文地址:https://www.cnblogs.com/notabl

使用Dockerfile定制自己的docker镜像

我们都知道,在Linux系统下可以通过shell脚本来自动安装部署应用,这样不但免去了手动操作的麻烦,而且还可以通过一些自动化工具来实现批量安装部署.那么docker是否也可以通过脚本的方式定制镜像呢?当然可以,那就是Dockerfile,我们可以把创建应用镜像的操作都写入一个Dockerfile文件里,然后通过docker build命令来构建自已的镜像,这个过程类似shell脚本的功能.docker环境的安装部署可以参考我的另一篇博文<Centos 7部署docker环境.基本命令使用及简单

【Docker自定制镜像之Dockerfile】

镜像的定制,就是定制每一层所添加的配置.文件,如果可以把每一层修改.安装.构建.操作的命令都写入到一个脚本中,用脚本来构建.定制镜像,这个脚本就是Dockerfile Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容就是没每一层应当如何构建的. Dockerfile ---------?? FROM 指定基于哪个镜像文件来构建新的镜像,尽量使用官方的bash image 示例: FROM 镜像名/镜像ID[:tag]

【Docker自定制镜像之Dockerfile】--2019-08-06 15:20:55

原创链接: http://106.13.73.98/__/105/ 镜像的定制,就是定制每一层所添加的配置.文件,如果可以把每一层修改.安装.构建.操作的命令都写入到一个脚本中,用脚本来构建.定制镜像,这个脚本就是Dockerfile Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容就是没每一层应当如何构建的. Dockerfile ---------?? FROM 指定基于哪个镜像文件来构建新的镜像,尽量使用官方的b

使用 Dockerfile 创建镜像

简介 Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile快速创建自定义的镜像. 本文首先将介绍Dockerfile典型的基本结构及其支持的众多指令,并具体讲解通过这些指令来编写定制镜像的Dockerfile. 最后,会介绍使用Dockerfile创建镜像的过程. 基本结构 Dockerfile由一行行命令语句组成,并且支持以#开头的注释行. 一般而言,Dockerfile分为四部分:基础镜像信息.维护者信息.镜像操作指令和容器启动时执行指令.例如: # 第一行必须指定

7 docker-使用dockerfile创建镜像

在前面的实验中我们多次用到的 Dockerfile,在本实验里我们将通过完成一个实例来学习Dockerfile的编写. 本节中,我们需要依次完成下面几项任务: Dockerfile 基本框架    Dockerfile 编写常用命令    从 Dockerfile 构建镜像 本次实验的需求是完成一个Dockerfile,通过该Dockerfile创建一个Web应用,该web应用为apache托管的一个静态页面网站,换句话说,我们写一个Dockerfile,用来创建一个实验楼公司的网站应用,就是h

Dockerfile构建镜像

构建镜像 构建镜像指令:docker  build或docker  image  build   Dockerfile初识: cat >>Dockerfile<<end FROM  python:2.7-slim WORKDIR  /app ADD  .  /app RUN  pip  install  -r  requirements.txt EXPOSE  80 ENV  NAME  World CMD  ["python", "app.py&qu