Docker 的安装与使用
Docker 的安装
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。
Docker CE 的安装请参考官方文档,我们这里以CentOS为例:
1、Docker 要求 CentOS 系统的内核版本高于 3.10
通过 uname -r 命令查看你当前的内核版本
uname -r
2、使用 root 权限登录 Centos。确保 yum 包更新到最新。
yum -y update
3、卸载旧版本(如果安装过旧版本的话)
sudo yum remove -y docker*
4、安装需要的软件包, yum-util 提供 yum-config-manager 功能
yum install -y yum-utils
5、设置yum源,并更新 yum 的包索引
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
6、可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
7、安装docker
yum install -y docker-ce-3:26.1.4-1.el7.x86_64 # 指定安装版本
8、启动并加入开机启动
systemctl start docker
systemctl enable docker
9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
docker version
10、卸载docker
yum remove -y docker*
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
rm -rf /var/run/docker
Docker常用命令
镜像相关命令
1、列出镜像
docker image ls
2、拉取镜像(会从 Docker Hub 的仓库中下载镜像)
docker pull 镜像名称[:tag]
docker pull java:8
3、删除本地镜像
docker image rm 镜像名或镜像id
容器相关命令
1、运行容器
docker run [option] 镜像名 [向启动容器中传入的命令]
常用可选参数说明:
-d:代表后台运行容器
-p 宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
--name 为创建的容器命名
-e 为容器设置环境变量
--network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同
2、查看容器
docker ps [-a]
-a:查看全部的容器,包括没有运行
3、 查看容器日志
docker logs -f 容器id
4、 进入容器内容部
docker exec -it 容器id /bin/bash
5、容器与宿主机相互复制文件
# 将宿主机的文件复制到容器内部
docker cp 文件名称 容器id:容器内部路径
# 从容器里面拷贝文件到宿主机
docker cp 容器id:文件在容器内的路径 宿主机路径
6、启动、停止容器
# 启动停止的容器
docker start 容器id# 停止指定的容器
docker stop 容器id
# 停止全部容器
docker stop $(docker ps -qa)# 删除指定容器(删除容器前,需要先停止容器)
docker rm 容器id
7、将容器保存为镜像
docker commit 容器名 镜像名
8、镜像备份与迁移
可以通过save命令将镜像打包成文件,拷贝给别人使用
docker save -o 保存的文件名 镜像名
docker save -o ./ubuntu.tar ubuntu在拿到镜像文件后,可以通过load方法,将镜像加载到本地
docker load -i ./ubuntu.tar
使用Dockerfile构建微服务镜像
Dockerfile是一个文本文件,其中包含了若干条指令,指令描述了构建镜像的细节
如下为Dockerfile的语言:
from: 指定当前自定义镜像依赖的环境
copy: 将相对路径下的内容复制到自定义镜像中
workdir: 声明镜像的默认工作目录
run: 执行的命令,可以编写多个
cmd: 需要执行的命令(在workdir下执行的,cmd可以写多个,只以最后一个为准)
目标:将 5G定制网的微服务,打包成1个镜像文件
1、在微服务的目录新建一个 Dockerfile 的文件,在里面增加如下内容:
# 使用 jdk8 作为基础镜像
FROM jdk8:8u51# 设置工作目录
WORKDIR /app# 复制所有微服务的JAR文件到容器中
COPY ./cyberwing-common/cyberwing-common.jar /app/cyberwing-common/
COPY ./cyberwing-common/application.yml /app/cyberwing-common/
COPY ./capitek-upms/application-dev.yml /app/capitek-upms/
COPY ./capitek-upms/upms.jar /app/capitek-upms/# 暴露端口
EXPOSE 8120 8102ENV JAVA_OPTS "-Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/ -Dfile.encoding=utf-8"ENTRYPOINT java ${JAVA_OPTS} -jar /app/cyberwing-common/cyberwing-common.jar --spring.config.location=/app/cyberwing-common/application.yml & \java ${JAVA_OPTS} -jar /app/capitek-upms/upms.jar --spring.config.location=/app/capitek-upms/application-dev.yml --jasypt.encryptor.password=capitekor & \wait
2、在Dockerfile所在路径执行以下命令构建镜像:
docker build -t my-app .
# -t 指定镜像名字,(.)表示Dockerfile文件所在路径
3、运行容器
docker run -d -p 18899:8899 --name my-app my-app
4、如果希望在运行容器时覆盖环境变量的值,可以在 docker run 命令中使用 -e 标志来传递环境变量
首先改写微服务的配置文件,将配置中统一设置的 Mysql、redis 这些配置项改为 变量 形式
docker run -d \-p 18120:8120 \-p 18102:8102 \--name my-app \-e DATABASE_URL="172.18.1.212" \-e DATABASE_PORT="3306" \-e DATABASE_NAME="cyberwing_v1.4_zdyfy" \-e DATABASE_USERNAME="ENC(FYthkcvukQtU+nbm+5lCtg==)" \-e DATABASE_PASSWORD="ENC(JUzm26YzVxf8CsmiqLiHAg==)" \my-app
学习文档 1 :
docker 知识点:
www.codezhou.top/article/docker使用#767b25e35ba84a2ba6c00f9f20a9caf1
相关文章:

Docker 的安装与使用
Docker 的安装 Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。 Docker CE 的安装请参考官方文档…...
Android Studio 中三方库依赖无法找到的解决方案
目录 错误信息解析 解决方案 1. 检查依赖版本 2. 检查 Maven 仓库配置 3. 强制刷新 Gradle 缓存 4. 检查网络连接 5. 手动下载依赖 总结 相关推荐 最近,我在编译一个 Android 老项目时遇到了一个问题,错误信息显示无法找到 com.gyf.immersionba…...
PGMP练-DAY24
DAY241A program has completed and closed. The training for the receiving organization has also delivered. But the stakeholders still concern that the benefits cannot be realized in long term.What does the program manager review to improve the situation?项…...

【C++动态规划 最长公共子序列】1035. 不相交的线|1805
本文涉及知识点 C动态规划 LeetCode1035. 不相交的线 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足: nums1[i] nums2[j] 且绘制的…...

FFmpeg的基本结构
FFmpeg框架可以简单分为两层,上层是以ffmpeg、ffplay、ffprobe为代表的命令行工具;其底层支撑是一些基础库,包含AVFormat、AVCodec、AVFilter、AVDevices、AVUtils等模块库。 常用函数如下: 1. AVFormat 封装/解封装模块 avf…...
react 受控组件和非受控组件
在 React 中,受控组件和非受控组件是两种处理表单元素(如输入框、选择框等)值的方式。 1. 受控组件 受控组件是指 React 组件的表单元素的值是由 React 组件的 state 来管理的。换句话说,React 会全程控制表单元素的值ÿ…...
C语言模块化概述
一、函数名的意义 1.c语言是一门面向过程的语言:所谓的过程就是动词,动作。 功能块动词1动词2……动词 2.功能块:就是一堆动词(动作)的组合,动作通过函数来实现。 3.函数的功能:承上启下 承…...
WPF 中的视觉层和逻辑层有什么区别?
在 WPF(Windows Presentation Foundation)中,视觉层和逻辑层是两个不同的概念,它们分别涉及到界面的展示和应用的行为。要理解这两个层次的区别,我们需要从 WPF 的设计背景、架构以及它们之间的相互关系来全面分析。 …...
Kafka简单实践
使用 Apache Kafka 和 Swoole 的 PHP 实践案例 一、引言 Apache Kafka 是一个开源的分布式流处理平台,能够处理大量的实时数据流。由于其高吞吐量、可扩展性和持久性,Kafka 成为构建微服务架构和大数据处理的重要工具。Swoole 是一个高性能的异步网络通…...
JS
文章目录 项目地址一、JS1.1 if语句1.2 for循环1.2 三元表达式1.3 switch1.4 数组的push方法1.5 fuction1.5.1 arguments1.6 匿名函数1.7 预解析1.8 js对象1.8.1创建一个类1.8.2 遍历对象1.9 js的内置对象1.9.1 随机整数二、DOM2.1 获取元素2.2 事件基础2.2.1 事件三要素2.2.2 …...

【原创】java+ssm+mysql商品库存管理系统(进销存)设计与实现
个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…...

three.js 杂记
欧拉角旋转变换 x,y,z 弧度单位 THREE.MathUtils.DEG2RAD 度数转弧度 new THREE.Euler( - 90 * THREE.MathUtils.DEG2RAD, 0, 0 ) radius:半径 setFromSphericalCoords ( radius : Float, phi : Float, theta : Float ) : this 从球坐标中的radius、phi和theta设置该向量…...

基于Hadoop、hive的数仓搭建实践
文章目录 架构图Hadoop搭建Hive 搭建MySQL搭建官网文档下载配置配置hive环境变量配置日志文件配置hive-site 复制mysql 驱动包删除日志包初始化元数据启动metastore服务使用hive CLI启动hiveServer2访问hiveserver2客户端连接beeline shell连接 Dbeaver连接经验 基于HDFS Hive…...

新的恶意软件活动通过游戏应用程序瞄准 Windows 用户
一种新的恶意软件 Winos4.0 被积极用于网络攻击活动。FortiGuard实验室发现,这种先进的恶意框架是从臭名昭著的 Gh0strat 演变而来的,配备了模块化组件,可在受感染的设备上进行一系列恶意活动。 这些攻击已在游戏相关应用程序中发现…...

【Hutool系列】反射工具-ReflectUtil
前言 反射是 Java 中一种强大的机制,可以在运行时动态地获取类的信息并操作类的属性和方法。在 Java 中,通过反射可以获取和设置类的字段、调用类的方法、创建类的实例等。Java的反射机制,可以让语言变得更加灵活,对对象的操作也更…...
【操作系统专业课】第二次作业
第1题(进程同步与互斥) 使用二值信号量实现 n 个进程之间的互斥。 1. 定义一个二值信号量 mutex= 1。 二值信号量:二值信号量只有两种取值,0 (资源已被占用)和 1(资源可用)。 2. 进程进入临界区前的操作:每个进程在进入临界区之前,都需要执行 P(mutex) 操作。 P 操作…...
Scala的迭代器
1.对比foreach 它的优点在于: (1) 内存效率高。迭代器采用延迟计算的方式,它不会将整个集合加载到内存中,而是在每次调用next方法时才计算并返回下一个元素。 (2) 统一的遍历方法。迭代器为不同类型的集合(如列表、集合、映射等…...

(RK3566驱动开发 - 1).pinctrl和gpio子系统
一.设备树 pinctrl部分可以参考 rockchip 官方的绑定文档 :kernel/Documentation/devicetree/bindings/pinctrl PIN_BANK:引脚所属的组 - 本次例程使用的是 GPIO3_A1 这个引脚,所以所属的组为 3; PIN_BANK_IDX:引脚的…...

css三角制作(二十课)
代码: <style>/* 边框原理 */.box1 {width: 0;height: 0;border-top: 100px solid pink;border-bottom: 100px solid blue;border-left: 100px solid yellow;border-right: 100px solid greenyellow;}/* 三角制作 */.box2 {width: 0;height: 0;border: 100px …...

C++_priority_queue(优先级队列)
✨✨ 欢迎大家来到小伞的大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 小伞的主页:xiaosan_blog 1. priority_queue的介绍和使用 priority_queue文档介绍 优先级队列的实现的关键…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...