查看镜像构建的历史

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. 每天5分钟复习OpenStack(十三)存储缓存技术Bcache

    Ceph作为一个分布式存储,在项目中常见的形态有两者,一种是采用 SSD 或NVME 磁盘做Ceph的日志盘,使用SATA磁盘来做数据盘.这样的好处是比较经济实惠.另一种则是全部采用 SSD 或NVM ...

  2. 2018-11-14-git无法pull仓库refusing-to-merge-unrelated-histories

    title author date CreateTime categories git无法pull仓库refusing to merge unrelated histories lindexi 201 ...

  3. 12.prometheus监控之Domain域名过期监控

    一.域名过期时间监控 域名的监控通过domain_exporter来完成 domain_exporter:https://github.com/caarlos0/domain_exporter/rel ...

  4. docker安装Mysql挂载数据卷 实现容器配置本地化

    目录 一.安装docker 二.docker安装MySQL 安装5.7.31版本的mysql navicat 连接mysql 安装mysql:8 三.设置开机自动启动容器 Docker快速创建MySQ ...

  5. web页面打开直接调用vlc播放视频

    简介 大家都知道现在我们在网页所播放的视频都是h264编码格式,可以供所有设备正常播放.然而,相比h265它的体积更大.质量更差.目前h265大多应用于安防,体积小可以更好的存储,不过它也有着缺点,成 ...

  6. 🔥httpsok彻底告别SSL证书续期烦扰

    httpsok彻底告别SSL证书续期烦扰 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx .OpenResty 服务器设计.已服务众多中小企业,稳定.安全.可靠. ...

  7. jeecgboot项目swagger2在线接口转word

    1.先找到接口文档地址 2.根据url获取接口数据 3.利用在线工具进行转换生成word 在线工具地址:在线swagger转word文档  生成的word文档如下:  

  8. 利用pearcmd实现裸文件包含

    利用pearcmd实现裸文件包含 在 ctf 中,常常有这样一类题: 题目很简单,一般围绕一个 include 函数展开. 例: ctfshow 元旦水友赛 easy_include 这类题目没有提供 ...

  9. Advanced .Net Debugging 8:线程同步

    一.介绍 这是我的<Advanced .Net Debugging>这个系列的第八篇文章.这篇文章的内容是原书的第二部分的[调试实战]的第六章[同步].我们经常写一些多线程的应用程序,写的 ...

  10. IDEA社区版(IDEA Community Edition)创建Springboot父子项目

    1. 因为社区办不支持使用spring Spring Initializr 的方式创建项目, 但是我们可以考虑使用别的方式达到效果: 创建方式有3种: 第一种:使用https://start.spri ...