当前位置: 首页 > news >正文

Dockerfile命令及实践构建一个网站

dockerfile用于构建docker镜像的,部署一个用于运行你所需的容器环境。相当一个脚本,通过dockerfile自己的指令,来构建软件依赖、文件依赖、存储、

定制docker镜像的方式有两种:

手动修改容器内容,导出新的镜像

基于Dockerfile自行编写指令,基于指令流程创建镜像。

dockerfile简介

镜像都是多层存储的,每一层在前一层的基础上进行修改:

容器也是多层存储,以镜像为基础层,在其基础上加一层做为容器运行时的存储层。

镜像的创建有两种方式:

1、手动修改容器内容,然后docker commit提交容器为新的镜像

2、通过在dockerfile中定义一系列的命令和参数构成的脚本,然后这些命令应用于基础镜像,依次添加层,最终生成一个新的镜像,极大的简化了部署工作。

dockerfile主要组成部分:

基础镜像信息FROM centos:6.8

制作镜像操作指令RUN yum install openssh-server -y

容器启动时执行指令 CMD ["/bin/bash"]

举例:

安装一个mysql,且启动

如果是虚拟机部署形式的话,如下

  1. 开启vmare

  1. 运行某一个虚拟机,centos7

  1. centos7 安装mysql ,yum install mysql-server

  1. 通过脚本,或者命令,启动mysql即可

部署缓慢,且修改了宿主机的环境,删除较为麻烦,占用宿主机的3306端口

下面是基于容器运行mysql

  1. 开始vmware

  1. 运行虚拟机centos7

  1. 安装docker容器软件

  1. 获取mysql镜像即可,docker pull mysql:tag(你无法自由控制,该mysql的镜像是什么发行版,你获取的镜像,是别人定制好的,你下载使用的,你希望得到一个基于centos7.8的发行版,运行mysql)

  1. 直接运行该镜像,通过端口映射,运行mysql,docker run mysql:5.6 (容器能够运行,必须在容器内,有一个进程在前台运行,该容器内,有mysql正在前台运行)。

  1. 访问宿主机的一个映射端口,访问到容器内的mysql

想自定义镜像,就得自己写脚本,也就是dockerfile

dockerfile指令

FROM 这个镜像的妈妈是谁?

MAINTAINER(指定维护者信息,可以没有)

RUN你想让它干啥(在命令前面加上RUN即可)

ADD添加宿主机的文件到容器内,还多了个自动解压的功能。

COPY 作用和ADD是一样的,都是拷贝宿主机的文件到容器内

WORKDIR (设置当前工作目录)

VOLUME 设置卷,挂在主机目录

EXPOSE 指定对外的端口,在容器内暴露一个端口

CMD,指定容器启动后的要干的事情

dockerfile实践

需求,通过dockerfile,构建nginx镜像,且运行容器后,生成的页面是,“测试”。

  1. 创建Dockerfile,注意文件名,必须是这个cat Dockerfile

FROM nginx

RUN echo '<meta charset=utf8>测试大佬' >

/usr/share/nginx/html/index.html

2、构建Dockerfile

docker build .

3、修改镜像名字

docker tag b4200a856253 my_nginx

4、运行该镜像

docker run -d -p 80:80 my_nginx

5、查看宿主机的80端口

http://10.10.10.10:80

COPY指令

copy指令从宿主机复制文件/目录到新的一层镜像内如

copy test.py /home/

支持多个文件,以及通配符形式复制,语法要满足Golang的filepath.Match

copy test* /tmp/cc?.txt. /home/

COPY指令能够保留源文件的元数据,如权限,访问时间等等。

ADD

特性和COPY基本一致,不过多些功能

  1. 源文件是一个url,此时docker引擎会下载该链接,放入目标路径,且权限自动设为600,若这不是期望结果,还得增加一层

  1. 源文件是一个url,且是一个压缩包,不会自动解压,也得是单独用RUN指令解压

  1. 源文件是一个压缩文件,且是gzip、bzip2、,ADD指令会自动解压缩文件到目标路径。

Dockerfile 官方推荐使用COPY,ADD会使构建缓存失效,导致镜像构建失败缓慢。

CMD在容器内运行某个命令,启动

用法,注意是双引号

CMD["参数1","参数2"]

在制定了entrypoint指令后,用CMD指令具体的参数

docker 不是虚拟机,容器就是一个进程,既然是进程那么程序在启动的时候需要制定运行参数,这就是CMD指令作用。

例如centos 镜像默认的CMD是/bin/bash,直接docker run -it centos 会直接进入bash解释器。

也可以启动容器时候,指定参数,docker run -it centos cat /etc/os-releasea

CMD运行shell 命令,也会被转化为shell形式

例如

CMD echo $PATH

会被转化为

CMD ["sh", "-c","echo "]

容器内运行程序

这里需要注意,docker不是虚拟机的概念,虚拟机里的程序运行,基本上都是在后台运行,利用systemctl 运行,但是容器内没有后台进程的概念,必须前台运行。

容器就是为了主进程而存在的,主进程如果退出了,容器也就失去意义了,自动退出。

CMD systemctl start nginx

这种写法是错误的,容器会自动退出

因为 systemctl star nginx 是希望以守护进程形式启动nginx,且CMD命令会转化为

CMD ["sh","-c","systemctl start nginx"]

这样的命令主进程是sh解释器,执行完毕后立即结束了,因此容器也就退出了

因此正确的写法是CMD ["nginx","-g","daemon off;"]

ENTRYPOINT 和 CMD的区别及用法

ENTRYPOINT 和CMD的区别及用法

ENV和ARG都是给容器设置环境变量

区别在于ENV无论是在镜像构建时,还是容器运行时,该变量都可以使用

ARG只是用于构建镜像需要设置的变量,容器运行时就消失了。

VOLUME

容器再运行时,应该保证在存储层不写入任何数据,运行在容器内产生的数据,我们推荐是挂载,写入到宿主机上,进行维护。

VOLUME /data #将容器内的/data文件夹,在容器运行时,该目录自动挂载为匿名卷,任何向该目录中写入数据的操作,都不会被容器记录,保证的容器存储层无状态理念。

EXPOSE ,制定容器运行时对外提供的端口服务,

帮助使用该镜像的人,快速理解该容器的一个端口业务,

docker port 容器

docker run -p 宿主机端口:容器端口

docker run -p #作用是随机宿主机端口:容器内端口

WORKDIR

用于在dockerfile中,目录的切换,更改工作目录,

WORKDIR /opt

USER

用于改变环境,用于切换用户

USER root

USER test

构建一个网站镜像

  1. nginx,修改首页内容,html

  1. web framework ,web框架,一般由开发,通过某个开发语音,基于某个web框架,自己去开发一个web站点,python、django框架。

本次实践:

  1. 用python语言,基于flask web框架,开发一个网站,写一个后端的 网站代码

  1. 开发dockerfile,部署该代码,生成镜像

  1. 其他人基于该镜像,docker run就可以在电脑跑起来你这个网站

比如安装一个etcd、nacos,都是比较复杂的一些软件

需要依赖于go语言环境,比如需要依赖于java环境,在自己的机器安装好对应的开发环境,以及对应的版本,以及个各种依赖。

tomcat、jdk环境

当有了docker

docker pull nacos 打包好了各种依赖环境

docker pull tomcat 这些主流的镜像都可以直接找到,并且该镜像中,就已经打包好了Java环境

docker run tomcat xxxx 可以直接访问tomcat了

  1. 在宿主机上准备一个目录,准备好dockerfile

写一个flask 的python代码

创建好代码文件

  1. 编写dockerfile

touch Dockerfile

FROM centos:7.8.2003
RUN curl -o /etc/    ;
RUN curl -o /etc/    ;
RUN yum makecache fast;
RUN yum install python3-devel python3-pip -y
RUN pip install flask
COPY test_flask.py /opt
WORKDIR /opt
EXPOSE 8080
CMD ["python","app.py"]
  1. 检查代码环境,及内容

代码文件 和 Dockerfile 在平级目录中

  1. 构建镜像

生成一个镜像

docker build -t 'test/my_flask' .

然后执行dockerfile里的命令

docker build --no-cache -t ‘test/my_flask’.

  1. 运行镜像,生成容器, -d 后台运行 --name 容器的名字 -p宿主机的90端口访问到容器内地8080

docker run -d my_flask -p 90:8080 test/my_flask

  1. 访问宿主机,看容器内flask web网站

  1. 如何修改该网站的内容

第一种修改宿主机的代码,以及dockerfile,重新构建

第二种可以进入到以及运行的容器内,修改代码,重启容器即可。

(1)进入容器

docker exec -it 容器id bash

(2)修改容器内的程序

cat test_flask.py

(3)退出容器,重启容器

exit

docker restart 容器id

相关文章:

Dockerfile命令及实践构建一个网站

dockerfile用于构建docker镜像的&#xff0c;部署一个用于运行你所需的容器环境。相当一个脚本&#xff0c;通过dockerfile自己的指令&#xff0c;来构建软件依赖、文件依赖、存储、定制docker镜像的方式有两种&#xff1a;手动修改容器内容&#xff0c;导出新的镜像基于Docker…...

[VMware]Ubuntu18.04 网络图标消失

Ubuntu 18.04 网络图标消失运行环境问题解决NO.1 执行 sudo systemctl stop network-managerNO.2 执行 sudo rm /var/lib/NetworkManager/NetworkManager.stateNO.3 执行 sudo systemctl start network-managerNO.4 vi /etc/NetworkManager/NetworkManager.confNO.5 执行 sudo …...

国产C2000,P2P替代TMS320F280049C,独立双核32位CPU,主频高达400MHz

一、特性参数 1、独立双核&#xff0c;32位CPU&#xff0c;单核主频400MHz 2、IEEE 754 单精度浮点单元 &#xff08;FPU&#xff09; 3、三角函数单元 &#xff08;TMU&#xff09; 4、1MB 的 FLASH &#xff08;ECC保护&#xff09; 5、1MB 的 SRAM &#xff08;ECC保护&…...

二十五、Gtk4-多线程分析

1 回顾 1.1 Gnome相关 首先回顾一下GLib&#xff0c;GObject&#xff0c;GIO&#xff0c;Gtk的不同&#xff0c;因为下面会涉及到这些概念里面的函数。 所有这些都是由Gnome项目开发的库&#xff0c;一般都用于Gnome环境相关的应用程序。 Gtk&#xff1a;GUI界面库。GLib&a…...

JVM基础学习

JVM分为两个子系统,两个组件一个子系统是Class loader类装载系统&#xff0c;另一个子系统是Execution Engine执行引擎一个组件是Runtime data area 运行时数据区&#xff0c;Native Interface 本地接口Class loader&#xff1a;根据给定的全限定类名来装载class文件到运行时数…...

ASML逆袭史:人、资金、技术,缺一不可

前言 近年来&#xff0c;由于众所周知的原因&#xff0c;荷兰ASML&#xff08;阿斯麦&#xff09;公司的先进半导体制造设备——光刻机&#xff0c;进入普通大众视野&#xff0c;成为人们茶余饭后谈论的焦点话题之一。 1月底&#xff0c;“美日荷三方谈判达成协议&#xff0c;可…...

MongoDB 覆盖索引查询

MongoDB 覆盖索引查询 官方的MongoDB的文档中对覆盖查询做了说明&#xff1a; 所有的查询字段是索引的一部分所有的查询返回字段在同一个索引中 由于所有出现在查询中的字段是索引的一部分&#xff0c; MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询…...

Flink Checkpoint 中的Aligned Checkpoint 和 Unaligned Checkpoint

文章目录知识点反压CheckpointBarrierAligned CheckpointUnaligned Checkpoint核心思想实现原理UC同步阶段UC异步阶段知识点 反压 反压是流式系统中关于处理能力的动态反馈机制&#xff0c;并且是从下游到上游的反馈&#xff0c;一般是在实时数据处理的过程中&#xff0c;上游…...

C++快速入门

本章内容我将结合C语言一起&#xff0c;初步学习了解c&#xff0c;与大家一起快速入门这门语言。当然鉴于c本身属于一门中级语言&#xff0c;大家对编程有一定了解之后来学习这门知识会更加得心应手。简介C 被认为是一种中级语言&#xff0c;它综合了高级语言和低级语言的特点。…...

ubuntu18.04 network有线网络图标缺失解决记录

先按照博客&#xff11;安装驱动   博客&#xff11;链接&#xff1a;Ubuntu安装 Realtek R8125 驱动_Lwang2018的博客-CSDN博客_瑞昱8125 for ubunt 安装完成后&#xff0c;遇到问题&#xff1a;ifconfig -a显示的有线网接口&#xff08;名字以en开头&#xff09;没有ip地址…...

java对象克隆和面向对象的设计原则

java进阶注解内置注解元注解自定义注解对象克隆浅克隆深克隆java设计模式建模语言类之间的关系依赖关系关联关系单向关联双向关联自关联聚合关系组合关系继承关系实现关系面向对象设计原则单一职责开闭原则里氏替换原则依赖倒置接口隔离迪米特原则组合/聚合复用原则注解 java注…...

传透式血氧仪设计方案

该方案一种检测方式是选择使用光敏二极管接收光信号&#xff0c;采用传统穿透式夹指测量&#xff1b;另一种是使用光谱传感器接收光信号&#xff0c;采用反射式测量。该传感器可将光信号直接转换成数据信息给主控端进行处理&#xff0c;从而节省了用户将光信号转换成模拟信号&a…...

让逆向工程师们头疼的代码混淆,就像永远也走不出的“浪浪山”

目录 代码混淆究竟是什么&#xff1f; 如何做代码混淆&#xff1f; 代码混淆不等于加密 App 加固非一时之功 “我想离开浪浪山。” 在数次尝试破解某个App 时&#xff0c;某个逆向工程师无奈感慨道。 逆向工程师顾名思义就是把一个个完整的软件逆推&#xff0c;还原成一段段…...

【拓展】基于机器学习的心脏病预测方法(14)——心脏病数据集补充

目录 前言1、数据集11.1 数据集介绍1.2 数据集属性2、数据集22.1 数据集介绍2.2 数据集属性3、数据集33.1 数据集介绍3.2 数据集属性4、下载地址前言 在实际研究过程中,前文所述数据集由于尺寸过小(仅有303份数据和13个属性信息)或数据集单一(仅有一个数据集,不具备普适性…...

深度解读Webpack中的loader原理

一、前言 webpack 是一个现代 JavaScript 应用的静态模块打包器。那么 webpack 是怎样实现不同种类资源模块加载的呢&#xff1f; 没错就是通过 loader。loader 用于对模块的源代码进行转换。loader 可以使你在 import 或加载模块时预处理文件。 我们带着下面几个问题&#…...

2023年全国最新二级建造师精选真题及答案

百分百题库提供二级建造师考试试题、二建考试预测题、二级建造师考试真题、二建证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 一、单选题 1.关于法人在建设工程中的地位的说法&#xff0c;正确的是&#xff08;&#xff0…...

为什么现代企业发展离不开CRM系统的助力

如今的CRM系统对于任何企业来说都重要&#xff0c;因为它能帮助企业收获新客户&#xff0c;保留现有客户&#xff0c;并且将不同部门的信息全部汇集&#xff0c;实时提供关于每位客户整体全面的看法。因此&#xff0c;销售、市场营销和客户支持等领域的客户直接服务员工能够做出…...

vb.net计算之.net core基础(1)-获取农历和天气

目录 .net core 简介创建hello,world应用程序获取天气和农历.net core 简介 .NET Core是适用于 Windows、Linux 和 macOS 的免费、开源托管的计算机软件框架。 它是微软开发的第一个官方版本,具有跨平台能力的应用程序开发框架 (Application Framework),未来也将会支持 Free…...

设计模式之代理模式详解和应用

目录1 代理模式定义2 代理模式的应用场景3 代理模式的通用写法4 从静态代理到动态代理5 静态模式在业务中的应用6 动态代理在业务中的应用7 手写JDK动态代理实现原理7.1 JDK动态代理的实现原理7.2 CGLib动态代理容易踩的坑8 CGLib代理调用API及原理分析9 CGLib和JDK动态代理对比…...

JavaScript HTML DOM 节点列表

HTML DOM 是一种文档对象模型&#xff0c;它允许开发人员使用 JavaScript 来访问和修改网页的内容和结构。节点列表是 HTML DOM 中一个重要的概念&#xff0c;它允许开发人员以编程方式访问和操作文档中的节点元素。 在本文中&#xff0c;我们将探讨 JavaScript HTML DOM 节点…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...