docker镜像的创建

创建镜像有三种方法,分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。

1.基于现有镜像创建

(1)首先启动一个镜像,进入容器进行内容修改

先用现有镜像启动容器 
docker run
再进入容器进行内容更新
docker exec -it
​
docker run -id --name c1 centos:7 /bin/bash
docker exec -it c1 bash
yum install -y epel-release
yum install -y nginx
nginx
cd /usr/share/nginx/html/
echo '<h1>wx dsb</h1>' > wx.html
exit#修改后退出到宿主机

(2)然后将修改后的容器提交为新的镜像,需要使用该容器的 ID 号创建新镜像

最后提交成新的镜像
docker commit
​
例如:docker commit -m "nginx on centos7" -a "wxdsb" 9b1286a577ab nginx:ky33
#常用选项:
-m 说明信息;
-a 作者信息;
-p 生成过程中停止容器的运行。
​
docker images

2.基于模板文件创建

将本地容器导出为模板文件
docker export -o 模板文件名  容器名|容器ID
​
例如:
docker export -o nginx-centos.tar 9b1286a577ab
mv nginx-centos.tar  /opt将文件传到/opt
cd opt
ls查看
 
再将模板文件导入成镜像
docker import 模板文件名 --镜像名
例如:docker import nginx-centos.tar  -- nginx:centos7
docker images   #查看镜像
​
测试新镜像
docker run -id --name 
例如:
docker run -id --name c3 nginx:centos7 bash

3.基于Dockerfile创建

1)FROM 镜像

指定新镜像所基于的基础镜像,dockerfile的第一行指令必须为FROM 指令,每创建一个镜像就需要一条 FROM 指令

2)MAINTAINER 名字(可选)

指定镜像的维护人信息

3)RUN 命令

指定linux命令,尽量将多条linux命令放在一个run指令里,用 “ ;”或”&&“或<<EOF使用

4)EXPOSE 端口号

指定容器要开启的应用的端口号

5)ENV 环境变量 变量值

指定容器的环境变量

6)ADD/COPY

ADD 源文件/目录 目标文件/目录

COPY 源文件/目录 目标文件/目录

复制本地文件或目录到镜像里

7)VOLUME [“目录”]

指定容器的匿名数据卷(作用类似于docker run -v /var/lib/docker/volumes/容器ID/:容器数据卷目录)

8)USER 用户名/UID

指定容器云的用户

9)WORKDIR 路径

指定后续镜像层的工作目录

10)ARG

指定构建镜像时传入的参数变量(可通过“docker build --build-arg 变量=值”进行传入参数)

11)CMD/ENTRYPOINT

指定容器启动时执行的命令和参数

如何使用dockerfile构建镜像?

1.编写dockerfile文件,在第一行用FROM指令指定基础镜像

2.用MAINTAINER指令指定镜像维护人信息(可选)

3.用RUN EXPOSE ENV ADD COPY等指令编写构建镜像的过程

4.在Docekerfile结尾用CMD或ENTRYPOINT指令指定容器启动时执行的命令

5.用docker build -t build -t 镜像名:标签 . 命令来构建镜像

编写dockerfile的yum安装nginx步骤
在/opt下创建dockerfile
再在dockerfile下创建nginx目录
将nginx的repo包上传到nginx目录下,创建Dockerfile文件
​
vim Dockerfile 
​
#指定基础镜像
FROM centos:7
​
#指定维护人信息
MAINTAINER this is nginx image by yum install <hyh 20240125>
​
#编写构建镜像的过程
COPY nginx.repo /etc/yum.repos.d/
​
RUN yum install -y nginx
​
EXPOSE 80
#EXPOSE 443
#指定容器启动命令
CMD ["/usr/sbin/nginx","-g","daemon off;"]
​
​
docker build -t nginx:ky33 . #-t 指定要创建的nginx镜像名称 .代表从当前目录中搜索dockerfile文件
docker run -d -p 1314:80 nginx:ky33 
docker ps -a 
docker exec -it 容器ID bash
cd /usr/share/ngix/html
ls
echo '<h1>wx is dsb</h1>' >dsbwx.html
浏览器访问192.168.116.21:1314/dsbwx.html

通过源码编译安装nginx
改源码编译nginx脚本
vim dockerfileFROM centos:7
ADD nginx-1.24.0.tar.gz /opt/RUN yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make && \useradd -M -s /sbin/nologin nginx && \cd /opt/nginx-1.24.0/ && \./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && \make && make installENV PATH=$PATH:/usr/local/nginx/sbinEXPOSE 80
#EXPOSE 443ENTRYPOINT ["/usr/local/nginx/sbin/nginx"]
CMD ["-g","daemon off;"]docker build -t nginx:1.24 .docker run -d -p 1314:80 nginx:ky33 
docker ps -a 
docker exec -it 容器ID bash
cd /usr/share/ngix/html
ls
echo '<h1>wx is dsb</h1>' >dsbwx.html
浏览器访问192.168.116.21:1314/dsbwx.html
​
​
​

在编写 Dockerfile 时,有严格的格式需要遵循:

●第一行必须使用 FROM 指令指明所基于的镜像名称;

●之后使用 MAINTAINER 指令说明维护该镜像的用户信息;

●然后是镜像操作相关指令,如 RUN 指令。每运行一条指令,都会给基础镜像添加新的一层。

●最后使用 CMD 指令指定启动容器时要运行的命令操作。

ADD和COPY的区别?

共同点:都可以将本地的文件或目录复制到镜像里

区别:

  ADD还可以通过URL地址下载文件并复制到镜像里,还能将本地的压缩包解压后再复制到镜像里                     (URL下载和压缩包解压特性不能同时生效)

                  即通过URL下载的压缩包只能以压缩包的形式复制到镜像里

CMD和ENTRYPOINT的区别?

共同点:都可以用来指定容器的启动命令

区别:ENTRYPOINT指定的容器启动命令优先级更高

如果CMD和ENTRYPOINT同时存在,那么CMD指定的内容将作为ENTRYPOINT指定的容器启动命令的选项或参数使用

容器启动时运行命令的优先级

1.docker run --entrypoint="命令"

2.镜像里的ENTRYPOINT指令指定的“命令”

3.docker run …… 镜像“命令”

4.镜像里的CMD指令指定的“命令”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自然语言NLP学习

2-7 门控循环单元&#xff08;GRU&#xff09;_哔哩哔哩_bilibili GRU LSTM 双向RNN CNN 卷积神经网络 输入层 转化为向量表示 dropout ppl 标量 在物理学和数学中&#xff0c;标量&#xff08;Scalar&#xff09;是一个只有大小、没有方向的量。它只用一个数值就可以完全…

【自动化测试】读写64位操作系统的注册表

自动化测试经常需要修改注册表 很多系统的设置&#xff08;比如&#xff1a;IE的设置&#xff09;都是存在注册表中。 桌面应用程序的设置也是存在注册表中。 所以做自动化测试的时候&#xff0c;经常需要去修改注册表 Windows注册表简介 注册表编辑器在 C:\Windows\regedit…

【MySQL】计算日期是当前月份的第几周

力扣题 1、题目地址 2993. 发生在周五的交易 I 2、模拟表 表&#xff1a;Purchases Column NameTypeuser_idintpurchase_datedateamount_spendint (user_id, purchase_date, amount_spend) 是该表的主键(具有唯一值的列)。purchase_date 的范围从 2023 年 11 月 1 日到 2…

【linux】-telnet服务安装

1. 说明 telnet 分为 &#xff1a;telnet 服务端 和 telnet 客户端 本文只演示安装 telnet服务端 2. 安装telnet服务端、以及守护服务xinetd 2.1 检测telnet-server的rpm包是否安装 rpm -qa telnet-server 2.2 若未安装&#xff0c;则安装telnet-server&#xff0…

【Java基础】JVM关闭回调函数(ShutdownHook)的应用场景

文章目录 一.ShutdownHook介绍二.ShutdownHook被调用场景三.ShutdownHook如何使用四.ShutdownHook实践 一.ShutdownHook介绍 ShutdownHook就是一个简单的 已初始化 但是 未启动 的 线程 。当虚拟机开始关闭时&#xff0c;它将会调用所有已注册ShutdownHook的回调函数&#xff0…

Qt 基于海康相机 的视频标绘

需求&#xff1a; 基于 视频 进行 标注&#xff0c;从而进行测量。 曾经搞在线教育时&#xff0c;尝试在视频上进行文字或者图形的绘制&#xff0c;但是发现利用Qt widget 传sdk 句柄的方式&#xff0c;只能使用窗口叠加的方式&#xff08;Qt 基于海康相机的视频绘图_海康相…

专业144总分410+华南理工大学811信号与系统考研经验华工电子信息与通信

今年专业811信号与系统144&#xff08;二战&#xff0c;感谢信息通信Jenny老师专业课对我的巨大提高&#xff0c;第一年自己复习只考了90&#xff0c;主要栽专业课和数学&#xff09;总分410含泪&#xff08;二战的同学都知道苦&#xff0c;成功来之不易&#xff09;考上华南理…

java servlet 高校田径运动会管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 jsp高校田径运动会管理系统是一套完善的java web信息管理系统 采用mvc模式 servletdaobean 模式开发&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myecl…

Kafka-消费者-KafkaConsumer分析总结

KafkaConsumer依赖SubscriptionState管理订阅的Topic集合和Partition的消费状态&#xff0c;通过ConsumerCoordinator与服务端的GroupCoordinator交互&#xff0c;完成Rebalance操作并请求最近提交的offset。 Fetcher负责从Kafka中拉取消息并进行解析&#xff0c;同时参与posi…

[git] windows系统安装git教程和配置

一、何为Git Git(读音为/gɪt/)是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 二、git安装包 有2种版本&#xff0c;Git for Windows Setup和Git for Windows Portable(便携版)两个版本都可以。 三、Git for Windows Por…

手动搭建koa+ts项目框架(apidoc文档篇)

文章目录 一、安装apidoc工具二、使用1、项目根目录新建apidoc.json2、定义接口路由上方注解对应信息3、配置静态文件访问目录4、生成api文档如有启发&#xff0c;可点赞收藏哟~ 一、安装apidoc工具 全局安装 npm i apidoc -g查看是否安装成功 apidoc -v二、使用 1、项目根…

1. MySQL 数据库

本章内容 关系型数据库基础 安装 MySQL 管理数据库和表 用户和权限管理 函数&#xff0c;存储过程&#xff0c;触发器和事件 MySQL 架构 存储引擎 服务器选项&#xff0c;系统和状态变量 优化查询和索引管理 锁和事务管理 日志管理 备份还原 MySQL 集群 压力测试…

linux-centos服务器离线安装yapi(包含nodejs、mongodb、yapi、pm2离线安装)

yapi是使用vue框架开发的,借助nodejs 前端直接访问的mongodb数据库,离线安装yapi步骤如下 下载离线安装包 下载地址 https://download.csdn.net/download/qq445829096/88778418 离线安装包先复制到 dev/yapi目录(根据自己习惯自定义目录) node-v12.13.0-linux-x64.tar.xz …

群辉NAS的远程访问

群辉NAS是私有云存储&#xff0c;局域网访问很容易【详见&#xff1a;网上邻居访问设置、其它设备的访问设置】&#xff0c;远程访问相对复杂&#xff0c;涉及很多关键因素&#xff0c;现将过程记录如下&#xff1a; 目录 1、互联网接入 2、绑定MAC与IP地址 3、路由器开启5…

SpringMVC-HttpMessageConverter 报文信息转化器

文章目录 HttpMessageConverter一、概念二、RequestBody三、RequestEntity四、 ResponseBody1.返回JSON格式的字符串 五、RestController六、ResponseEntity HttpMessageConverter 一、概念 报文信息转化器&#xff0c;将请求报文转化为Java对象&#xff0c;或将Java对象转化…

Java笔记(死锁、线程通信、单例模式)

一、死锁 1.概述 死锁 : 死锁是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法往下执行。此时称系统处于死锁状态或系统产生了死锁&#xff0c;这些永远在互相等待的进…

Leetcode 俩数之和(哈希)

一、题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以…

【LMDeploy 大模型量化部署实践】学习笔记

参考学习教程【LMDeploy 的量化和部署】 理论 作业 使用 LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署 InternLM-Chat-7B 模型&#xff0c;生成 300 字的小故事 本地对话 API服务 Client 命令 端口转发 网页Gradio

一文学习Thrift RPC

Thrift RPC引言 Thrift RPC的特点 Thrift 是一个RPC的框架&#xff0c;和Hessian RPC有什么区别&#xff0c;最重要的区别是Thrift可以做异构系统开发。 什么是异构系统&#xff0c;服务的提供者和服务的调用者是用不同语言开发的。 为什么会当前系统会有异构系统的调用&…

【WPF.NET开发】WPF 中的 Layout

本文内容 元素边界框布局系统测量和排列子元素面板元素和自定义布局行为布局性能注意事项子像素渲染和布局舍入 本主题介绍 Windows Presentation Foundation (WPF) 布局系统。 了解布局计算发生的方式和时间对于在 WPF 中创建用户界面非常重要。 1、元素边界框 在 WPF 中构…