Dockerfile与DockerCompose

news2024/11/18 14:00:30

Docker的Image结构是怎样的?

  • 镜像是将应用程序 及其需要的 系统函数库、环境、配置、依赖 打包而成。

镜像结构

  • 入口( Entrypoint )
    • 镜像运行入口,一般是程序启动的脚本和参数
  • 层( Layer )
    • 在BaseImage基础上添加安装包、依赖、配置等,每次操作都形成新的一层。
  • 基础镜像( BaseImage )
    • 应用依赖的系统函数库、环境、配置、文件等

镜像是分层结构,每一层称为一个Layer
在这里插入图片描述

Dockerfile

  • Dockerfile 就是一个文本文件,其中包含一个个的 指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
指令说明示例
FROM指定基础镜像FROM centos:6
ENV设置环境变量,可在后面指令使用ENV key value
COPY拷贝本地文件到镜像的指定目录COPY 。/mysql-5.7.rpm /tmp
RUN执行Linux的shell命令,一般是安装过程的命令Run yum install gcc
EXPOSE指定容器运行时监听的端口,是给镜像使用者看的EXPOSE 8080
ENTRYPOINT镜像中应用的启动命令,容器运行时调用ENTRYPOINT java -jar xx.jar
更新详细语法说明,请参考官网文档:https://docs.docker.com/engine/reference/buider

示例:基于Ubantu镜像构建一个新镜像,运行一个java项目

  • 步骤1:新建一个空文件夹docker-demo
  • 步骤2: 拷贝课前资料中的docker-demojar文件到docker-demo这个目录
  • 步骤3:拷贝课前资料中的jdk8.tar.gz文件到docker-demo这个目录
  • 步骤4:拷贝课前资料提供的Dockerfile到docker-demo这个目录
  • 步骤5:进入docker-demo
  • 步骤6: 运行构建镜像命令:
    • docker build -t javaweb:1.0 .
    • -t 指的是tag 名称:版本号
    • 最后的 “.” 是指Dockerfile文件的所在目录,当前在此目录,所以用 “.”

Dockerfile:

#指定基础镜像
FROM ubuntu:16.04

#配置环境变量,JDK的安装目录
ENV JAVA DIR=/usr/local

#拷贝jdk和java项目的包6
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

#安装JDK
RUN cd $JAVA DIR
&& tar -xf ./jdk8.tar.gz&& mv ./jdk1.8._144 ./java8

#配置环境变量
ENV JAVA_HOME=$JAVA DIR/java8ENV PATH=$PATH:$JAVA HOME/bin

#暴露端口
EXPOSE 8099

#入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

DockerCompose

  • Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器
  • Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。相当于多个run命令的集合

Compose文件语法示例两种方式:

version:"3.8"
services:
	mysql:                                   #相当于 --name
		image: mysql:5.7.25  
		environment:                    #相当于 -e
			MYSQL_ROOT_PASSWORD: 123
		volumes:                                    #相当于 -v
			- /tmp/mysql/data:/var/lib/mysql
			- /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf
	Ruoyi :            # --name 临时构建
		build: .   #镜像构建目录
		ports:                       #相当于 -p
			8090: 8090

DockerCompose的详细语法参考官网: https://docs.docker.com/compose/compose-file/

下载配置DockerCompose

下载
curl -L
https://github.com/docker/compose/releases/download/1.29.1/docker-
compose-`uname -s`-`uname -m` > /usr/1ocal/bin/docker-compose

或者直接下载上传到 /usr/local/bin/

修改文件权限
chmod +x /usr/local/bin/docker-compose
Base自动补全命令
curl -L
https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

如果这里出现访问GitHub错误,需要修改自己的hosts文件:

echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts

docker-compose构建镜像并运行命令

# cd 要构建的文件目录内
docker-compose up -d  #up 构建并运行   down 停止并删除

更多命令 执行 --help查看

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

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

相关文章

Alibaba Cloud Linux镜像操作系统详解(全方位解析)

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版,针对阿里云服务器ECS做了大量深度优化,Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS,Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

Linux 进程(五) 调度与切换

概念准备 当一个进程放在cpu上运行时,是必须要把进程的代码跑完才会进行下一个进程吗?答案肯定是 不对。现在的操作系统都是基于时间片轮转执行的。 时间片(timeslice)又称为“量子(quantum)”或“处理器片…

设计模式之原型模式【创造者模式】

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

数据库云平台新数科技完成B轮融资,打造全链路智能化数据库云平台

数据库云平台软件厂商「北京新数科技有限公司」(以下简称「新数科技」)已于2023年完成B1轮和B2轮融资,分别由渤海创富和彬复资本投资;义柏资本担任本轮融资独家财务顾问。 新数科技成立于2014年,当前产品矩阵包括数据库…

120基于matlab的LMS自适应滤波算法

基于matlab的LMS自适应滤波算法,如、解相关LMS算法,滤波型LMS算法,变换域LMS算法,输出滤波前后及学习曲线图。数据可更换自己的,程序已调通,可直接运行。 120自适应滤波算法变换域LMS算法 (xiaohongshu.com…

解决Android AAPT: error: resource android:attr/lStar not found. 问题

错误信息 /xxx/gjc/.gradle/caches/transforms-2/files-2.1/930c42acd29d295ce5bc495c3b84423e/core-1.9.0/res/values/values.xml:104:5-113:25: AAPT: error: resource android:attr/lStar not found. not found 资源位置 场景 原Android studio中的项目都是在git上面拉的老项…

cad基础知识1

cad: 点移动会变成线,线移动会变成面,面移动会变成一个实体 f7: 取消cad里的网格 f12: 动态输入 dim:更加智能的标准两端点的距离。 f8:如果按了f8,上下左右都是一条直线,不会变歪。 f9: 开启捕捉模式。 …

实验笔记之——基于windows复现Instant-NGP

之前博客对NeRF-SLAM进行了调研,本博文先复现一下Intant-NGP。 学习笔记之——NeRF SLAM(基于神经辐射场的SLAM)-CSDN博客文章浏览阅读851次,点赞22次,收藏21次。NeRF 所做的任务是 Novel View Synthesis(…

以爱之名,与“EYE”同行 蔡司光学公益行一直在路上

用心传递公益温暖之力,助力更多乡村学童拥有光明未来。2023年12月26日,一场以“EYE”为主题的公益活动正在中卫市宣和镇东台小学举办。本次,眼视光领域领军品牌蔡司光学携手中卫德明眼科的专业视光团队一同来到活动现场,为该校全体…

文件重命名技巧:找到最简单的办法,删除文件名中的下划线

在日常工作中,经常要处理大量的文件,包括重命名文件。有时候可能会遇到文件名中包含下划线的情况,这使得文件名变得复杂且不易读。要简化文件名并使其更易于管理,可以使用一些简单的技巧来删除文件名中的下划线。现在一起来看云炫…

山西电力市场日前价格预测【2024-01-04】

日前价格预测 预测说明: 如上图所示,预测明日(2024-01-04)山西电力市场全天平均日前电价为197.93元/MWh。其中,最高日前电价为376.04元/MWh,预计出现在18:15。最低日前电价为0.00元/MWh,预计出…

案例分享:Qt多国语言输入法软键盘

若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/135346374 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

AIGC年度回顾!2024向量数据库是否还是AI发展方向之一?

引言 2023 年,是 AI 技术大爆发的一年,从年初到年末,全球关心技术发展的人们见证了一次次的 AI 技术升级,也逐步加深着对 AGI 发展的畅想。而伴随着生成式人工智能的飞速发展,向量数据库以其独特的技术优势逐渐崭露头角…

第一个Qt程序----Hello word!

从今天起就开始我们的第一个Qt小程序,点击New Project后点击右侧的Application后点击Qt Widgets Application。Qt Widgets 模块提供了一组UI元素用于创建经典的桌面风格的用户界面,Widgets是小部件的意思,也可以称为控件,因此Qt …

OpenHarmony之HDF驱动框架

概述 HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路,让驱动开发和部署更加规范,旨在…

LeetCode每日一题.06(翻转二叉树)

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root [2,1,3] 输出:[2,3,1] 示例 3&…

golang学习专栏

GOLANG专栏 Golang基础教程 Golang基础教程 Golang练手算法 Golang练手算法 Golang设计模式 Golang设计模式 Golang数据结构和算法 Golang数据结构和算法 Golang并发编程 Golang并发编程 ORM框架Gorm Golang ORM框架gorm Golang源码分析 Golang源码分析 MySQL教程 MySQ…

Go中interface != nil不一定不是nil

摘要: interface{} 值 ! nil不一定不是nil,应使用reflect库判断是否是nil。 测试示例: // todo interface ! nil 不一定 不是nil var value map[string]interface{} reqMap : make(map[string]interface{}) reqMap["key"] valu…

Python项目15:教你使用pillow把女神的图片,添加表白文字。

★★★★★博文创作不易,我的博文不需要打赏,也不需要知识付费,可以白嫖学习编程小技巧。使用代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞收藏分享置顶,小红牛在此表示感谢…

洁净间级别确认和环境监测相关法规指南汇总

一 洁净级别确认 1. 用于生产无菌药品的洁净室和洁净空气设备如单向流系统(UDAF)、限制进入屏障系统(RABS)和隔离器,应根据所需环境特性进行确认。生产操作需要在适当洁净度级别的环境中进行,以降低粒子或…