容器化-Docker自定义镜像

容器化-Docker-基础 创建Dockerfile定义基础镜像与定制步骤使用命令生成自定义镜像通过docker tag打标签后推送至仓库专注业务逻辑,无需关心环境差异秒级启动容器,支持弹性扩展统一管理数百个微服务实例,故障恢复时间从小时级缩短至分钟级掌握 Docker 核心概念(镜像 / 容器 / 仓库)、熟练编写 Dockerfile、精通常用操作命令,是进入云原生领域的必备技能。 阅读详情

自定义镜像的核心是 Dockerfile。

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

镜像构建需要一个基础镜像,和其他命令一起来完成。

Dockerfile 的指令

FROM :指定基础镜像(FROM是必备的指令,并且必须为第一条指令)。

RUN : 用来执行命令行命令。其基本格式:
    shell格式: RUN  <命令>  ,输入在bash环境中的命令即可,一个dockerfile允许使用RUN不得超过127层,所以,使用一次RUN, 使用 ‘ \ ’ 换行,使用‘ && ’执行下一条命令。一般使用此种格式;
    exec格式: RUN  <"可执行文件", "参数1", "参数2">,此种方式像是函数调用中的格式;
    
COPY :  复制文件。 其基本格式:
    格式1:COPY <源路径>...<目标路径>
    格式2:COPY [“<源路径1>”,....."<目标路径>"]

ADD : 更高级的复制文件,在COPY的基础上增加了一些功能,如果复制的是压缩包的话,会直接解压,而不需要在使用RUN解压;

CMD :容器启动命令。其基本格式:
    shell格式: CMD <命令>
    exec格式: CMD ["可执行文件", "参数1", "参数2"...]
    参数列表格式: CMD [“参数1”, “参数2”...],在指定了ENTRYPOINT指令后,用CMD指定具体的参数
    
ENTRYPOINT : 入口点。其基本格式分为exec和shell,
    ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。ENTRYPOINT在运行中可以替代,不过比CMD繁琐,需要通过docker run 的参数--entrypoint 来指定。当指定了ENTRYPOINT后,CMD的含义就发生了改变,不在是直接运行其命令,而是将CMD的内容作为参数传递给ENTRYPOINT指令。其执行时就变成了:  <ENTRYPOINT> "<CMD>"

ENV : 设置环境变量。(都可以使用这里使用的变量)其基本格式:
    格式1:ENV <key> <value>
    格式2:ENV <key1>=<value1> <key2>=<value>...

ARG : 构建参数。构建参数和ENV的效果一样,都是设置环境变量,所不同的是ARG所构建的环境变量在将来容器运行时是不存在的。其基本格式:
    格式1: ARG <参数名> [=<默认值>]
    格式2: 该默认值可以在构建命令 docker build  中用 --build-arg <参数名>=<值> 来覆盖

VOLUME : 定义匿名卷。 其基本格式:
    格式1: VOLUME ["<路径1>", "<路径2>"...]
    格式2: VOLUME <路径>

EXPOSE :  暴露端口。EXPOSE指令是声明运行时容器所提供的端口,在启动容器时不会在因为这个声明而开启端口。 其基本格式:
    格式1: EXPOSE <端口1> [<端口2>...]

WORKDIR : 指定工作目录。其基本格式:
    格式1: WORKDIR <工作目录路径>

USER : 指定当前用户。USER是帮助你切换到指定用户。 其基本格式:
    格式1: USER <用户名>

HEALTCHECK : 健康检查,判断容器的状态是否正常。 其基本格式:
    格式1: HEALTCHECK [选项] CMD <命令> :设置检查容器健康状况的命令
    格式2: HEALTCHECK NONE: 如果基础镜像有健康检查指令,使用此格式可以屏蔽掉其健康检查指令

Dockerfile 的核心指令

FROM 指定基础镜像构建

		写法:
		FROM 指定基础镜像

COPY 复制命令。从上下文目录中复制文件或者目录到容器里指定路径。

		写法:
		COPY 源路径,目标路径
    COPY ["源路径","目标路径"]	

RUN 运行指令。构建的时候运行的指令

		主要在于镜像构建的时候运行,运行build命令的时候 
		后面接的命令就是shell输入的命令
    
		写法
		RUN  shell命令 参数1 参数2
		RUN ["shell命令 ","参数1"," 参数2"]

		例如:
		RUN ["echo",">"," /usr/share/index.html"]

CMD 运行指令。运行容器时候运行的指令

		主要在于镜像运行容器的时候生成,运行run的时候运行

		写法
		CMD <shell 命令> 
		CMD ["<可执行文件或命令>","<param1>","<param2>",...] 

		例如:
		CMD ["dotnet","rmcore.dll"]

		缺点:在run 命令后面可以进行覆盖
		docker run -d -P  rmcore dotnet rmcore.dll 进行覆盖掉

ENTRYPOINT 运行指令。运行容器时候运行的指令(不会被覆盖)

		写法
		ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
		可以和CMD动态结合,设置动态的配置参数

		例如 
		ENTRYPOINT ["nginx", "-c"] 定参
		CMD ["/etc/nginx/nginx.conf"]变参

EXPOSE 暴露端口指令

		仅仅声明端口,就是指定镜像暴露的端口
		在run 的时候,通过docker run -p 会自动随机映射到EXPOSE端口

		写法
		EXPOSE 端口
		EXPOSE 端口

		例如 
		EXPOSE 5000
		EXPOSE 5001

WORKDIR 工作目录指令

		用于应用在容器内的工作目录,就好比:ruanmou目录
	
		写法
		WORKDIR <工作目录路径>

		例如
		WORKDIR /rmcore
		或者
		WORKDIR /nginx

nginx 做成一个镜像

Linux上面:如何运行nginx

1 安装 nginx需要工具
     yum -y install gcc make pcre-devel zlib-devel tar zlib
2 下载nginx
     wget  http://nginx.org/download/nginx-1.15.2.tar.gz
3 nginx解压/nginx目录
    tar -zxvf  nginx-1.15.2.tar.gz
4 切换到/nginx/nginx-1.15.2
    执行./configure
        make
        make install 进行安装
5 切换到/usr/local/nginx/sbin
    执行 ./nginx 
    启动nginx

docker 中容器运行 nginx 那也是这5个步骤

创建 nginx 文件夹 <font style="color:rgb(51, 51, 51);">mkdir nginx</font>

下载 nginx wget http://nginx.org/download/nginx-1.15.2.tar.gz

nginx 中创建 Nginx 脚本文件 nginx.sh <font style="color:rgb(51, 51, 51);">touch nginx.sh</font>

#!/bin/sh
/usr/local/nginx/sbin/nginx
/bin/bash -c 'while true; do sleep 200; done'

创建 Dockerfile 文件 <font style="color:rgb(51, 51, 51);">touch Dockerfile</font>

FROM centos
RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
WORKDIR /nginx
COPY nginx-1.15.2.tar.gz /nginx
RUN tar -zxvf  nginx-1.15.2.tar.gz
RUN cd nginx-1.15.2 && ./configure && make && make install
EXPOSE 80
COPY nginx.sh /nginx.sh
RUN chmod 755 /nginx.sh
CMD ["/nginx.sh"]

在 nginx 文件夹下有 Dockerfile 文件的目录,执行构建镜像命令

docker build -t mynginx .

但是报错了

这个错误是在执行 <font style="color:rgba(0, 0, 0, 0.85);">yum install</font> 命令时发生的,具体问题是无法解析主机名 <font style="color:rgba(0, 0, 0, 0.85);">mirrorlist.centos.org</font>。

针对 CentOS 7 的镜像源问题,最有效的解决方案是替换为阿里云或其他可用的镜像源。以下是修改后的 Dockerfile:

FROM centos:7

# 替换CentOS 7镜像源为阿里云
RUN sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-* && \
    sed -i 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-* && \
    # 安装必要的软件包
    yum -y install gcc make pcre-devel zlib-devel tar zlib && \
    # 清理yum缓存以减小镜像大小
    yum clean all && \
    rm -rf /var/cache/yum

WORKDIR /nginx
COPY nginx-1.15.2.tar.gz /nginx
RUN tar -zxvf  nginx-1.15.2.tar.gz && \
    cd nginx-1.15.2 && \
    ./configure && \
    make && \
    make install && \
    # 清理编译文件
    cd .. && \
    rm -rf nginx-1.15.2 nginx-1.15.2.tar.gz

EXPOSE 80
COPY nginx.sh /nginx.sh
RUN chmod 755 /nginx.sh
CMD ["/nginx.sh"]

成功构建镜像

运行 nginx 镜像 docker run -d -P mynginx

进入容器
docker exec -it nginx /bin/bash
退出容器
exit命令

随后在浏览器中访问 32768 端口即可访问。

Docker自定义镜像总结

1、Dockerfile

2、了解Docker 指令

3、配置Dockerfile:使用指令操作 原始Linux运行nginx命令

4、构造自定义镜像

5、运行自定义镜像,得到容器

Docker自定义 .NET 项目镜像

1、安装.NET7 SDK

yum

2、切换到pulish中

cd pulish

3、运行项目

dotnet MyWebApi.dll

FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /publish
EXPOSE 80
EXPOSE 443
COPY publish/ /publish
ENTRYPOINT ["dotnet", "MyWebApi.dll"]
docker build -t mywebapi .
docker run -d -P mywebapi
轻松上手 Docker:容器化技术的神奇之旅 构建完成后,使用docker run命令运行我们自己构建的镜像:收起bash此时,在浏览器中访问,就可以看到我们的 Flask 应用输出的。通过本文,我们对 Docker 有了一个全面的了解,从它的基本概念、优势,到安装和基本操作,再到如何构建自己的镜像。Docker 为我们提供了一种高效、便捷的应用程序打包和部署方式,在现代软件开发流程中发挥着越来越重要的作用。希望这篇教程能帮助你快速入门 Docker,开启容器化技术的探索之旅。 阅读详情

相关推荐

Docker: 使用容器化数据库

自定义数据库镜像允许您在基础数据库镜像上添加配置、脚本和初始数据,以便快速部署您的数据库。Dockerfile 提供了一种描述如何构建镜像的简单语法。在构建过程中,您可以添加配置文件、创建数据库和表,甚至插入初始数据。此命令告诉 Docker 使用当前目录中的 Dockerfile 构建镜像,并将其标记为。此时,您的容器将根据 Dockerfile 中的指示运行 MySQL,并使用指定的配置和初始数据进行初始化。本指南演示了如何使用 Docker 运行、管理和定制容器化数据库。

美味小鱼的杂货铺 2025

认识 Dockerfile 文件之镜像构建

Dockerfile指令详见; 如何通过Dockerfile文件构建基于 .net core项目的镜像文件;

ChaITSimpleLove的博客 395

32、Docker入门:容器化技术的实用指南

本文是一篇关于Docker入门的实用指南,详细介绍了容器化技术的优势,以及如何使用Docker构建、管理和运行容器。内容涵盖Docker的安装、常用命令、自定义镜像的创建、常见问题的解决方法以及高级功能展望。通过学习本文,读者能够快速掌握Docker的基础知识并应用于实际项目中。

b9c0d的博客 82

Nginx 安装手册

linux环境下安装nginx步骤 开始前,请确认gcc g++开发类库是否装好,默认已经安装。   ububtu平台编译环境可以使用以下指令 apt-get install build-essential apt-get install libtool   centos平台编译环境使用如下指令   安装make: yum -y install gcc automake autoco...

菜鸟先飞 434

【XR技术介绍】深度解析|AI眼镜核心技术架构:从硬件层到端云AI全链路拆解

本文将逐层拆解AI眼镜完整技术架构,梳理硬件、感知、光学、端侧AI、软件云端五大核心层级,剖析核心数据流与行业技术瓶颈,同时附上标准化技术架构图,适合技术学习、方案汇报、行业科普使用。

houdou112358的博客 431

QT使用openssl实现RSA加解密

使用openssl生成公私钥,随后用QT对相应的信息进行RSA加解密

weixin_42098322的博客 3867

windows 使用docker构建镜像

下载docker for windows,这里有个小坑,需要确定是否打开了虚拟化。如果没有,必须重启在BIOS界面打开虚拟化,重启之后就可以启动docker for windows了。

m0_67402013的博客 6904

【Python爬虫案例教学】超简洁代码采集原神所有角色信息

(。・∀・)ノ゙嗨 大家好,这里是池鱼

xiaoyuan_____的博客 2419

Windows系统配置Docker的国内镜像

Docker加载缓慢的问题,配置国内的镜像源

ljf520lhy的博客 4974

桁架 拓扑优化 matlab程序_拓扑优化在结构轻量化及板壳加筋肋最优布置的应用...

1 拓扑优化简介材料的有效利用一直都是人类追求的目标,也是许多研究领域不变的话题,并伴随着结构优化理论和方法的产生而发展。结构优化设计通常分为三个层次:(1)拓扑优化:在一个确定的连续区域内寻求结构内部非实体区域位置和数量的最佳配置,寻求结构中的构件布局及节点联结方式最优化,使结构能在满足应力、位移等约束条件下,将外载荷传递到结构支撑位置,同时使结构的某种性态指标达到最优;(2)形状优化:指在保持...

weixin_39525355的博客 1876

AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南

官网:www.SZLCSC.COM以芯片为例器件类——>芯片类——>对应芯片确定芯片——>数据手册1:原理图2:PCB3:打开操作流程选中原理图——>文件——>导出——>AD1: ✔2:导出AD文件操作流程选中PCB图——>文件——>导出——>AD1: ✔2:导出AD文件1:PCB图2:原理图操作流程文件——>打开操作流程选中文件——>打开操作流程项目文件——>添加新的...到工程——>Schematic Library新原理图库操作流程项目文件——>添加新的...到工程——>PCB Library新的PC

XU157303764的博客 5434

Docker镜像构建——Dockerfile(实例)

Dockerfile实例一、Dockerfile生成apache镜像文件二、Dockerfile生成nginx镜像文件三、Dockerfile生成tomcat镜像文件四、Dockerfile生成mysql镜像文件 一、Dockerfile生成apache镜像文件 1.vim Dockerfile (Dockerfile名字不可更改) #新镜像基于的基础镜像(基础镜像未下载会先下载) FROM centos:7 #维护镜像的用户信息 MAINTAINER This is chen

DLZ的博客 454

FreeRTOS全攻略:从入门到精通

本文聚焦 FreeRTOS,从基础概念出发,阐述其开源、轻量级等优势。着重介绍 FreeRTOS 入门知识,涵盖内存管理、任务操作、同步互斥机制等核心内容。其中,空闲任务与钩子函数保障系统基础运行与功能扩展;队列、信号量、互斥锁和事件组等机制,分别从数据传递、资源访问控制、优先级问题解决及多任务同步等方面,为开发者提供高效的任务间协作与资源管理方案,助力开发者掌握 FreeRTOS 核心技术,为嵌入式项目开发筑牢基础。

邓邓子的博客 6354

从基础镜像到自定义镜像Docker容器化镜像的演变之路

Docker 镜像由多个层(Layer)组成,每一层代表一次文件系统的修改。这种分层结构使得镜像具有高效的存储和分发特性。当多个镜像共享相同的层时,可以避免重复存储相同的文件系统内容,从而节省存储空间和网络带宽。# 这是一个基础的 Ubuntu 镜像# 设置工作目录# 复制当前目录的内容到工作目录# 安装依赖项# 暴露端口EXPOSE 80# 设置默认命令"]自定义镜像是基于基础镜像或其他镜像构建的,包含了特定的应用程序和配置。

木头大左的博客 998

【史上最全面esp32教程】oled显示篇

esp32-arduino Oled屏幕的使用

m0_62599305的博客 1万+

学Simulink——基于扩展卡尔曼滤波(EKF)的列车牵引电机转子温度在线估计仿真

本文介绍了一种基于扩展卡尔曼滤波(EKF)的列车牵引电机转子温度在线估计方法,通过Simulink建模实现。文章首先阐述了EKF在估计电机转子温度中的优势,即利用易测量信号(如电流、电压、转速)在线估计难以直接测量的转子温度,并分析了温升对电机性能的影响。随后详细讲解了电机热电增广模型的构建,包括定子电阻温度关系、一阶热近似模型和PMSM的dq轴方程。接着,文章提供了Simulink建模的详细步骤,包括PMSM+FOC电流环的搭建、EKF算法的实现(推荐使用ExtendedKalmanFilter块或MAT

xiaoheshang_123的博客 55

M2LOrder模型Docker容器化部署进阶教程:自定义镜像与编排

本文介绍了如何在星图GPU平台上自动化部署🌸 M2LOrder: SAKURA EMOTION MAGIC镜像,并构建自定义Docker镜像与多容器编排。通过自定义镜像,用户可集成额外工具包(如pandas、redis)以适应特定需求;结合Docker Compose,可一键部署包含模型服务、数据库和缓存服务的完整应用,实现高效协同与统一管理。

weixin_42588555的博客 305

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Docker数据集与自定义镜像:构建高效容器的关键要素

在接下来的篇章中,我们将一起探讨Docker数据集的创建、挂载和管理方法,了解如何在容器之间共享和重用数据,以及如何利用数据卷实现数据的持久化存储。同时,我们还将详细介绍如何从零开始构建自定义Docker镜像,包括选择基础镜像、安装和配置软件、优化镜像大小等关键步骤。

lz17267861157的博客 1323

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Puppeteer 应用容器化

Puppeteer 应用容器化 Intro Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。 更多的介绍,可以参考这里 项目中使用到了 Puppeteer 来做一些爬虫项目,最后需要把应用容器化部署在 docker 上,于是就有了这篇文章。 自定义 docker image 谷歌官方还没有推出一个官方的 do

hmxll的专栏 388

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Docker部署Asterisk 20:从自定义镜像到生产级PBX容器化实践

容器化技术通过将应用及其依赖打包成标准化的轻量级单元,实现了环境隔离与快速部署,其核心原理基于操作系统级虚拟化与镜像分层机制。在软件部署领域,Docker作为主流容器引擎,为复杂应用的交付提供了可移植、可复现的解决方案,显著提升了开发与运维效率。特别是在部署传统复杂系统时,容器化能有效解决依赖冲突和环境不一致的痛点。开源电话交换系统Asterisk作为功能强大的PBX平台,常因依赖繁多、配置复杂而面临部署挑战。本文将结合Docker多阶段构建与Docker Compose编排,详细阐述如何为Asterisk

weixin_30231327的博客 352

tensorflow容器化(docker)

目录 tensorflow容器化 一、docker安装 二、tensorflow 三、创建自己的镜像 四、编写Dockerfile 五、build镜像 六、运行镜像 补充:依赖缺失问题解决 tensorflow容器化 一、docker安装 具体安装可以参考我的另外两篇文章-Docker基础与实战&&Centos7离线安装Docker,第一篇介绍可以连接外...

c851204293的博客 1455

mPLUG图文问答镜像实战:Docker容器化部署+本地存储路径自定义指南

本文介绍了如何在星图GPU平台自动化部署mPLUG视觉问答本地智能分析工具镜像,实现离线的图片内容理解与自然语言交互。该工具可应用于电商商品自动分析场景,通过上传商品图片并提问,快速获取产品特征、材质和颜色等关键信息,提升商品信息管理效率。

weixin_33773084的博客 26

docker容器化部署

docker0会为每个容器分配默认的ip地址,也就是容器的局域网ip,我们可以通过命令来查看ip地址想要让不同的容器可以相互访问,每次都要查看ip地址,未免太麻烦。这时候就需要使用自定义网络,通过自定义网络,我们可以实现的方式来进行获取内容了,那如何自定义呢?通过以下命令创建网络,名字为mynetdocker network ls #查看所有的网络默认的docker0是图上的第一个然后在我们创建镜像的时候,就可以进行网络的设置了,使用–network加上自定义网络的名字来进行这个容器的网络设置。

qq_51621767的博客 1313

TinyGo容器化:Docker开发环境搭建

还在为复杂的嵌入式开发环境配置而头疼吗?每次换机器都要重新安装LLVM、交叉编译工具链、设备驱动?TinyGo的Docker容器化方案将彻底解决这些问题,让嵌入式Go开发变得简单高效。 通过本文,你将获得: - ???? 一键搭建完整的TinyGo开发环境 - ???? 隔离且可复现的开发环境 - ???? 支持多种硬件平台的交叉编译能力 - ???? WebAssembly和WASI开发支持 - ???? 专业的...

gitblog_00432的博客 896

手把手教你制作MySQL Docker镜像

docker hub中默认下载的镜像运行目录比较分散,为方便统一管理,因此自己制作镜像。此处记录下相关制作步骤。

会飞的程序猴博客 365

Docker极简入门实战:手把手演示容器化部署,15分钟快速掌握Docker核心操作

本研究报告旨在对一个名为《Docker极简入门实战:手把手演示容器化部署,15分钟快速掌握Docker核心操作》的教程进行全面、深入的调查与分析。然而,经过对包括Bilibili、知乎、优快云、掘金等主流中文内容平台、以及GitHub和Gitee等代码托管平台的广泛搜索,。搜索结果中存在大量标题或内容相似的Docker入门教程,例如提及“快速入门”、“极简指南”、“10分钟掌握”、“Docker入门与实战”等,但均不符合查询的完整标题。

破损的天堂鸟博客 664
上一篇: ABP vNext-核心根基-领域驱动DDD
下一篇: 容器化-Docker基础
似水明俊德
博客等级 码龄8年 247粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值