查看镜像构建的历史

docker image history 26a5       #查看镜像26a5的构建历史

使用commit命令构建镜像

使用commit命令可以将容器构建成镜像。

  • 将容器webserver制作为镜像nginx:v2
docker commit \
--author "Tao Wang <twang2218@gmail.com>" \ #指定镜像作者
--message "修改了默认网页" \ #指定镜像的描述信息。
webserver \ #容器名
nginx:v2 #新镜像名

实验

docker container run -d -p 8080:80 --name "webserver" nginx
docker exec -it webserver bash
cd /usr/share/nginx/html
echo "hello" > index.html #修改主页文件index.html
exit #退出容器
docker commit webserver nginx:v2 #将容器webserver构建成镜像nginx:v2
docker container run -d -p 8090:80 --name "webserver2" nginx:v2 #根据新构建的镜像启动容器
#测试:curl 127.0.0.1:8090,会返回hello

commit命令的弊端

镜像是分层的,如上例中的nginx:v2比nginx多了一层(将webserver的可写层制作成了镜像)
当我们多次使用commit制作镜像,镜像就会变得很臃肿,拥有很多层,这导致镜像的管理,传输等过程中效率低下。
如,我们将nginx中的index.html修改为123,下一次又修改为456,修改了很多次,最后又变成了123。那么中间的镜像就是多余了。
使用Dockerfile可以解决这个问题。


使用Dockerfile制作镜像

Dcokerfile是一个文件,里面说明了镜像如何制作。

  • 用一个例子来入门
vim Dockerfile
FROM centos:7
MAINTAINER flight
CMD [ "sh", "-c", "echo $HOME" ]
docker build -t centos:v1 .
docker run centos:v1 #输出家目录后退出
docker run centos:v1 echo hello #输出hello之后退出 #Dockerfile文件解释:
#FROM centos:7 #指定base镜像(根据bash镜像制作新的镜像)
#MAINTAINER flight #维护者(作者)
#CMD [ "sh", "-c", "echo $HOME" ] #启动镜像后运行此命令(使用docker run时可以在命令最后添加新的命令将CMD替换)

通常会使用centos、ubuntu等base镜像进行制作。

Dockerfile的参数
FROM centos			#指定base镜像
MAINTAINER flight #指定作者
ENV WELCOME "hello" #设置环境变量,ENV a=123 b="456 789"
ARG WELCOME[=hello] #设置环境变量,但容器中不存在这些变量。可以用--build-arg WELCOME=hi来覆盖
EXPOSE 8080 8888 #指定容器监听端口
VOLUME /data #定义匿名卷(/var/lib/docker/volumes下)
WORKDIR /testdir #设置当前工作目录
RUN touch 1.txt #运行命令(一条RUN指令建立一层镜像,可使用&&将命令串起来)
COPY ./src dst #将文件从本机复制到镜像中(目标路径不存在则自动创建)
ADD ./src dst #与COPY类似,但可以复制压缩文件(会自动解压)
CMD [ "sh", "-c", "echo $HOME" ] #默认执行命令(启动镜像时就会执行),docker run最后使用新的命令替换CMD
ENTRYPOINT [ "sh", "-c", "echo $HOME" ] #docker run之后得参数作为参数传递给ENTRYPOINT
docker build -t ryan/nginx:v3 .
-t #指定新镜像name和tag
-f #可以指定Dockerfile文件名(默认文件名为Dockerfile)

20-Docker镜像制作的更多相关文章

  1. MySQL、MongoDB、Redis数据库Docker镜像制作

    MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...

  2. docker研究-4 docker镜像制作

    这次实验以centos镜像为基础镜像进行相关docker镜像制作. 1. 下载centos镜像 [root@localhost ~]# docker pull centosUsing default ...

  3. 《Docekr入门学习篇》——Docker镜像制作

    Docker镜像制作 Docker镜像的构建分为两种,一种是手动构建,一种是dockerfile(自动构建) 手动构建 基于centos镜像进行构建制作Nginx镜像 [root@rbtnode1 ~ ...

  4. Docker 镜像制作教程:针对不同语言的精简策略

    本系列文章将分为三个部分: 第一部分着重介绍多阶段构建(multi-stage builds),因为这是镜像精简之路至关重要的一环.在这部分内容中,我会解释静态链接和动态链接的区别,它们对镜像带来的影 ...

  5. Nginx+PHP7.3.9 Docker镜像制作

    最近因项目需要制作了多个版本的php docker镜像,制作过程可谓是一波三折,因基于yum的方式安装php的方式在安装扩展插件时很不方便,不容易找到插件对应的yum源,所以PHP在docker镜像中 ...

  6. doris 0.9.0版本docker镜像制作与使用

    1. 安装docker 详情请参见本人博客 2. 编译doris 详情请参见doris官网文档 3. 在编译好的doris output文件夹下编写两个Dockerfile 3.1  Dockerfi ...

  7. presto-gateway 试用以及docker 镜像制作

    presto-gateway 是 lyft 团队开源 的prestodb 的工具.以下是一个简单的试用,以及碰到问题的解决 还有就是docker 镜像的制作 Dockerfile 很简单,本地构建然后 ...

  8. 实战【docker 镜像制作与使用】

    一.制作docker 镜像 使用spring boot 构建一个简单的web 项目,返回 “Hello,World ”字符串,使用 Maven 打成 jar 包,使用的Linux 环境是 Centos ...

  9. docker镜像制作及发布

    以centos为例. 主要内容:安装docker,制作镜像,发布镜像. 安装docker 1. 安装docker yum install -y docker 等待一会,安装成功,查看安装列表 2. 启 ...

  10. docker镜像制作Dockerfile

    使用 Dockerfile 定制镜像 从刚才的 docker commit 的学习中,我们可以了解到,镜像的定制实际上就是 定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作 的 ...

随机推荐

  1. 这款 AI 代码辅助插件真不错,还能帮你发现 bug!

    大家好,我是树哥. 随着 ChatGPT 风靡全球之后,编程界也迎来了许多代码辅助工具,有非常出名的 Github Copilot 工具.今天,树哥给大家介绍一款免费的代码辅助插件,它无需代理上网,直 ...

  2. dotnet 如何将 Microsoft.Maui.Graphics 对接到 UNO 框架

    本文将和大家介绍如何将 Microsoft.Maui.Graphics 对接到 UNO 框架里面.一旦完成 Microsoft.Maui.Graphics 对接,即可让 UNO 框架复用现有的许多绘制 ...

  3. 用 C# 写脚本 如何输出文件夹内所有文件名

    大部分在 Windows 下的脚本都是使用 bat 或 cmd 写的,这部分的脚本对我来说可读性不好.这个可读性也是很主观的,对我来说用 C# 写脚本的可读性很强,但是换个小伙伴就不是了.在 .NET ...

  4. redo日志全部丢失的情况下。Oracle的实例恢复

    场景: redo日志全部丢失的场景. alert日志报错如下: ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员 ORA-00312: 联机日志 1 线程 1: '/u01/app/ ...

  5. MQ消息积压,把我整吐血了

    前言 我之前在一家餐饮公司待过两年,每天中午和晚上用餐高峰期,系统的并发量不容小觑. 为了保险起见,公司规定各部门都要在吃饭的时间轮流值班,防止出现线上问题时能够及时处理. 我当时在后厨显示系统团队, ...

  6. JDK源码阅读-------自学笔记(二十)(java.util.List初探)

    List简介 List是有序.可重复的容器. 有序:List中每个元素都有索引标记.可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素. 可重复:List允许加入重复的元素.更 ...

  7. Vue3开发新范式,不用`ref/reactive`,不用`ref.value`

    什么是Cabloy-Front? Cabloy-Front 是一款支持 IOC 容器的 Vue3 框架.不用ref/reactive,不用ref.value,不用pinia 与UI库的配合 Cablo ...

  8. MinIo对象存储文件上传,下载,预览,批量上传,创建桶等

    MinIo 操作工具类 MinIo 旧中文文档 MinIo 英文文档 MinIo 官网地址 https://min.io/ package com.ming.utils; import io.mini ...

  9. 张同乐-从零开始,打造高效可靠的Locust性能测试

    一.前言 欢迎来到Locust负载测试的世界!Locust是一款开源的负载测试工具,它可以模拟成千上万的用户同时访问你的应用程序,以测试其性能和稳定性. 这个工具具有易于使用.可扩展和高度可定制化等特 ...

  10. 把nacos安装成windows服务

    方式一: 用sc的方式安装和删除服务 摘自:https://blog.csdn.net/qq_33803102/article/details/109024989 sc create nacos st ...