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

常用指令

注意问题
- COPY ADD 使用问题会设计到权限的问题如何解决权限
可以使用 COPY --chown= 或者 ADD --chown= 去解决
在使用过程中 如ADD使用了.tar.gz自动解压的功能,build执行后,包里面的权限是不会变化的。然后COPY 直接使用权限会直接更改为root。
- USER的使用,影响哪些使用
影响后面的RUN CMD ENTRYPOINT 命令的执行身份,注意的是 而COPY命令却不服从
- WORKDIR的使用
切换目录
一个事例
RUN cd /test
RUN echo "test" >test.txt
请问最后镜像有/test/test.txt吗? 答:NO
解释:docker里边有层的概念,每个命令都是生成一个层,每个层都是独立的空间。所以第二个RUN时,工作目录并不会切换到/test下面 。
最后用一张图解释常用指令的意义-

文章参考:
https://www.cnblogs.com/panwenbin-logs/p/8007348.html
Dockerfile 定制镜像的更多相关文章
- 利用dockerfile定制镜像
利用dockerfile定制镜像 镜像的定制就是定制每一层所添加的配置.文件.如果可以吧每一层修改.安装.构建.操作的命令都写入到一个脚本,用脚本来构建.定制镜像,这个脚本就是dockerfile. ...
- Dockerfile定制镜像
一.Dockerfile是什么? 镜像定制实质就是定制每一层所添加的配置.文件. Dockerfile就是一个脚本来构建和定制镜像,把每一层的修改.安装.构建.操作都写入脚本.以此来解决体积.镜像构建 ...
- 微服务架构 ------ Dockerfile定制镜像
Docker容器不仅仅是运行原生的容器,而是把我们的具体的项目能够布置到容器上面去,这就是Docker定制镜像需要做的事情. Docker容器 = new Docker镜像 镜像相当于类,容器相当 ...
- Docker 学习笔记(二):Dockerfile 定制镜像
镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题.镜像构建透明性的问题.体积 ...
- Docker Dockerfile 定制镜像
使用 Dockerfile 定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么无法重复的问题 ...
- Docker用Dockerfile定制镜像
用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那之前提示的无法重复的问题 ...
- Docker Dockerfile 定制镜像(转)
转自: https://yeasy.gitbooks.io/docker_practice/ 及 https://blog.csdn.net/wo18237095579/article/details ...
- 使用Dockerfile定制镜像
Dockerfile是一个文本文件,其中包含额一条一条的指令,每一条指令构建一层,因此每一条指令的作用就是描述这一层应当如何的构建. 以构建nginx镜像为例,使用Dockerfile构建的步骤如下: ...
- 利用 Dockerfile 定制镜像
镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像, 那么之前提及的无法重复的问题.镜像构建透明性的问题.体 ...
随机推荐
- 今天第一次解决了程序在未装VS和XP下运行的问题
http://www.cnblogs.com/zero5/p/3162948.html 一位素不相识的朋友做的代码雨屏保程序 - 残雪孤侠 - 博客园 上面是我的BLOG 群共享里,有程序和代码 ...
- 使用apache的poi来实现数据导出到excel的功能——方式一
利用poi导出复杂样式的excel表格的实现. 我们要实现的效果是: 我们利用提前设计好模板样式,再在模板中填充数据的方式. 首先,pom.xml引入poi. <dependency> & ...
- Redis-->windows上的安装教程
Windows下安装Redis服务 说明:本文拷贝自http://www.cnblogs.com/jaign/articles/7920588.html Redis是有名的NoSql数据库,一般Lin ...
- Angular 自定义管道
管道的作用就是将原始值进行转化处理,转换为所需要的值: 1. 新建sex-reform.pipe.ts文件 ng g pipe sex-reform 2. 编辑sex-reform.pipe.ts文件 ...
- Quartz系列(一):基础介绍
新建一个.NET Core控制台项目,NuGet引用Quartz引用. class Program { static void Main(string[] args) { var task = Tas ...
- groupadd、groupmod、groupdel、gpasswd、newgrp
1.groupadd [选项] 参数 添加组 -g:指定组ID -r:添加系统组 2.groupmod 修改组属性 -g :修改组ID -n:修改组名 3.groupdel 删除组 4.gpasswd ...
- K8s 从懵圈到熟练 – 镜像拉取这件小事
作者 | 声东 阿里云售后技术专家 导读:相比 K8s 集群的其他功能,私有镜像的自动拉取,看起来可能是比较简单的.而镜像拉取失败,大多数情况下都和权限有关.所以,在处理相关问题的时候,我们往往会轻松 ...
- [PHP] php, apache, VS Code安装与配置
1. 下载
- VGG(2014),3x3卷积的胜利
目录 写在前面 网络结构 multi-scale training and testing 其他有意思的点 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 VGG(2 ...
- Java读源码之ThreadLocal
前言 JDK版本: 1.8 之前在看Thread源码时候看到这么一个属性 ThreadLocal.ThreadLocalMap threadLocals = null; ThreadLocal实现的是 ...