网络安全 Day31-运维安全项目-容器架构下
容器架构下
- 6. Dockerfile
- 6.1 Docker自动化DIY镜像之Dockerfile
- 1) 环境准备
- 2) 书写Dockerfile内容
- 3) 运行Dockerfile生成镜像
- 4) 运行容器
- 5) 小结
- 6.2 案例14:Dockerfile-RUN指令
- 1) 书写Dockerfile
- 2) 构建镜像
- 3) 启动容器
- 4) 测试结果
- 6.3 Dockerfile指令
- 7. 容器数据持久化
- 1)演示:
- a)启动数据库容器
- b)连接容器创建库
- c)删除容器,重新创建容器检查数据是否还在?
- 2)数据持久化
- 3)小结:
- 8. 容器镜像的私有仓库
- 1) 拉取registry镜像与修改配置文件
- 2)启动镜像仓库
- 3) 上传镜像到私有的镜像仓库
- 4) 删除本地镜像
- 5) 重新拉取
- 6)小结
6. Dockerfile
6.1 Docker自动化DIY镜像之Dockerfile
- 通过上个案例(手动创建镜像)发现很麻烦所以用dockerfile自动化创建镜像
- 这里我们就可以使用Dockerfile文件方法把定义镜像的流程,根据Dockerfile指令指定,最终生成我们想要的自定义镜像。
- 目标:
- 1️⃣会使用Dockerfile
- 2️⃣掌握如何书写Dockerfile
- 任务要求:通过Dockerfile一键创建小鸟飞飞的镜像。
1) 环境准备
- 创建目录:
mkdir -p /server/dockerfiles/01-bird - 上传文件:上传
bird.zip到linux(/root/即可) - 解压:
unzip bird.zip - 复制文件到目录中:
cp -a bird /server/dockerfiles/01-bird
2) 书写Dockerfile内容
- 梳理自定义bird镜像的流程(对镜像的操作)
| 自定义镜像流程 | 步骤 | Dockerfile指令 |
|---|---|---|
| 1️⃣ | 选择基础镜像 nginx:1.24 | FROM nginx:1.24 |
| 2️⃣ | 把bird代码传输到 /usr/share/nginx/html/目录下。 通过Dockerfile处理的 文件或目录放在Dockerfile所在目录。 | ADD bird/ /usr/share/nginx/html/ ADD 宿主机目录或文件 镜像目录 |
| 3️⃣ | 完成 | CMD指令 |
- Dockerfile
#1. Dockerfile所在目录结构drwxr-xr-x 3 root root 98 11月 16 2021 bird #Dockerfile需要的bird目录 -rw-r--r-- 1 root root 239 8月 14 09:31 Dockerfile #Dockerfile文件#2. 编辑Dockerfile vim Dockerfile #指定基础镜像 FROM nginx:1.24 #镜像的说明信息 LABEL author=lidao996 url=www.oldboyedu.com#传输内容 ADD bird/ /usr/share/nginx/html/#指定容器入口指令 #用于启动ngx服务 CMD ["nginx","-g","daemon off;"]
3) 运行Dockerfile生成镜像
- 进入Dockerfile所在目录:
cd /server/dockerfiles/01-bird/ - 生成镜像命令:
docker build -t oldboydir:lidao996_bird_diy_v2 .- -t tag标签,用于指定新镜像的分类:名字_版本
.指定Dockerfile就在当前目录
4) 运行容器
- 根据新的镜像启动容器:
docker run -d -p 12306:80 --name bird_diy_v2 oldboydir:lidao996_bird_diy_v2 - 检查容器运行情况:
docker ps |grep bird_diy_v2 - 浏览器检查:登录
10.0.0.62:12306
5) 小结
- Dockerfile作用与指令。
- 一般根据手动的步骤,把步骤转行为Dockerfile.
- 开头部分
- FROM
- LABEL
- 中间过程
- ADD/COPY
- 结尾部分
- CMD
6.2 案例14:Dockerfile-RUN指令
- 创建一个nginx自定义镜像,镜像首页文件内容要是oldboyedu.com.
- echo命令修改文件内容。
echo oldboyedu.com >/usr/share/nginx/html/index.html - 创建自定义镜像的时候执行Linux命令。
1) 书写Dockerfile
mkdir -p /server/dockerfiles/02-ngx
cd /server/dockerfiles/02-ngxvim Dockerfile
FROM nginx:1.24
LABEL author=lidao996 url=www.oldboyedu.com RUN echo oldboyedu.com >/usr/share/nginx/html/index.htmlCMD ["nginx","-g","daemon off;"]
2) 构建镜像
docker build -t oldboydiy:test_v2 .
3) 启动容器
docker run -d -p 10086:80 oldboydiy:test_v2
4) 测试结果

6.3 Dockerfile指令
| Dockerfile指令 | 含义 | 应用 | 建议 |
|---|---|---|---|
| Dockerfile开头部分 | |||
| FROM | 指定基本镜像类似于docker pull下载镜像 | FROM ubuntu:20.04 | 尽量少写ubuntu或ubuntu:latest,尽量指定具体的版本. |
| LABEL | 用于指定容器的属性信息,作者,个人联系方式(邮件)… | LABEL maintainer=“lidao996 youjiu_linux@qq.com” | 推荐使用LABEL,不推荐使用下面的MAINTAINER |
| ENV | 用于创建Dockerfile中使用的变量 | ENV Tengine_Version空格2.3.3 | 软件版本可以创建使用变量. |
| Dockerfile中间处理部分 | |||
| RUN | 制作镜像过程中需要的执行命令,通常系统配置,服务配置,部署。 但不能出现阻塞当前终端的命令。 | RUN 系统命令即可. | 不建议使用连续多个RUN,合并连续多个RUN. |
| ADD | 可以把指定文件或目录拷贝到容器中(指定目录),会解压压缩包. 相对于当前目录. | ADD restart.tar.gz空格/app/code/restart/ | 拷贝压缩包使用. |
| COPY | 可以把指定文件或目录拷贝到容器中(指定目录),不支持自动解压. 相对于当前目录. | COPY nginx.conf空格 /etc/nginx/nginx.conf | 拷贝文件或目录. |
| Dockerfile结尾部分书写的内容 | |||
| CMD | 用于指定容器的入口命令.入口命令可以在docker run的时候替换.==运行镜像启动容器的时候,容器默认运行的命令是什么. | CMD [“命令”,“参数01”,“参数02”] CMD [“nginx”,“-g”,“daemon off;”] | 大部分都会使用CMD. |
7. 容器数据持久化
1)演示:
a)启动数据库容器
docker run -d -p 13306:3306 --name mysql_8.0_v3 -e MYSQL_ROOT_PASSWORD=1 mysql:8.0-debian
b)连接容器创建库
- 进入到数据库创建数据库
c)删除容器,重新创建容器检查数据是否还在?
- 数据丢失
2)数据持久化
- 把容器中的文件或目录连接到宿主机中。
- 把宿主机的/server/data/mysql/目录连接到容器中/var/lib/mysql/
- 准备宿主机的数据目录:
mkdir -p /server/data/mysql/ - 使用-v参数连接宿主机与容器(
-v 宿主机的目录或文件:容器中的目录或文件,把宿主机中的目录或文件挂载(连接)到容器中。)docker run -d -p 13306:3306 --name mysql_8.0_v3 -e MYSQL_ROOT_PASSWORD=1 \ -v /server/data/mysql/:/var/lib/mysql/ mysql:8.0-debian - 检查结果:
/server/data/mysql/下增加了很多文件 - 进入容器创建库:
docker exec -it mysql_8.0_v3 mysql -uroot -p1#这样可以直接进入数据库 - 创建库:
create database lidao996; - 退出然后删除容器:
docer rm -f mysql_8.0_v3 - 重新创建容器并检查库是否还在
docker run -d -p 13306:3306 --name mysql_8.0_v3 -e MYSQL_ROOT_PASSWORD=1 \
-v /server/data/mysql/:/var/lib/mysql/ mysql:8.0-debian docker exec -it mysql_8.0_v3 mysql -uroot -p1 #这样可以直接进入数据库
show databases; #数据库还在
3)小结:
- 理解什么是容器的数据持久化即可。为何要做持久化。
- docker run 加上-v选项
- 应用数据库数据目录做做持久化。
- 用于测试代码:nginx /usr/share/nginx/html/连接到宿主机的代码目录。
- 用于测试配置:nginx.conf ,my.cnf 配置文件。
8. 容器镜像的私有仓库
- registry仓库(简单,命令行),harbor仓库(复杂,web界面)。
1) 拉取registry镜像与修改配置文件
- 拉镜像:
docker pull registry - 修改所有docker配置文件
cat > /etc/docker/daemon.json<<'EOF' {"registry-mirrors": ["https://bjjtv7cs.mirror.aliyuncs.com"],"insecure-registries": ["10.0.0.62:5000"] } EOF systemctl restart docker
2)启动镜像仓库
mkdir -p /server/data/images/
docker run -d --name "oldboy_registry" -p 5000:5000 \
-v /server/data/images/:/var/lib/registry \
--restart=always registry
3) 上传镜像到私有的镜像仓库
docker tag oldboydir:lidao996_bird_diy_v2 10.0.0.62:5000/oldboyedu/ngx:bird_diy_v2
#docker login -u用户名 -p密码
docker push 10.0.0.62:5000/oldboyedu/ngx:bird_diy_v2
4) 删除本地镜像
docker rmi 镜像名字
如果镜像使用中则需要删除镜像对应的容器,然后删除镜像。
5) 重新拉取
docker pull 10.0.0.62:5000/oldboyedu/ngx:bird_diy_v2
6)小结
-
未来使用内部私有镜像仓库。
-
会通过docker tag +docker push 上传。
-
会通过docker pull 下载即可。
-
相关文章:
网络安全 Day31-运维安全项目-容器架构下
容器架构下 6. Dockerfile6.1 Docker自动化DIY镜像之Dockerfile1) 环境准备2) 书写Dockerfile内容3) 运行Dockerfile生成镜像4) 运行容器5) 小结 6.2 案例14:Dockerfile-RUN指令1) 书写Dockerfile2) 构建镜像3) 启动容器4) 测试结果 6.3 Dockerfile指令 …...
如何给a-table增加列宽拖动功能
对于table的列宽设置 相信用过的人都知道,想要设置得很完美,几乎是不现实的,因为总有数据或长或短,那我们应该如何优化它呢?那便是让用户自行拖动列宽,从而能看全table的数据,但是对于antd-vue …...
Labview选项卡之实现被选择选项卡工作
文章目录 前言一、使用选项卡二、实现被选择选项卡工作1、需求2、分析3、实现①、前面板②、程序框图 三、效果展示四、源码自取 前言 有些时候,我们做界面,需要好多个界面切换。如果是同一个 VI 里界面切换,一般都是选项卡了。切换不同选项…...
【Image captioning】ruotianluo/self-critical.pytorch之1—数据集的加载与使用
【Image captioning】ruotianluo/self-critical.pytorch之1—数据集的加载与使用 作者:安静到无声 个人主页 数据加载程序示意图 使用方法 示例代码 #%%from __future__ import absolute_import from __future__ import division from __future__ import print_…...
研发工程师玩转Kubernetes——就绪探针(Readiness Probe)和服务(Service)
在《研发工程师玩转Kubernetes——启动、存活和就绪探针》中,我们讲了就绪探针和服务之间的特殊关系。就绪探针检测失败并不代表整个程序处于“非存活”状态,可能只是短暂临时的不可以提供服务,比如CPU阶段性占满,导致就绪探针检测…...
最新Kali Linux安装教程:从零开始打造网络安全之旅
Kali Linux,全称为Kali Linux Distribution,是一个操作系统(2013-03-13诞生),是一款基于Debian的Linux发行版,基于包含了约600个安全工具,省去了繁琐的安装、编译、配置、更新步骤,为所有工具运行提供了一个…...
excel填数据转json格式
定制化比较严重,按需更改 excel文件如下 代码 # -*- coding: utf-8 -*- import oss2 import shutil import sys import xlwt import xlrd import json from datetime import datetime, timedeltafile1 "C:\\Users\\cxy\\Desktop\\generate.xls" #打开表…...
解决echarts和v-show一起使用canvas宽高改变
本来是想没有数据显示暂无数据的,结果显示成了这样 1.把V-show改成v-if <template><divclass"chart1"ref"chart1"v-if"!nodata"style"width: 100%; height: 100%"></div><el-empty description&quo…...
typescript 中的数据类型有哪些?
目录 1. 介绍2.总结 话不多说 直接开冲 干干干! 1. 介绍 typescript 的数据类型主要有如下: boolean(布尔类型)number(数字类型)string(字符串类型)array(数组类型&…...
RabbitMQ-消息中间件学习记录(what-how-why)
什么是消息中间件 简单的来说就是消息队列中间件,生产者发送消息到中间件,消息中间件用于保存消息并发送消息到消费者。 消息中间件RabbitMQ的基本组件 1)producer -生产者 2)customer -消费者 3)broker (经纪人)- MQ…...
前端HTML进阶
day02:列表、表格、表单 目标:掌握嵌套关系标签的写法,使用列表标签布局网页 01-列表 作用:布局内容排列整齐的区域。 列表分类:无序列表、有序列表、定义列表。 无序列表 作用:布局排列整齐的不需要规…...
Python“牵手”lazada商品详情页数据采集方法,lazadaAPI接口申请指南
lazada详情接口 API 是开放平台提供的一种 API 接口,它可以帮助开发者获取商品的详细信息,包括商品的标题、描述、图片等信息。在电商平台的开发中,详情接口API是非常常用的 API,因此本文将详细介绍详情接口 API 的使用。 一、la…...
买机票系统---(java实现)
/* * 案例 * 卖机票 * 需求:机票价格按照淡季和旺季,头等舱和经济舱收费,输入机票原价,月份和头等舱或经济舱 * 旺季(5-10月):头等舱9折,经济舱8.5折 * 淡季(11-来年4月&…...
“new出对象“原理的深层解密
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 …...
Java基础篇--SecureRandom(安全随机)类
java.security.SecureRandom类是Java中用于生成安全的随机数的一个类。与普通的Random类不同,它提供了一种可信赖的随机数生成器,用于生成具有高度随机性的随机数。 SecureRandom类的实例使用了更加安全的随机数生成算法,这些算法通常经过密…...
论文复现--关于多视角动作捕捉工具箱 --XRMoCap的研究
分类:动作捕捉 github地址:https://github.com/openxrlab/xrmocap 所需环境: Ubuntu18.04,conda22.9.0,CUDA11.4 目录 环境配置 环境配置 conda create -n XRmocap python3.7 -y conda activate XRmocap# install ffm…...
Spring Profile与PropertyPlaceholderConfigurer实现项目多环境配置切换
最近考虑项目在不同环境下配置的切换,使用profile注解搭配PropertyPlaceholderConfigurer实现对配置文件的切换,简单写了个demo记录下实现。 基本知识介绍 Profile Profile通过对bean进行修饰,来限定spring在bean管理时的初始化情况&#…...
ansible入门
ansible入门 一.ansible 背景介绍 Ansible 是一个广受欢迎的 IT 自动化系统。可以用来处理配置管理、应用自动化部署、云资源配给、网络 自动化和多借点部署等任务。其也可以使得复杂的变更如带负载均衡的零停机滚动更新更加容易。Ansible.com 1.1 自动化运维概念 1.1.1 运维…...
用Node.js吭哧吭哧撸一个运动主页
简单唠唠 某乎问题:人这一生,应该养成哪些好习惯? 问题链接:https://www.zhihu.com/question/460674063 如果我来回答肯定会有定期运动的字眼。 平日里也有煅练的习惯,时间久了后一直想把运动数据公开,…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
