《蹲坑学Docker》之八:制作Docker镜像(一)
wptr33 2024-11-13 15:04 23 浏览
有时候从Docker镜像仓库中下载的镜像不能满足要求,我们可以基于一个基础镜像构建一个自己需要的镜像。那么,在什么情况下需要自己构建镜像呢?
- 找不到现有的镜像,比如自己开发的应用程序;
- 需要在镜像中加入特定的功能。
Docker构建镜像的方法常用的有两种:
- docker commit命令
- Dockerfile构建文件
这一章节主要来学习使用docker commit命令来构建Docker镜像。
Docker commit构建镜像主要有三步:
- 运行容器
- 修改容器
- 将容器保存为新的镜像
下面,我们一起逐步学习docker commit命令构建镜像的方法,以部署nginx web服务为例:
1、运行容器
1)下载Base镜像,下载CentOS作为基础镜像。
[root@docker-1 ~]# docker pull centos
[root@docker-1 ~]# docker images
2)运行容器
[root@docker-1 ~]# docker run -itd centos /bin/bash
3)查看容器运行状态
[root@docker-1 ~]# docker ps
2、修改容器
1)登录容器
[root@docker-1 ~]# docker exec -it 1aee656e1570 /bin/bash
2)确认软件工具是否安装。
发现vim、ifconfig、nginx都无法使用,那么怎么办?我们需要把vim软件、ifconfig工具包安装,部署好nginx服务。
3)安装vim、ifconfig和nginx
[root@1aee656e1570 /]# /usr/bin/yum install -y vim
[root@1aee656e1570 /]# /usr/bin/yum install -y net-tools
[root@1aee656e1570 /]# /usr/bin/yum install -y nginx
安装完nginx,配置nginx服务自动启动。
[root@1aee656e1570 /]# nginx -t ##检查nginx配置是否正确
[root@1aee656e1570 /]# nginx ##启动nginx服务
[root@1aee656e1570 /]# vim /etc/rc.local ##自动启动nginx服务。
修改:
/bin/bash /usr/sbin/nginx
4)安装确认完毕
到此、容器更新及完毕了,
3、将容器保存为新的镜像
1)查看容器的ID
[root@docker-1 ~]# docker ps
容器ID为1aee656e1570。
2)保存容器为镜像
[root@docker-1 ~]# docker commit 1aee656e1570 nginx
3)查看镜像
[root@docker-1 ~]# docker images
通过查看,本地多了一个名字为nginx,ImageID为bb5e91a4cadf的镜像,说明nginx镜像构建就成功了。
最后、验证一下新构建的镜像是否可以正常使用。
1、启动容器
[root@docker-1 ~]# docker run -itd -p 80:80 --name web-1 nginx /bin/bash
2、登录容器并启动nginx服务。
3、访问nginx服务
上面演示了如何使用commit创建新的镜像,但是docker并不建议使用这种方式创建镜像,原因如下:
这是一种手工创建镜像的方式,容易出错,效率低且可重复性弱;
使用者并不知道镜像是如何创建出来的,里面是否有恶意程序。也就是说无法对镜像进行审计,存在安全隐患。如下图所示,在镜像历史记录中并没有发现添加vim、net-tools和nginx的分层。
为此,建议使用Dockerfile来构建镜像。下一章节,我们将重点学习Dockerfile来构建镜像,敬请期待!
相关推荐
- Python 中 必须掌握的 20 个核心:str()
-
str()是Python中用于将对象转换为字符串表示的核心函数,它在字符串处理、输出格式化和对象序列化中扮演着关键角色。本文将全面解析str()函数的用法和特性。1.str()函数的基本用法...
- python中的函数报错后继续运行而不是停止整个程序
-
要让main...
- 如何在身份证号码中提取出生年月日的函数公式
-
在不同软件中,从身份证号码提取出生年月日的函数公式不同,以下是常见软件的方法:Excelo假设身份证号码在A列,在B列提取出生年月日,在B2单元格输入公式=TEXT(MID(A2,7,8),"...
- sql中的一些CTE和开窗函数相关用法
-
CTE的优势提高可读性:将复杂查询分解为更简单的部分避免重复子查询:同一CTE可以在查询中多次引用递归查询:处理层次结构数据模块化SQL:将复杂查询拆分成逻辑模块...
- 【SQL】SQL 语法差异大全(PgSQL/MySQL/Oracle/TiDB/OceanBase)
-
以下是针对不同数据库系统的SQL语法差异总结,按功能分类展示:一、基础查询1.分页查询...
- MySQL索引:从原理到实战的终极指南
-
MySQL索引原理揭秘MySQL索引是数据库高效查询的核心机制,其原理基于特定的数据结构(主要是B+Tree)和数据库引擎(如InnoDB)的实现策略。索引本质上是一种空间换时间的策略,虽然会占...
- 如何在本地安装开源人工智能Agent——AutoGen Studio的安装
-
AutoGen是微软出品的一个用于创建可自主行动,或与人类协同工作的多智能体AI应用程序的框架。下面来介绍如何在本地安装AutoGenStudio,AutoGenStudio是一个低代码界...
- 小巧WinForm库存系统,竟能实现这些功能?
-
第一次体验真正“握在手里的”库存控制,是在一个微型工厂的仓库运输带旁。顶着仓库里金属味和三十几平米的闷热,老王蹲在地上,一边用笔在账本上划格,一边嘴里嘟囔:“每次都说要数字化管理,数字在哪儿呢?”透过...
- 有关SQLite数据库的介绍
-
SQLite,是一种轻型的数据库,它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/U...
- SQLite 数据库Web管理工具
-
概述SQLite数据库以其轻量级和易于配置的特点,成为了许多项目中的首选数据库。尽管它的便捷性受到了广泛的认可,但对于数据库的管理和维护,尤其是在没有图形界面工具的情况下,开发者往往需要通过复杂的命...
- SqlLite数据库注意要点分析
-
1.验证sqlite是否安装配置好了。执行sqlite3命令。当执行该命令的时候没有传递任何参数表示默认连接到了一个内存数据库,当退出该程序的时候,数据库自动销毁。退出命令:.quit.ex...
- python 连接sqlite
-
在Python中,你可以使用标准库sqlite3来连接SQLite数据库。在Python中,sqlite3模块是内置的,无需使用pip进行安装。sqlite3模块提供了与SQ...
- 提升数据库搜索效率:探索SQLite的向量搜索扩展
-
大家好!今天我们要聊一个特别酷炫的东西——sqlite-vec,一个能让SQLite飞起来的向量搜索扩展。如果你对数据库的搜索速度不满意,那你可得好好看看这篇文章了。...
- Qt编程进阶(21):Qt操作SQLite数据库及实例
-
QtSql模块Qt提供的QtSql模块实现了对数据库的访问,同时提供了一套与平台和具体所用数据库均无关的调用接口。此模块为不同层次的用户提供了不同的丰富的数据库操作类。例如,对于习惯使用SQL语法的用...
- 5分钟快速掌握在Python使用SQLite数据库,
-
小巧、稳定、快速!我为什么喜欢用SQLite...
- 一周热门
-
-
因果推断Matching方式实现代码 因果推断模型
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
git pull命令使用实例 git pull--rebase
-
git 执行pull错误如何撤销 git pull fail
-
面试官:git pull是哪两个指令的组合?
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)