查看镜像构建的历史

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. dotnet 7 WPF 破坏性改动 按下 F3 让 DataGrid 自动排序

    本文记录在 dotnet 7 下的 WPF 的一个破坏性改动.在 dotnet 7 下的 WPF 支持 DataGrid 在按下 F3 键的时候,自动按照当前所选列进行列自动排序.这将会让原本采用 F ...

  2. WPF 通过 Windows Template Studio 快速搭建项目框架和上手项目

    本文对新手友好.在咱开始一个新项目的时候,可以利用 Windows Template Studio 快速搭建整个项目的框架.搭建出来的框架比较现代化,适合想要快速开发一个项目的大佬使用,也适合小白入门 ...

  3. 五:瑞芯微RV1109

    瑞芯微RV1109是一款用于工控机或人工智能视觉应用的高性能机器视觉处理器SoC. 参考资料 http://www.neardi.com/news_22/434.html https://www.ro ...

  4. MSP 通过 Splashtop SOS 远程支持非托管设备

    RMM 是 MSP 的绝佳工具.它们使 MSP 可以通过集中控制台来管理其所有客户计算机,通常使他们能够远程访问任何计算机以提供远程支持. 但是,这样做的一个很大限制是--并非所有客户设备都在 MSP ...

  5. 网络拓扑—WEB-IIS服务搭建

    目录 WEB-IIS服务搭建 网络拓扑 配置网络 IIS PC 安装IIS服务 配置IIS服务(默认站点) PC机访问网页 配置IIS服务(新建站点) PC机访问网页 WEB-IIS服务搭建 网络拓扑 ...

  6. C语言:通讯录程序设计(多功能)

    回顾我的代码shi 通讯录程序设计 主函数 遇到的困难 补充标注说明(一定要看) 效果展示截图 结语 程序源代码 通讯录程序设计 作者前言:该通讯录作品是我大一的C语言结课作业,代码像shi山一样,之 ...

  7. Bear and String Distance

    传送锚点: codeforces.com Copy 4 26 bear output roar input 2 7 af output db input 3 1000 hey output -1 思路 ...

  8. 像阿里OSS一样的文件对像存储服务,容器实现 docker初探及minio测试

    像阿里OSS一样的文件对像存储服务,容器实现 docker run -p 8000:9000 --name oss-minio -d -e "MINIO_ACCESS_KEY=AKIAIOS ...

  9. bashrc和profile区别

    转载请注明出处: 作用与目的: .bashrc:这个文件主要用于配置和自定义用户的终端环境和行为.每次启动新的终端时,.bashrc文件都会被执行,加载用户设置的环境变量.别名.函数等.这使得用户能够 ...

  10. Hive 在工作中的调优总结

    总结了一下在以往工作中,对于Hive SQL调优的一些实际应用,是日常积累的一些优化技巧,如有出入,欢迎在评论区留言探讨~ 一.EXPLAIN 查看执行计划 二.建表优化 2.1 分区 分区表基本操作 ...