阿里云部署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脚本。

具体的用法:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sudo docker build .  
小心后面那个点,表示当前目录。当前目录有一个Dockerfile的文件。

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

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sudo docker build -t shykes/myapp .  

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

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sudo docker build -t SvenDowideit/ambassador .  
  2. Uploading context 10.24 kB  
  3. Uploading context  
  4. Step 1 : FROM docker-ut  
  5.  ---> cbba202fe96b  
  6. Step 2 : MAINTAINER SvenDowideit@home.org.au  
  7.  ---> Using cache  
  8.  ---> 51182097be13  
  9. Step 3 : CMD env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/'  | sh && top  
  10.  ---> Using cache  
  11.  ---> 1a5ffc17324d  
  12. Successfully built 1a5ffc17324d  
当你下完之后,你可以用:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. docker images  

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

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

格式:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. # Comment  
  2. INSTRUCTION arguments  
命令是大写的。

FROM

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

所以,就有了FROM 指令

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. FROM <image>  
或者,更加具体点说明它的Tag。

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. FROM <Image>:<TAG>  

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

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


注释

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

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

维护

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

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. MAINTAINER <name>  
填上你的NICK NAME。表示你做的。

RUN指令

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

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. RUN <command> (the command is run in a shell - /bin/sh -c - shell form)  

另一种方式是:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. RUN ["executable", "param1", "param2"] (exec form)  

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

CMD指令

格式:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. CMD ["executable","param1","param2"] (exec form, this is the preferred form)  
  2. CMD ["param1","param2"] (as default parameters to ENTRYPOINT)  
  3. 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 ,还记得吧。端口映射。

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. EXPOSE <port> [<port>...]  

ENV

环境变量的设置

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ENV <key> <value>  

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

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

ADD指令

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

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ADD <src> <dst>  

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ADD hom* /mydir/        # adds all files starting with "hom"  
  2. ADD hom?.txt /mydir/    # ? is replaced with any single character  

COPY指令

和ADD一样,是拷贝


ENTRYPOINT

入口点

真正的MAIN函数

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ENTRYPOINT ["executable", "param1", "param2"] (exec form, the preferred form)  
  2. 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,等就不想说了。

最后给出一个示例

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. # Nginx  
  2. #  
  3. # VERSION               0.0.1  
  4.   
  5. FROM      ubuntu  
  6. MAINTAINER Victor Vieux <victor@docker.com>  
  7.   
  8. RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server  
  9.   
  10. # Firefox over VNC  
  11. #  
  12. # VERSION               0.3  
  13.   
  14. FROM ubuntu  
  15.   
  16. # Install vnc, xvfb in order to create a 'fake' display and firefox  
  17. RUN apt-get update && apt-get install -y x11vnc xvfb firefox  
  18. RUN mkdir /.vnc  
  19. # Setup a password  
  20. RUN x11vnc -storepasswd 1234 ~/.vnc/passwd  
  21. # Autostart firefox (might not be the best way, but it does the trick)  
  22. RUN bash -c 'echo "firefox" >> /.bashrc'  
  23.   
  24. EXPOSE 5900  
  25. CMD    ["x11vnc", "-forever", "-usepw", "-create"]  
  26.   
  27. # Multiple images example  
  28. #  
  29. # VERSION               0.1  
  30.   
  31. FROM ubuntu  
  32. RUN echo foo > bar  
  33. # Will output something like ===> 907ad6c2736f  
  34.   
  35. FROM ubuntu  
  36. RUN echo moo > oink  
  37. # Will output something like ===> 695d7793cbe4  
  38.   
  39. # You᾿ll now have two images, 907ad6c2736f with /bar, and 695d7793cbe4 with  
  40. # /oink.  





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

相关推荐

Docker镜像定制实战:从基础镜像到部署Nginx服务

如果你已经掌握了 Docker 的基本命令,能够拉取镜像、运行容器,但每次进入容器,都感觉像进入了一个“毛坯房”——没有你熟悉的工具,网络不通,想装个软件都找不到源。于是,你开始手动 yum install ,却发现容器里连 yum 仓库都没配置,或者速度慢得让人绝望。最终,你可能会选择放弃,回到熟悉的物理机或虚拟机环境。 这恰恰是很多开发者从 Docker “入门”到“放弃”的关键一步。他们理解了容器是轻量级的,却没能跨越“如何高效地定制一个真正可用的容器环境”这道坎。今天这篇文章,就是要彻底解决这个问题

weixin_30642869的博客 391

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

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

MiniMicall的专栏 2350

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运行环境的镜像的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

REST-meta-MDD Data总结

sMRI数据使用:nwc1、nwc2、nwc3(同样数据集相关论坛中有相关信息指向需要使用wc1、wc2、wc3)多方咨询与讨论后决定使用nwc数据,这里说明wc数据相对wc数据要大的多如wc1的大小为1.33GB,而nwc1的数据却有6.90GB。VBM文件:/REST-meta-MDD/Sharing/REST-meta-MDD-VBM- phase1 -Sharing.tar.gz。1、Excel中的表型信息:1-男,2-女;-9999或空白表示缺少数据。

2404_88295660的博客 1539

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

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

bb 2718

基于ESP32-WROOM的智能蓝牙电压电流监测与远程控制系统设计

本文介绍了基于ESP32-WROOM的智能蓝牙电压电流监测与远程控制系统设计。该系统集成了INA219传感器和OLED显示屏,通过蓝牙实现无线数据传输和远程控制,适用于智能家居能耗监控和工业设备管理,具有成本低、精度高、功耗优化等优点。

qsc901234的博客 203

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

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

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

Ubuntu20.04/Debian10安装向日葵远程控制踩坑实录(附依赖问题解决方案)

本文详细介绍了在Ubuntu 20.04/Debian 10系统上安装向日葵远程控制软件的全过程,重点解决了常见的依赖问题,特别是libwebkitgtk相关错误。通过自动修复、手动修改.deb包依赖和使用兼容层三种解决方案,帮助用户顺利完成安装并优化远程控制体验。

silver的专栏 750

利用LATX技术在龙芯安同AOCS OS上部署坚果云:跨架构文件同步实战

本文详细介绍了如何在龙芯安同AOCS OS上,利用LATX指令翻译技术部署坚果云客户端,实现跨架构文件同步。通过安装LATX环境、解压x64安装包、运行安装脚本三步,成功在loongarch64架构上运行仅支持x86_64的软件,解决了国产平台办公协同的痛点,并分享了性能实测与优化建议。

weixin_29305337的博客 457

配置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万+

11、Windows Autopilot 部署与设备注册全攻略

本文详细介绍了Windows Autopilot的完整部署流程,涵盖注册配置文件设置、注册状态页面(ESP)配置、设备注册方法(包括CSV导入、JSON注入、在线注册等)、自动化脚本实现及故障排除技巧。通过手动与PowerShell自动化两种方式指导用户完成配置,并提供流程图、最佳实践和常见问题解答,帮助IT管理员高效实现设备零接触部署与管理。

ii567的博客 342

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

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

jacksonary的博客 7万+

DBC中如何实现报文传输类型属性的配置

AUTOSAR中CAN报文的传输类型主要有三种,周期型,事件型和混合型。周期型:按固定时间间隔自动发送,无需额外的触发条件。事件型:当信号值变化或满足内部条件时立即发送。混合型:默认按周期发送,但事件触发时可提前发送。

sunchengl的博客 304

安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案

本文主要介绍了安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案,希望能对使用Windows WSL的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 9万+

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

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

聂可以的博客 1万+

1、语义数据建模:避免陷阱与突破困境

本文探讨了语义数据建模的兴起背景、核心概念、生命周期及常见挑战。从数据丰富型组织和AI开发者的需求出发,分析了语义建模的关键元素和质量维度,并深入讨论了建模过程中可能出现的陷阱与解决方案。文章还针对语义模型的演化、治理和战略组织问题提供了突破思路,旨在帮助数据从业者更好地理解和应用语义建模技术,以提升数据驱动应用的有效性。

c8d9e0f1的博客 119

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

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

LYZ0909的博客 3901

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

weixin_30372371的博客 471

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

迷彩风情 437

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【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
上一篇: 阿里云部署Docker(9)----Dockerfile脚本定制你的镜像
下一篇: 深入浅出Docker(1)----Docker核心技术预览
minimicall
博客等级 码龄18年 407粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值