当前位置: 首页 > 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 节点…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...