网络安全 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 如果我来回答肯定会有定期运动的字眼。 平日里也有煅练的习惯,时间久了后一直想把运动数据公开,…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...