docker小白第十一天

news2024/11/15 22:27:05

docker小白第十一天

dockerfile分析

Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。即构建新镜像时会用到。
构建三步骤:编写dockerfile文件-docker build命令构建镜像-docker run镜像 运行容器实例。即一层一层的包装形成新镜像。

dockerfile内容基础知识

1:每条保留字(关键字)指令都必须为大写字母且后面要跟随至少一个参数。
2:指令按照从上到下,顺序执行。
3:#表示注释。
4:每条指令都会创建一个新的镜像层并对镜像进行提交。

docker执行dockerfile的大致流程

(1) docker从基础镜像运行一个容器
(2)执行一条指令并对容器作出修改
(3)执行类似docker commit的操作提交一个新的镜像层
(4) docker再基于刚提交的镜像运行一个新容器
(5)在执行一条执行对容器做出修改
(6)执行类似docker commit的操作提交一个新的镜像层
(7) docker再基于刚提交的镜像运行一个新容器
(6)循环通过以上步骤执行dockerfile中的下一条指令直到所有指令都执行完成。

1、Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程。(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
2、Docker镜像,在用Dockerfile定义一个文件之后,docker buildi时会产生一个Docker镜像,当运行Docker镜像时会真正开始提供服务;
3、Docker容器,容器是直接提供服务的。

dockerfile常用保留字指令

FROM 
#基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
MAINTAINER 
# 镜像维护者的姓名和邮箱地址
RUN <命令行指令>
# 容器构建时需要运行的命令,命令行指令等于在终端操作的shell指令。在构建镜像docker build时运行
EXPOSE
# 当前容器对外暴露出的端口
WORKDIR
# 指定在创建容器后,终端默认登陆进容器时的工作目录
USER
# 指定该镜像以什么样的用户去执行,如果都不指定,则默认是root
ENV
# 用来在构建镜像过程中设置环境变量
ADD
# 将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY
# 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
VOLUME 
CMD
# 指定容器启动后要做的事情。Dockerfile 中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换。在运行容器docker run时运行该命令
ENTRYPOINT
# 也是用来指定一个容器启动时要运行的命令
类似于CMD指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给ENTRYPOINT指令指定的程序

dockerfile案例实践

自定义一个镜像mycentosjava8。

docker pull centos
下载一个默认的基础版本centos镜像

在这里插入图片描述

docker images
# 查看已经下载的镜像
docker run -it 5d0da3dc9764 /bin/bash
# 镜像id替换成自己的centos镜像id
vim a.txt
# 测试目前已经运行起来的centos容器是不具备vim命令的

在这里插入图片描述
需求为,原始的centos镜像具备vim+ifconfig+jdk8。

https://www.oracle.coml/java/technologies/downloads/
# jdk8下载地址

在这里插入图片描述

准备编写dockerfile文件

mkdir myfile
# 新建个文件夹叫myfile

将下载好的java8通过xftp上传到该文件夹内
在这里插入图片描述

vim Dockerfile
同目录下,新建个Dockerfile文件,D要大写
FROM centos:7.6.1810
# 基于哪个原始镜像,为避免版本冲突这里指定版本
MAINTAINER CZ
# 作者信息

ENV MYPATH /usr/local
WORKDIR $MYPATH

#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD是相对路径jar,把jdk-8u391-linux-i586.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置    
ADD jdk-8u391-linux-i586.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.O_391
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HONE/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success- - - - - --- ----- - ok"
CMD /bin/bash

构建dockerfile文件

docker build -t 新镜像名字:TAG .
docker build -t centosjava8:1.5 .
#注意TAG后边有个空格,有个点
docker images

可以看到构建后的新镜像有1.2个G
在这里插入图片描述

运行新建的镜像

docker run -it centosjava8:1.5 /bin/bash

可以看到启动容器后的默认登入目录为local,是dockerfile文件中设置的。
在这里插入图片描述

测试vim命令和ifconfig命令
vim test.txt
ifconfig

在这里插入图片描述

虚悬镜像

仓库名、标签都是 <none> 的镜像,俗称虚悬镜像

vim Dockerfile
# 新建一个dockerfile文件
FROM ubuntu
CMD echo 'action is success'
# dockerfile文件中增加两个命令
docker build .
# 构建镜像

在这里插入图片描述

# 虚悬镜像删除的命令
docker image prune

docker微服务实战

通过IDEA新建微服务模块

打包代码生成jar包,然后通过xftp上传到linux虚机中,自己新建的文件夹,例如mydocker中。
在这里插入图片描述

通过dockerfile发布微服务部署

1、编写Dockerfile。springBoot编写的jar包自带tomcat,无需额外添加。
在这里插入图片描述

2、将微服务jar包和Dockerfile文件搞到同一个目录下。
在这里插入图片描述
3、构建镜像

docker build -t zzyy_docker:1.6 .

在这里插入图片描述
4、运行容器

docker run -d -p 6001:6001 15a1424eae6c
# 微服务常以后台形式运行

5、测试容器

curl 127.0.0.1:6001/order/docker
# 访问微服务测试

在这里插入图片描述

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

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

相关文章

Win32 基本程序设计原理总结

目录 1. Windows系统 基本原理 2. 需要什么函数库&#xff08;.LIB&#xff09; 2.1 C Runtimes&#xff1a; 2.2 Windows API 3. 需要什么头文件&#xff08;.H&#xff09; 4. Windows 程序运行的本质 5. 窗口类的注册与窗口的诞生 6.消息 6.1 消息分类&#xff1a;…

Vue3 结合typescript 组合式函数(2)

安装axios&#xff1a;npm install axios 1、hooks文件夹下新建useURLLoader 在APP.VUE中使用useURLLoader 使用Dog API 2、使用对象中的属性&#xff0c;必须使用toRefs&#xff0c;否则Reactive响应失效 3、使用泛型 结果&#xff1a;

VS2022 Android NativeActivity 开发指南

几年前最初使用VS时&#xff0c;记得是有Android NativeActivity的&#xff0c;今天更新到了2022最新版&#xff0c;发现找不到这个创建选项。 然后确保安装了C 跨平台开发工具后&#xff0c;开始排查原因。 Visual Studio 2022 中没有“本机活动应用程序” - android - SO中…

vue中$nextTick作用和实例

为什么要使用nextTick&#xff1f; vue中DOM更新是异步执行&#xff0c;相当于我们在修改数据的时候&#xff0c;视图是不会立即更新的&#xff0c;会先把新的数据攒一赞&#xff0c;例如假如v-for更新这三个数据item1和item2和item3&#xff0c;按照vue的特性dom更新的特性会…

SpingBoot的项目实战--模拟电商【4.订单及订单详情的生成】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringBoot电商项目的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.功能需求 二.代码编写 …

CSS与JavaScript的简单认识

CSS&#xff1a;是一门语言&#xff0c;用于控制网页表现&#xff0c;让页面更好看的。 CSS&#xff08;Cascading Style Sheet&#xff09;&#xff1a;层叠样式表 CSS与html结合的三种方式&#xff1a; 1、内部样式&#xff1a;用style标签&#xff0c;在标签内部定义CSS样式…

java仓库管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web仓库管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

Python控制程控电源(USB)

文章目录 前言一、环境搭建1.软件安装2.硬件安装二、设置程控电源连接方式三、Python代码四、验证结果五、pyd文件前言 随着智能电动汽车行业的持续发展,汽车电子或嵌入式设备在软硬件的测试中,都会使用程控电源供电,特别是自动化测试、压力测试场景必定使用到程控电源控制…

【Mybatis】深入学习MyBatis:CRUD操作与动态SQL实战指南

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; Mybatis ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 一基本用法 1 CRUD操作 1. 增加&#xff08;Create&#xff09; 2. 查询&#xff08;Read&#xff09; 3. 更新&#x…

test ui-03-cypress 入门介绍

cypress 是什么&#xff1f; 简而言之&#xff0c;Cypress 是一款专为现代Web构建的下一代前端测试工具。我们解决了开发人员和质量保证工程师在测试现代应用程序时面临的关键问题。 我们使以下操作成为可能&#xff1a; 设置测试编写测试运行测试调试测试 Cypress经常与Se…

AUTOSAR软件手册文档缩写描述,AUTOSAR_TR_PredefinedNames

由于AUTOSAR文档中的缩写太多&#xff0c;入门者看起开不方便。例如TR、SWS、SRS、EXP模块。 下载链接&#xff1a;https://www.autosar.org/fileadmin/standards/R21-11/FO/AUTOSAR_TR_PredefinedNames.pdf

阿里云服务器端口PPTP 1723放行教程

阿里云服务器安装PPTP VPN需要先开通1723端口&#xff0c;阿里云服务器端口是在安全组中操作的&#xff0c;阿里云服务器网aliyunfuwuqi.com来详细说明阿里云服务器安全组开放PPTP VPN专用1723端口教程&#xff1a; 阿里云服务器放行1723端口教程 PPTP是点对点隧道协议&#…

用js让用户输入一个数累加和

需求&#xff1a;用户输入一个数&#xff0c; 计算 1 到这个数的和。 比如 用户输入的是 5&#xff0c; 则计算 1~5 之间的累加和 并且输出到控制台 <body><script>let numprompt(请输入一个数)let sum0for(let i1;i<num;i){sumi}console.log(sum)</script…

Windows内存取证

1.分析内存镜像&#xff0c;找到内存中的恶意进程&#xff0c;并将进程的名称作为flag值提交, 格式flag{xx} pstree 以树的形式展现进程 2.分析内存镜像&#xff0c;找到黑客访问恶意链接的时间格式flag{2023-01-19 00:00:00} 目录 1.分析内存镜像&#xff0c;找到内存中…

SAM-Track online / offline配置

segment anything model&#xff08;SAM&#xff09;是Meta于2023年4月5日发布的分割基础模型。SAM 允许分割任何对象而无需微调。 可以在这里尝试SAM模型的效果。 分割效果这么好&#xff0c;都忍不住想用SAM来做场景的语义分割&#xff0c;realtime与否先放在一边&#xff0c…

BRF文件数据结构

一.BRF-文件头数据结构 type_mesh "mesh" 网格 type_material "material" 材质struct brf_header{int type_length; //4个字节, type字符串对应长度char* type_name; //根据type_length获取int type_content_num; //4个字节,对应类型所含个数,例如含有模…

快速入门ESP32——点亮你的第一个LCD屏幕

相关文章 快速入门ESP32——开发环境配置Arduino IDE 快速入门ESP32——开发环境配置PlatformIO IDE 快速入门ESP32—— platformIO添加开源库和自己的开发库 快速入门ESP32—— 解决platformIO添加开源库下载失败的问题 快速入门ESP32——点亮你的第一个LCD屏幕 前言一、移植T…

【Bootstrap学习 day7】

Bootstrap按钮 按钮样式 使用.btn相关类实现 <button type"button" class"btn">基本按钮</button> <button type"button" class"btn btn-primary">主要按钮</button> <button type"button" cl…

【linux】ufw 的基本使用

碎碎念 所有的云平台的网络流量的进出基本上有三层&#xff0c;首先是虚拟网的流量控制&#xff0c;一般是通过子网访问控制列表来控制vpc也好子网也好的流量出入&#xff0c;其次是安全组控制一层&#xff0c;通过安全组规则控制一类/一组主机&#xff08;指EC2/ECS/VM/CE这些…

单机游戏数据自动保存方案

引言 单机游戏数据的自动保存方案 大家好&#xff0c;2023年还有最后的3天&#xff01; 有小伙伴私信我&#xff0c;说: 总感觉一股脑的全盘定时保存不科学&#xff0c;也写过保存变化的玩家数据&#xff0c;但是改完数据就得手动标记一下字段变化&#xff0c;感觉不够智能&…