Linux初学(十七)docker
一、docker
1.1 简介
容器技术
容器其实就是虚拟机,每个容器可以运行不同的系统【系统以Linux为主的】
为什么要使用docker?
- docker容器之间互相隔离,可以提高安全性
- 通过使用docker可以做靶场
1.2 安装配置docker
方法一:yum安装
方法二:编译安装
第一步:配置yum源
需要三个源
- BASE 基本源
- EXTRA 额外软件包源
- UPDATA 升级软件包源
[root@localhost yum.repos.d]# vim qinghua.repo
[base]
name=base
enabled=1
gpgcheck=0
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/os/x86_64/[extra]
name=extra
enable=1
gpgcheck=0
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/extras/x86_64/[update]
name=update
enabled=1
gpgcheck=0
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/updates/x86_64/[epel]
name=epel
enabled=1
gpgcheck=0
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7Server/x86_64/
第二步:检查yum源是否配置成功
yum clean all
yum repolist
第二步:安装docker的依赖环境
yum install -y yum-utils device-mapper-persistent-data lvm2
第三步:设置yum源,并更新 yum 的包索引
#在 CentOS 系统中添加阿里云的 Docker CE 仓库。执行该命令后,系统将从阿里云镜像站点下载并安装 Docker CE 软件包
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#快速更新 YUM 缓存
yum makecache fast
第四步:安装docker
yum -y install docker-ce doker-ce-cli containerd.io
第五步:启动并加入开机启动
systemctl start docker
systemctl enable docker
第六步:验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
[root@localhost yum.repos.d]# docker version
Client: Docker Engine - CommunityVersion: 26.0.0API version: 1.45Go version: go1.21.8Git commit: 2ae903eBuilt: Wed Mar 20 15:21:09 2024OS/Arch: linux/amd64Context: defaultServer: Docker Engine - CommunityEngine:Version: 26.0.0API version: 1.45 (minimum version 1.24)Go version: go1.21.8Git commit: 8b79278Built: Wed Mar 20 15:20:06 2024OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.6.28GitCommit: ae07eda36dd25f8a1b98dfbf587313b99c0190bbrunc:Version: 1.1.12GitCommit: v1.1.12-0-g51d5e94docker-init:Version: 0.19.0GitCommit: de40ad0
1.3 管理和使用docker
1.3.1 管理服务
systemctl start docker # 启动docker服务
systemctl stop docker # 关闭docker服务
systemctl enable docker # 设置开机自启动
systemctl disable docker # 取消开机自启动docker info # 显示docker的详细信息
注意:关于防火墙
使用docker需要注意iptables防火墙
建议:
- 关闭firewalld
- 启动iptables
具体操作命令:
yum install iptables-services -ysystemctl stop firewalld systemctl disable firewalldsystemctl start iptables systemctl enableiptables
注意:关闭selinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
1.3.2 配置镜像加速
启动docker容器,需要用docker镜像【docker镜像就是一个操作系统】
默认docker镜像都是在国外,访问速度特别慢,所以需要配置加速
vi /etc/docker/daemon.json
{"registry-mirrors": ["https://mzxx8xy8.mirror.aliyuncs.com"]
}systemctl daemon-reload
systemctl restart docker
1.4 管理镜像
1.4.1 下载镜像
docker pull 镜像名:版本
案例:
1、下载centos7的镜像
docker pull centos:7
2、下载nginx的镜像
docker pull nginx
3、下载busyboy镜像docker pull busybox
1.4.2 查看镜像
docker images # 列出本地所有的镜像。
docker search <image_name> # 在Docker Hub中搜索指定的镜像。
1.4.3 删除操作
docker rm <container_id> # 删除一个已停止的容器。
docker rmi <image_id> # 删除一个本地的镜像(只有在没有任何容器使用该镜像时才能删除)
docker rm -f <container_id> # 强制删除,用来删除正在运行的容器
1.4.4 控制容器
docker start <container_id> # 启动一个已停止的容器。
docker stop <container_id> # 停止一个正在运行的容器。
docker restart <container_id> # 重启一个容器
1.4.5 其他常用命令
docker build # 用于构建Docker镜像。
docker login # 登录到Docker Hub或其他私有仓库。
docker logs <container_id> # 查看容器的日志输出。
1.5 容器管理
1.5.1 查看容器
docker ps # 列出当前正在运行的容器
docker ps -a # 列出所有容器,包括正在运行的和已停止的。
1.5.2 启动容器
docker run
- -t:这里是指定一个终端,如果没有终端,是无法登录这个容器的
- -i,--interactive:如果想用交互式访问,就需要这个选项
- --name string:这里指定容器的名字
- --rm:当容器停止的时候,自动删除容器对象
- -d,--detach:让当前的这个容器工作在后台
- --network string:指定容器加入到那个网络,如果不加的话,默认是一个bridge网络
- -P:暴露容器的端口,将容器中的端口和宿主机的任意端口进行端口映射
- -p 宿主机的端口:容器的端口 可以将宿主机的指定端口和容器的端口进行映射
- -v:逻辑卷
1.5.3 删除容器
docker rm -f 容器名/容器ID
1.5.4 关闭所有容器
docker rm -f `docker ps -a | awk 'NR>=2{print $1}'`
1.6 dockerfile
1.6.1 简介
dockerfile 是一个脚本文件
通过这个脚步文件可以快速做新的镜像
在dockfile中包含了各种关键字
1.6.2 dockerfile 关键字
FROM 指定基础镜像
RUN 在基础镜像中执行的命令
ADD 将宿主机的文件发送到docker容器中
- 如果ADD发送的文件是一个tar.gz的包,那么ADD会自动进行解压
COPY:将宿主机中的一个文件复制到容器中
EXPORT:将容器的端口暴露出去
ENTRYPOINT:在容器中去执行一个shell脚本
# 指定镜像
FROM centos:7# 执行命令安装编译库文件
RUN yum install -y gcc gcc-c++ make openssl-devel zlib-devel ncurses-devel iproute# 安装php环境
RUN yum install epel-release -y# 添加解压nginx包到/tmp目录下
ADD nginx-1.18.0.tar.gz /tmp# 进入目录进行编译安装
RUN cd /tmp/nginx-1.18.0 && ./configure --prefix=/usr/local/nginx && make -j 2 && make install# 删除容器内置配置文件
RUN rm -f /usr/local/nginx/conf/nginx.conf# 复制本地配置文件到容器
COPY nginx.conf /usr/local/nginx/conf# 复制启动脚本
COPY run.sh /tmp
RUN cd /tmp
RUN chmod +x /tmp/run.sh# 复制web代码到容器
COPY s.html /usr/local/nginx/html/# 声明暴露端口
EXPOSE 80# 启动容器nginx服务,指定全局命令daemon off保证服务在前台运行不会关闭
ENTRYPOINT ["/tmp/run.sh"]
案例:用centos作为基础镜像,安装上nginx
第一步:先准备一个目录
第二步:在目录中创建dockerfile文件
# 指定镜像 FROM centos:7# 执行命令安装编译库文件 RUN yum install -y gcc gcc-c++ make openssl-devel zlib-devel ncurses-devel iproute# 安装php环境 RUN yum install epel-release -y# 添加解压nginx包到/tmp目录下 ADD nginx-1.18.0.tar.gz /tmp# 进入目录进行编译安装 RUN cd /tmp/nginx-1.18.0 && ./configure --prefix=/usr/local/nginx && make -j 2 && make install# 删除容器内置配置文件 RUN rm -f /usr/local/nginx/conf/nginx.conf# 复制本地配置文件到容器 COPY nginx.conf /usr/local/nginx/conf# 复制启动脚本 COPY run.sh /tmp RUN cd /tmp RUN chmod +x /tmp/run.sh# 复制web代码到容器 COPY s.html /usr/local/nginx/html/# 声明暴露端口 EXPOSE 80# 启动容器nginx服务,指定全局命令daemon off保证服务在前台运行不会关闭 ENTRYPOINT ["/tmp/run.sh"]第三步:根据dockerfile中的内容,去逐一准备文件
- nginx-1.18.0.tar.gz
- nginx.conf
- run.sh
- s.html
- 链接:https://pan.baidu.com/s/1LIZleafIAcB7HNmkFkbG_Q?pwd=d25l
- 提取码:d25l
第四步:创建镜像文件
docker build -t 镜像名 .第五步:用自己的镜像启动容器
略
相关文章:
Linux初学(十七)docker
一、docker 1.1 简介 容器技术 容器其实就是虚拟机,每个容器可以运行不同的系统【系统以Linux为主的】 为什么要使用docker? docker容器之间互相隔离,可以提高安全性通过使用docker可以做靶场 1.2 安装配置docker 方法一:yum安装…...
Python---Numpy线性代数
1.数组和矩阵操作: 创建数组和矩阵:np.array, np.matrix 基本的数组操作:形状修改、大小调整、转置等 import numpy as np# 创建一个 2x3 的数组 A np.array([[1, 2, 3], [4, 5, 6]]) print("数组 A:\n", A)# 将数组 A 转换为矩阵…...
react+ echarts 轮播饼图
react echarts 轮播饼图 图片示例 代码 import * as echarts from echarts; import { useEffect } from react; import styles from ./styles.scss;const Student (props) > {const { dataList, title } props;// 过滤数据const visionList [{ value: 1048, name: Se…...
政安晨:【深度学习神经网络基础】(三)—— 激活函数
目录 线性激活函数 阶跃激活函数 S型激活函数 双曲正切激活函数 修正线性单元 Softmax激活函数 偏置扮演什么角色? 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨…...
使用tomcat里的API - servlet 写动态网页
一、创建一个新的Maven空项目 首次创建maven项目的时候,会自动从maven网站上下载一些依赖组件(这个过程需要保证网络稳定,否则后续打包一些操作会出现一些问题) ps:校园网可能会屏蔽一些网站,可能会导致maven的依赖…...
从0到1搭建文档库——sphinx + git + read the docs
sphinx git read the docs 目录 一、sphinx 1 sphinx的安装 2 本地构建文件框架 1)创建基本框架(生成index.rst ;conf.py) conf.py默认内容 index.rst默认内容 2)生成页面(Windows系统下…...
EasyExcel 校验后导入
引入pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.3</version></dependency>触发校验类 import com.baomidou.mybatisplus.extension.api.R; import lombok.experimental…...
【星计划★C语言】c语言初相识:探索编程之路
🌈个人主页:聆风吟_ 🔥系列专栏:星计划★C语言、Linux实践室 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. ⛳️第一个c语言程序二. ⛳️数据类型2.1 🔔数据单位2.2 &…...
搜维尔科技:借助 ARVR 的力量缩小现代制造业的技能差距
借助ARVR的力量缩小现代制造业的技能差距 搜维尔科技:Senseglove案例-扩展机器人技术及其VR应用...
数据结构之栈和队列
1.前言 大家好久不见,这段时间由于忙去了。就没有即使维护我的博客,先给大家赔个不是。 我们还是规矩不乱,先赞后看~ 今天讲的内容是数据结构中非常重要的一个部分:栈和队列。它在今后的学习中也会再次出现(c&#…...
centos安装使用elasticsearch
1.首先可以在 Elasticsearch 官网 Download Elasticsearch | Elastic 下载安装包 2. 在指定的位置(我的是/opt/zhong/)解压安装包 tar -zxvf elasticsearch-7.12.1-linux-x86_64.tar.gz 3.启动es-这种方式启动会将日志全部打印在当前页面,一旦使用 ctrlc退出就会导…...
4.7学习总结
java学习 一.Stream流 (一.)概念: Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。Stream流是对集合(Collection)对象功能的增强&…...
自定义gitlog格式
git log命令非常强大而好用,在复杂系统的版本管理中扮演着重要的角色,但默认的git log命令显示出的东西实在太丑,不好好打扮一下根本没法见人,打扮好了用alias命令拍个照片,就正式出道了! 在使用git查看lo…...
Redission--分布式锁
Redission的锁的好处 Redission分布式锁的底层是setnx和lua脚本(保证原子性) 1.是可重入锁。 2.Redisson 锁支持自动续期功能,这可以帮助我们合理控制分布式锁的有效时长,当业务逻辑执行时间超出了锁的过期时间,锁会自动续期,避免…...
非关系型数据库(缓存数据库)redis的集群
目录 一.群集模式——Cluster 1.原理 2.作用 3.特点 4.工作机制 哈希槽 哈希槽的分配 哈希槽可按照集群主机数平均分配(默认分配) 根据主机的性能以及功能自定义分配 redis集群的分片 分片 如何找到给定key的分片 优势 二. 搭建Redis群集…...
MySQL:表的约束(上)
文章目录 空属性默认值列描述zerofill主键 本篇总结的是MySQL中关于表的约束部分的内容 空属性 在进行表的创建时,会有两个值,null和not null,而数据库默认的字段基本都是空,但是在实际的开发过程中要保证字段不能为空ÿ…...
树莓派5使用体验
原文地址:树莓派5使用体验 - Pleasure的博客 下面是正文内容: 前言 好久没有关于教程方面的博文了,由于最近打算入门嵌入式系统,所以就去购入了树莓派5开发板 树莓派5是2023年10月23日正式发售的,过去的时间不算太远吧…...
代码随想录算法训练营第42天| 背包问题、416. 分割等和子集
01 背包 题目描述:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 二维dp数组01背包: 确定dp数组以及下标的含义 …...
Node.js安装及环境配置指南
Node.js安装及环境配置指南 一、Node.js的安装 安装Node.js之前,首先需要确保你的电脑已经安装了合适的编译器和开发环境。Node.js是一个开源的、跨平台的JavaScript运行环境,它使得JavaScript可以在服务器端运行。 下载Node.js安装包 访问Node.js的…...
【Java基础】面试题汇总
Java基础面试题1. JVM vs JDK vs JRE 2. 什么是字节码?采用字节码的好处是什么?3. 为什么说 Java 语言“编译与解释并存”?4. AOT 有什么优点?为什么不全部使用 AOT 呢?5. Java 和 C 的区别?6. Java 中的基本数据类型࿱…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
