阿里云部署Docker(9)----Dockerfile脚本定制你的镜像

【docker的那些事】Dockerfile构建并推送到阿里云仓库 场景 假如我有一个springboot的项目,在传统的方式去部署,我需要一台linux服务器,并且在服务器上安装配置jdk等操作,当然对于springboot的项目来说只需要这样,然后执行 java -jar或者 nohup java -jar去执行。 我们在编写一个DockerFile的时候,我们会怎么去考虑呢?比如: 我有一个Spring Boot项目(这也是比较简单的,直接运行jar包好),我希望把这个项目编制成image,然后把这个image给你,你也能够运行成。 1.准备一个Spring Boot 阅读详情

本文为原创文章,转载需注明转自:http://blog.youkuaiyun.com/minimicall?viewmode=contents

技术爱好者都是比较懒的。而docker又是开发者支持起来的。所以,它肯定是有比较懒的方式供我们定制自己需要的东西。

docker build

docker 用build指令来执行dockerfile脚本。

具体的用法:

sudo docker build .
小心后面那个点,表示当前目录。当前目录有一个Dockerfile的文件。

当然,你可以指定你建立的镜像的名字。

 sudo docker build -t shykes/myapp .

然后你就可以看到执行过程,或许,会非常的漫长,取决于要下的东西的大小和你的网速。

sudo docker build -t SvenDowideit/ambassador .
Uploading context 10.24 kB
Uploading context
Step 1 : FROM docker-ut
 ---> cbba202fe96b
Step 2 : MAINTAINER SvenDowideit@home.org.au
 ---> Using cache
 ---> 51182097be13
Step 3 : CMD env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/'  | sh && top
 ---> Using cache
 ---> 1a5ffc17324d
Successfully built 1a5ffc17324d
当你下完之后,你可以用:

docker images

你会发现多了你下载的镜像。

好接下来我们讲讲Dockerfile本身如何编写。

格式:

# Comment
INSTRUCTION arguments
命令是大写的。

FROM

所有的镜像都应该是基于某一个现有的镜像。

所以,就有了FROM 指令

FROM <image>
或者,更加具体点说明它的Tag。

FROM <Image>:<TAG>

FROM语句必须是第一句“非注释”语句,在Dockerfile中。

我们总是会想在一个脚本里面添加些注释,来说明一些想说的话。


注释

那就是注释:#开头的行。

但是#在行中,则却表示是一个参数。

维护

接下来,需要说明维护人。

MAINTAINER <name>
填上你的NICK NAME。表示你做的。

RUN指令

RUN指令应该是用的最多的指令。

RUN <command> (the command is run in a shell - /bin/sh -c - shell form)

另一种方式是:

RUN ["executable", "param1", "param2"] (exec form)

RUN语句会在当前镜像的基础上执行该条指令,同时执行完就成了一个新的镜像一样,即数据和影响都是会保存的,然后用这个新的镜像去执行下一条指令,这样上一条的结果镜像是下一条指令的基础,如此不断推进。

CMD指令

格式:

CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)

有三种形式。

CMD在DOckerfile里面只能用一次,如果你写了很多条,那么只有最后一条是有效的。


CMD有什么用呢,可以理解为Main函数一样吧,作为一个入口。具体见英文

The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.

EXPOSE

这个单词的中文叫什么,暴露。对,他就是暴露镜像的某个接口出来。例如,我的镜像是用来做http服务的,那么我就理应暴露我镜像的80端口。然后-p 主机端口:80 ,还记得吧。端口映射。

EXPOSE <port> [<port>...]

ENV

环境变量的设置

ENV <key> <value>

环境变量一旦设定,对整个Dockerfile都是有效的。

当然,key = value这样直接说,其实效果是一样的。

ADD指令

有点像拷贝指令,至少它就是完成文件的拷贝工作的。

ADD <src> <dst>

ADD hom* /mydir/        # adds all files starting with "hom"
ADD hom?.txt /mydir/    # ? is replaced with any single character

COPY指令

和ADD一样,是拷贝


ENTRYPOINT

入口点

真正的MAIN函数

ENTRYPOINT ["executable", "param1", "param2"] (exec form, the preferred form)
ENTRYPOINT command param1 param2 (shell form)
CMD和这个指令的区别,是应用的场景不一样。

这里,我给大家贴原文会比较好。

An ENTRYPOINT helps you to configure a container that you can run as an executable. That is, when you specify an ENTRYPOINT, then the whole container runs as if it was just that executable.


Unlike the behavior of the CMD instruction, The ENTRYPOINT instruction adds an entry command that will not be overwritten when arguments are passed to docker run. This allows arguments to be passed to the entry point, i.e. docker run <image> -d will pass the -d argument to the entry point.


You can specify parameters either in the ENTRYPOINT JSON array (as in "like an exec" above), or by using a CMD instruction. Parameters in the ENTRYPOINT instruction will not be overridden by the docker run arguments, but parameters specified via a CMD instruction will be overridden by docker run arguments.


Like a CMD, you can specify a plain string for the ENTRYPOINT and it will execute in /bin/sh -c:


FROM ubuntu
ENTRYPOINT ls -l
For example, that Dockerfile's image will always take a directory as an input and return a directory listing. If you wanted to make this optional but default, you could use a CMD instruction:


FROM ubuntu
CMD ["-l"]
ENTRYPOINT ["ls"]

WORKDIR 工作目录

RUN ENTERPOINT带的指令在哪里执行的设置。


此外,还有一些指令,例如

USER ,ONBUILD,等就不想说了。

最后给出一个示例

# Nginx
#
# VERSION               0.0.1

FROM      ubuntu
MAINTAINER Victor Vieux <victor@docker.com>

RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server

# Firefox over VNC
#
# VERSION               0.3

FROM ubuntu

# Install vnc, xvfb in order to create a 'fake' display and firefox
RUN apt-get update && apt-get install -y x11vnc xvfb firefox
RUN mkdir /.vnc
# Setup a password
RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
# Autostart firefox (might not be the best way, but it does the trick)
RUN bash -c 'echo "firefox" >> /.bashrc'

EXPOSE 5900
CMD    ["x11vnc", "-forever", "-usepw", "-create"]

# Multiple images example
#
# VERSION               0.1

FROM ubuntu
RUN echo foo > bar
# Will output something like ===> 907ad6c2736f

FROM ubuntu
RUN echo moo > oink
# Will output something like ===> 695d7793cbe4

# You᾿ll now have two images, 907ad6c2736f with /bar, and 695d7793cbe4 with
# /oink.










Docker镜像定制与容器内配置:从Dockerfile到Yum仓库部署实战 1. 先搞清楚“定制镜像”和“容器内配置”到底要解决什么 很多人一看到 Docker 就想到 docker run 和 docker pull ,但真到了自己动手定制环境、在容器里装软件的时候,反而容易卡住。这篇文章不绕远,直接解决两个核心问题: 如何把一个普通的 Linux 容器,变成你想要的、带特定服务的环境 。 这通常分两步走: 定制镜像 :就像先做好一个包含基础系统和工具的“模具”,以后所有容器都从这个模具里出来,自带了你预先装好的环境。这是为了 标准化和复用 。 容器内配置与部署 :有时候,你可能 阅读详情

相关推荐

Docker之自定义镜像上传至阿里云

Alpine Linux是一个轻量级的Linux发行版,专注于安全、简单和高效。它采用了一个小巧的内核和基于musl libc的C库,使得它具有出色的性能和资源利用率。Alpine Linux的主要特点包括:小巧轻量:Alpine Linux的安装包非常小,只有几兆字节,这使得它在资源受限的环境中运行非常高效。安全可靠:Alpine Linux采用了一系列安全措施,包括堆栈保护、内核级别的防护和支持安全沙盒等,以确保系统的安全性和可靠性。

空空bye. 9635

Dockerfile(构建镜像的脚本文件)

Dockerfile是用于构建Docker镜像的脚本文件,由一系列指令构成。通过docker build命令构建镜像时,Dockerfile中的指令会由上到下依次执行,每条指令都将会构建出一层镜像。这就是镜像的分层。因此,指令越多,层次就越多,效率就越低。所以在定义Dockerfile时,能在一个指令完成的动作就不要分为两个。该文件的默认名称就是“Dockerfile”。

qq_53354183的博客 1585

利用Dockerfile制作java运行环境的镜像的方法步骤

主要介绍了利用Dockerfile制作java运行环境的镜像的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

2021-12-31 阿里云云效自动化部署

目的 结合阿里云云效平台,实现自动化部署Maven多模块项目 云效 + Docker 部署方式: 扫描子模块 -> 子模块打包、构建镜像、推送到镜像仓库 -> 执行脚本运行服务器上脚本(删除旧镜像、拉新镜像、关闭对应模块容器、重新执行docker-compose.yml) 搭建项目 Dockerfile # jdk FROM registry.cn-hangzhou.aliyuncs.com/hangzhouhuiyao/openjdk:8-jdk MAINTAINER guo

bb 2718

(精读)揭示多元时间序列的高阶组织

时间序列分析已经被证明是刻画生物学、神经科学和经济学中的一些现象以及理解它们的一些潜在动力学特征的有力方法。尽管针对多元时间序列的分析已经提出了很多方法,但大多数方法都忽略了非成对相互作用对涌现动力学的影响。在这里,我们提出了一个新的框架来刻画多元时间序列中高阶依赖关系的时间演化。利用网络分析和拓扑学,我们表明,与传统的基于成对统计的工具不同,我们的框架鲁棒地区分了耦合混沌映射的各种时空状态,包括混沌动力学阶段和各种类型的同步。

weixin_53406075的博客 2412

xilinx vivado 设置多核多线程加快综合、布局布线、仿真速度的方法

加快vivado布局布线速度的多核编译方法 在tcl中执行下面的语句 set param general.maxThreads n来设置,n是你的CPU线程数。 在设置之后你可以通过get_param general.maxThreads 指令来确认是否成功设置, 加快vivado综合速度的多核编译方法 操作方法与上面加快布局布线的方法一样。 实际发现效果并不是很明显,官方论坛中提到只有在LINUX上才能发挥8核以上的效能,而且8核以上的效能提升并不明显。 加快vivado仿真.

shawn的FPGA圈 2万+

配置docker阿里云镜像地址

安装docker前需要安装的依赖包: yum install -y yum-utils device-mapper-persistent-data lvm2 使用阿里国内源安装docker yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum list docker-ce --showduplicates | sort -r yum makecache fast yu

拾光 1万+

ESP32-P4实战:LVGL V9.4 PPA加速配置与性能对比

本文详细介绍了如何在ESP32-P4平台上配置LVGL V9.4的PPA硬件加速功能,通过启用PPA加速显著提升图形处理性能并降低CPU占用率。文章包含环境准备、配置步骤、性能对比及常见问题解决方案,帮助开发者高效利用ESP32-P4的PPA加速器优化嵌入式GUI应用。

rice5的博客 1191

【Docker】基于阿里云docker镜像服务的Docker镜像构建、托管保姆级教程(全网最详细教程)

【Docker】基于阿里云docker镜像服务的Docker镜像构建、托管保姆级教程(全网最详细教程)

科技改变人类,技术成就未来 1万+

RLHF 家族的奇巧魔改:On Policy 与 Off Policy 路线大PK

无论是 On Policy 还是 Off Policy,RLHF 家族的“魔改”之路都充满了奇思妙想。相信随着研究的深入,RLHF 技术将会在 Alignment 领域发挥越来越重要的作用。

步子哥的博客 2083

软考中级网络工程师通关指南:从学习到实战

本文是软考中级网络工程师备考实用指南,先介绍备考前准备,包括考试时间、形式、分值等基本信息,及引导读者评估自身基础以制定学习计划;再推荐官方教材、辅导书籍、在线课程平台和学习社区等优质资源。随后梳理网络协议、设备配置、安全、规划设计等重点知识,剖析企业网络故障排查与园区网络设计典型案例。还分享真题使用、解题技巧、错题本建立等习题解答方法,给出分阶段备考、时间安排与总结反思的备考计划,最后提供考场答题顺序、检查及心态调整策略,助力考生高效备考、顺利通关。

邓邓子的博客 1854

阿里云云效流构建DockerCompose部署流水线

weweeeeeeee的博客 2140

ArcGIS实验教程——实验二十五:大型商场选址经典案例

本实验基于ArcGIS平台进行商场选址分析,综合考虑道路、居民点、停车场和已有商场四个影响因素。通过缓冲区分析建立各要素的影响范围(道路50米、居民点100米、停车场100米、已有商场500米),采用叠加分析中的相交和擦除运算确定最优选址区域。实验建立了区位评价体系,通过属性赋值(1/-1)和联合运算生成综合评价结果,并实现分级可视化显示。注意事项包括距离参数设置对结果的影响以及正确选择空间分析工具。该流程为商业选址提供了科学的GIS解决方案。

智慧空间实验室 1万+

阿里云部署Docker(9)----Dockerfile脚本定制镜像

本文为原创文章,转载需注明转自:http://blog.youkuaiyun.com/minimicall?viewmode=contents 技术爱好者都是比较懒的。而docker又是开发者支持起来的。所以,它肯定是有比较懒的方式供我们定制自己需要的东西。 docker build docker 用build指令来执行dockerfile脚本。 具体的用法: [

MiniMicall的专栏 2854

GPU硬件架构与微架构深度解析28-稀疏计算:稀疏矩阵计算的硬件支持

本文介绍了GPU加速稀疏计算的关键技术。主要内容包括:1)稀疏数据的存储格式(COO、CSR、CSC)及其特点;2)现代GPU的稀疏计算硬件优化,如NVIDIA的稀疏张量核心和内存访问优化;3)稀疏计算在推荐系统、NLP和科学计算等领域的应用案例;4)性能优化技巧,包括存储格式选择、硬件特性利用和混合精度计算等。文章指出,专用稀疏计算技术可显著提升AI和大规模科学计算的效率,相比传统方法可获得5-10倍的性能提升。

2301_79143213的博客 114

优快云独家首发!万字长文,YOLOv5/v7/v8算法模型yaml文件史上最详细解析与教程!小白也能看懂!掌握了这个就掌握了魔改YOLO的核心!

🍀🍀🍀YOLOv5/v7/v8算法模型yaml文件史上最详细解析与教程,全网最强,学不会算我输!!!

Coding... 1万+

Docker镜像的制作、上传、拉取和部署(利用阿里云)

由于学习过程中发现push镜像的时候一直超时,所以直接把阿里云的Docker仓库申请一个(管理中心–>创建镜像仓库–>我的是华东2绑定github账户即可),搞定!以后push就用这个仓库,pull的时候使用加速器,注意切换根据使用场景进行切换,dockerhub丢弃……记录了一下操作流程: 1.创建命名空间hhu(以当前学校为单位,只能小写,每个账号只能创建5个),创建菜鸟Docker镜像仓库

jacksonary的博客 7万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

将jar包打成docker镜像并部署在Linux上

将jar包打包成docker并部署在Linux上

聂可以的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

前端docker部署(通过nginx镜像部署),内含Dockerfile和nginx.conf.template两个配置文件

新手适合学习的docker部署文章,前端部署docker

LYZ0909的博客 3901

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

从零定制Docker镜像:基于CentOS 7.9配置Yum源并部署Nginx

在实际容器化开发和运维工作中,我们经常遇到一个核心需求:如何将一个标准的操作系统镜像,快速定制成一个包含特定软件和配置的、可直接部署服务的应用镜像。很多初学者会直接进入容器内部,通过 yum install 安装软件,但这种方式创建的容器状态是临时的,无法复用。Docker 的核心优势在于通过 Dockerfile 实现构建过程的自动化与版本化,从而生成可重复、可移植的镜像。 本文将以一个典型的 Linux 服务部署场景为例,手把手带你完成从零定制一个简单 Docker 镜像的全过程。我们将以 CentOS

weixin_30372371的博客 471

Docker镜像定制实战:从Dockerfile编写到Nginx服务部署

在容器化部署的实践中,我们常常会遇到一个核心需求:如何将一个标准的操作系统镜像,快速定制成符合我们业务需求的专属镜像,并在其中部署和配置服务。很多新手在初次接触 Docker 时,会止步于拉取和使用官方镜像,一旦需要修改内部环境(比如安装特定软件、配置Yum源)就感到无从下手,要么选择进入容器手动操作(但容器重启后修改会丢失),要么觉得编写 Dockerfile 过于复杂。 本文将彻底解决这个问题,手把手带你从零开始,完成“定制镜像 -> 配置容器内部环境 -> 部署服务”的完整闭环。你将掌握如

迷彩风情 437

【Docker】Dockerfile构建最小镜像

自定义镜像

m0_74315688的博客 3680

docker 打包 镜像,并上传到阿里云镜像仓库

文章目录一、docker 打包镜像1、将现有的容器进行打包2、使用Dockerfile进行打包镜像二、镜像文件上传到 阿里云镜像 一、docker 打包镜像 1、将现有的容器进行打包 查看现有容器 docker ps #或 docker ps -a 将容器打包成镜像 docker commit -a "作者" -m "简要说明" 容器ID 想要打包成的镜像名称:版本号 实例:将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。 docker commit -a "ru

会飞的小蜗 1万+

Docker 安装及原理(如何配置阿里云镜像加速)

目录 一、docker概述 1.为什么会有docker出现? 2.docker架构 1.Docker Daemon 2.Docker Client 3. Docker 仓库 4.Docker 对象 4.1 镜像 4.2 容器 4.3 网络 4.4 存储 二、部署docker 1.需要的依赖 2. 配置阿里docker镜像源 3.本地索引缓存 4.安装docker 5.阿里云镜像加速 5.1 登陆阿里云找到容器服务,找到镜像加速器 5.2 找到镜像加速地址 5.3 配置使用

m0_67393619的博客 5559
上一篇: Android开发之一种简单的异步加载图片方法
下一篇: 阿里云部署Docker(9)----Dockerfile脚本定制镜像
minimicall
博客等级 码龄18年 407粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值