当前位置: 首页 > news >正文

docker的安装和常用命令


注:这里的安装是针对于cetnos7。

安装

老版本

安装老版本可能遇到报错:missing signature key

yum -y install docker.x86_64

新版本

# 换成阿里镜像仓库
yum-config-manager --add-repo   http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum remove docker docker-common docker-selinux docker-engine
yum -y install docker-ce
systemctl start docker

设置docker镜像,阿里云镜像源需要到官网注册后才能获取,推荐使用阿里的。若某些官方镜像用阿里的拉取不到,可以参考 DaoCloud/public-image-mirror 的README.mdissue里的说明,获取其他镜像源。github访问不了,可以访问gitcode:public-image-mirror

镜像源配置

vi /etc/docker/daemon.json
{"registry-mirrors": ["https://dockerhub.icu","https://docker.chenby.cn","https://docker.1panel.live","https://docker.awsl9527.cn","https://docker.anyhub.us.kg","https://dhub.kubesre.xyz"]
}
systemctl daemon-reload
systemctl restart docker#不配置,直接使用
docker pull docker.anyhub.us.kg/docker.io/biluoer/hadoop:3.1.3-base

常用命令

基本命令

# 镜像命令
docker pull nginx	# 拉取镜像
docker push biluoer/nginx	# 推送镜像
docker build -t biluoer/nginx .	# 构建镜像
# 保存镜像为一个压缩包
# docker save -o [保存的目标文件名称] [镜像名称]
docker save -o nginx.tar nginx:latest
# 加载压缩包为镜像
docker load -i nginx.tar
# 将某个容器构建为镜像
docker commit -m "提交信息" -a "作者名" 容器名称或id tag名称
# 例如将当前运行的容器nginx构建为镜像
docker commit nginx biluoer/nginx:v1# 容器相关命令
# 创建并运行一个容器
#--name指定容器名称;-p端口映射;-d后台运行;最后的nginx是镜像名称
docker run --name containerName -p 80:80 -d nginx
# 让运行的容器暂停
docker pause nginx
# 让暂停状态的容器恢复运行
docker unpause 容器名称或容器ID
# 停止运行的容器
docker stop 容器名称或容器ID
# 运行的容器
docker start 容器名称或容器ID
# 删除容器
docker rm 容器名称或容器ID
# 重新运行容器
docker restart 容器名称或容器ID
# 停止并删除容器(stop+rm)
docker rm -f 容器名称或容器ID
# 进入容器,bash-shell类型,还可以为sh等
docker exec -it nginx bash
# 让容器直接使用某命令,例如命令:ip addr
docker exec nginx ip addr

清理

#命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)
docker system prune
# 作用和上面一样。-f,表示强制删除,不会询问
docker system prune -f
# 清理更彻底,会把没有正在使用的镜像都删掉(小心使用)
docker system prune -a

文件复制

# 本地到服务器
docker cp 本地路径 容器id或者容器名字:容器内路径
# 服务器到本地
docker cp 容器id或者容器名字:容器内路径 本地路径

构建镜像

# 使用当前目录的 Dockerfile 创建镜像;-t指定构建出的镜像的tag名称
docker build -t biluoer/ubuntu:v1 . 

上传镜像

docker login -u username -p pwd
docker tag hadoop:3.1.3 biluoer/hadoop:3.1.3
docker push biluoer/hadoop:3.1.3

注:

  • 旧版登录成功后,密码会经过base64编码保存在$HOME/用户名/.docker/config.json的auth属性中,进过该命令echo 'auth值' | base64 --decode即可看到明文密码。

  • 新版登录会报错:WARNING! Using --password via the CLI is insecure. Use --password-stdin。不允许密码明文出现,但其实还是登录成功了,密码统一保存到config.json中了。解决方法:

    • 方法1:将密码写到文件中使用:cat .docker.pwd | docker login -u username --password-stdin
    • 方法2:密码保存到环境变量使用,与方法1类似。
    • 方法3:官方推荐了一些工具进行安全的登录。

补充

权限不足

无目录权限

#若挂载目录在容器内访问没有权限,可以在挂载时加上参数:
--privileged=true 

无用户权限

# 以root用户身份进入容器
docker exec --user root -it kafka bash

容器访问

容器无法连接另一个容器。

  • 方法1:使用主机ip
#容器内默认只能访问docker提供的网关,不能访问其他容器。解决方法:run命令时加上参数:
--network=host
#值:bridge(默认,容器不具有一个公有IP)、host(使用宿主机的网络接口和IP地址)、none(使用127.0.0.1的本机网络)...
  • 方法2:--link 参数被用来在容器之间创建网络连接,使得容器可以互相解析对方的名字和访问相应的服务
#run命令时加上一下参数
--link 当前运行的容器名称:映射名称
# 然后可以通过映射名称+端口号服务其他容器的服务
  • 方法3:创建网络,让不同容器使用相同的网络(--link参数现已不推荐使用)
# 创建桥接网络,bridge是默认驱动,可以不加
docker network create [--driver bridge] hadoop-net
#创建桥接网络,并指定子网配置,范围:192.168.1.1-192.168.1.254
docker network create --subnet=192.168.1.0/24 hadoop-net

jenkins推送镜像失败

登录后使用docker推送没有问题,但使用jenkins推送报错:denied: requested access to the resource is denied。

原因:因为jenkins在推送镜像的时候使用的是jenkins的伪用户,因此无法直接在jenkins完成登录。

解决方法:将之前生成的config.json拷贝到jenkins的目录下即可

cd /home/用户名/
cp .docker/config.json /var/lib/jenkins
chown -R jenkins.jenkins .docker# 如果jenkins是以容器方式安装的
docker cp .docker jenkins:/root/
# 或者先在任务的执行脚本中执行一次登录命令,让它自动生成

修改主机名

直接进入容器中修改/etc/hosts,这种方式在重启容器后,修改的内容会丢失。

如果是容器未运行的状态,通过在使用run命令时加上参数 --hostname 主机名 就可以指定容器运行后的主机名。

编写Dockerfile

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar# 安装JDK
RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8# 注:如果使用ADD命令,则会自动解压,上面的三条命令就可以变为以下命令
#ADD ./jdk8.tar.gz $JAVA_DIR/
#COPY ./docker-demo.jar /tmp/app.jar
#RUN cd $JAVA_DIR \
# && mv ./jdk1.8.0_144 ./java8# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin# 暴露端口
EXPOSE 8090
# 注:可以通过ENV命令定义一个端口变量,根据传入的参数动态指定端口
# 例如使用run命令时可以加上参数:-e MY_PORT=8088# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

相关文章:

docker的安装和常用命令

docker的安装和常用命令 安装老版本新版本 镜像源配置常用命令基本命令清理文件复制构建镜像上传镜像 补充权限不足无目录权限无用户权限 容器访问jenkins推送镜像失败修改主机名编写Dockerfile 注:这里的安装是针对于cetnos7。 安装 老版本 安装老版本可能遇到报…...

haproxy 7000字配图超详细教程 从小白到入门

简介:HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上。HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。HAProxy的社区非常活跃,版本更新快速,HAProxy具备媲美商用负载均衡器的性能和稳…...

使用 LangChain 掌握检索增强生成 (RAG) 的终极指南:5、将自然语言问题转换为结构化查询

5. 查询构建 — Ragatouille 用户用自然语言提出问题并被路由到特定数据源(例如,向量存储、图形数据库等)后,该问题需要被转换为结构化查询,以便从选定的数据源检索信息(例如,文本到SQL、文本到…...

浅析JavaScript 堆内存及其通过 Chrome DevTools 捕获堆快照的方法

JavaScript 的堆内存(Heap Memory)是内存中专门用于存放程序执行过程中动态生成的对象、函数实例以及其他动态数据结构的区域。与调用栈(Call Stack)专注于管理函数调用的顺序和执行环境不同,堆内存则专注于动态地分配…...

C++学习笔记----2、使用C++进行优雅编程(五)----命名

C编译器对于命名有如下规则: 命名中可以有大小写字母、数字、下划线。字母不限于英文字符,可以是任意国家语言的字母,例如日文,阿拉伯文等。不能以数字开头,例如9to5。包含双下划线的被标准库保留不可使用&#xff0c…...

Element UI顶部导航栏与左侧导航栏联动实现~

需求:点击顶部导航栏的不同栏位实现左侧导航栏菜单的不同展示实现联动效果。 点击顶部导航栏按钮将对应的左侧导航栏数据传递给vuex,并在左侧导航栏父组件中接收并传递给左侧导航栏子组件,使用递归组件实现渲染等,具体的优化可以看下面的注释…...

ECMAScript6模板字面量:反引号、${}占位符的使用

ECMAScript 6 中引入了模板字面量,主要通过多行字符串和字符串占位符对字符串进行增强操作。如下: //使用ECMAScript6模板字面量拼接字符串,例如:2024年8月12日 15:38:28 星期一 let dateRet ${Year}年${Month}月${Dates}日 ${H…...

网关与AWS云心跳周期,网关断电或者网络不稳定的离线机制

当mqtt连线建立时, 需要指定keep alive参数,当 iot core在1.5倍 keep alive timeout时长内都没收到任何来自设备端的操作, 例如 ping, subscribe, publish ,则会主动将连线中断。如果iot core检测到tcp 连接中断, 会立即中断;如果未检测到则会等到1.5倍 …...

【代码随想录训练营第42期 Day26打卡 贪心Part1 - LeetCode 455.分发饼干 376. 摆动序列 53. 最大子序和

目录 一、贪心 二、题目与题解 题目一:455.分发饼干 题目链接 题解:排序双指针贪心 题目二:376. 摆动序列 题目链接 题解:贪心 题目三:53. 最大子序和 题目链接 题解1:暴力(失败&…...

利用有限元法(FEM)模拟电磁场与样品的相互作用

一、引言 电磁场与物质的相互作用是理解光学现象的基础。在实际应用中,激光光束与样品的相互作用通常涉及复杂的电磁场分布,尤其在微纳尺度结构中。因此,使用数值模拟方法如有限元法(FEM)来模拟电磁场的分布和传播&…...

如何保持git主分支树的整洁

经典应用展示Git版本控制用法 本章将列举Git的一些闪亮特性,期待能够让您爱上Git 文章目录 经典应用展示Git版本控制用法前言一、分支是什么?二、主-分支合并merge三、cherry-pick(精挑细选)四、Rebase(变基)4.1 合并本地分支到主分支4.2 合并本地分支从指定commit开始的…...

Datawhale X 魔搭 AI夏令营 Task1 从零入门AI生图原理实践笔记

赛题内容 参赛者需在可图Kolors模型的基础上训练LoRA模型,生成无限风格,如水墨画风格、水彩风格、赛博朋克风格、日漫风格… 基于LoRA模型生成8张图片组成连贯故事,故事内容可自定义;基于8图故事,评估LoRA风格的美感度…...

Python中将代码打包成exe文件

在Python中将代码打包成exe文件,可以使用PyInstaller工具。以下是使用PyInstaller将Python脚本打包成exe的步骤: 安装PyInstaller: pip install pyinstaller使用PyInstaller打包Python脚本: pyinstaller --onefile your_script…...

【C++ 面试 - 基础题】每日 3 题(十三)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...

Android中的Binder

binder是Android平台的一种跨进程通信(IPC)机制,从应用层角度来说,binder是客户端和服务端进行通信的媒介。 ipc原理 ipc通信指的是两个进程之间交换数据,如图中的client进程和server进程。 Android为每个进程提供了…...

记录一次.gitignore 失效问题

前言 今天使用git同步同事的代码时,出现一个问题,.gitignore限制失效,导致我本地生成的临时缓存文件被跟踪到了commit中,执行 git rm --cache .后再add commit也不行,很奇怪就研究了一下,下面将我的解决方…...

Eclipse 工作空间

Eclipse 工作空间 Eclipse 工作空间(Workspace)是 Eclipse IDE 中一个核心概念,它指的是一个用于组织和存储开发项目及相关文件的目录。在 Eclipse 中,所有开发活动都是围绕工作空间展开的。本文将详细介绍 Eclipse 工作空间的概…...

[240812] X-CMD 发布 v0.4.5:更新 gtb、cd、chat、hashdir 模块功能

目录 📃Changelog✨ gtb✨ cd✨ chat✨ hashdir 📃Changelog ✨ gtb 调整了 fzf 预览窗口中书籍文本的显示效果,通过识别文本中的特殊字符、日期、章节标题等信息,为其赋予不同的颜色。 ✨ cd cd 模块新增功能:在找…...

Flutter中的异步编程

目录 前言 1. Future 和 async/await 1.Future 1.什么是Future? 2.Flutter的三种状态 1.未完成(Uncompleted) 1.定义 2.处理未完成的Future 2.已完成(Completed with a value) 1.概念 2.处理已完成的Future 3.使用async/await 4.Fu…...

vue3 路由带传参跳转;刷新后消失。一次性参数使用。

解决vue3 怎么做到路由跳转传参刷新后消失 解决路由跳转传参去除问题 想要跳转后根据参数显示对应的tab,但url传参刷新会持续保留无法重置。 router.replace替换又会导致显示内容为router.replace后的,传参目的丢失。 业务逻辑: 完成对应操作…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...