docker 学习笔记

一、docker容器快速上手以及简单操作

docker的image和container
image镜像

docker image就是一个read.only文件,可以理解成一个模版,docker image具有分层的概念

可以自己制作,也可以从registry拉去

container容器

一个运行中的docker image,实质上是复制image最上层read.write的层,基于同一个image可以创建多个container

Docker容器的attached和detached的区别
Attached(附着)模式 交互式连接

在attached模式下,容器启动时会将其标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)直接绑定到宿主机的当前终端。这意味着容器的输出(如日志、提示信息等)会实时显示在用户的命令行界面中,用户可以直接在该终端上与容器进行交互,如输入命令、查看输出等。

前台运行: 当容器以attached模式运行时,它是前台任务,占据着当前命令行会话。用户在该会话中无法执行其他命令,直到容器停止或者用户手动中断(例如通过Ctrl+C)。

调试与监控: 由于attached模式提供了即时的输出反馈,它特别适合于开发和调试阶段,让用户能够直观地观察容器内部程序的运行状况、响应输入以及处理错误。

容器生命周期与终端关联: 通常情况下,当用户关闭或退出与容器attached的终端时,容器会被视为接收到了一个终止信号(如SIGINT或SIGTERM),并随之停止运行。这使得attached模式下的容器生命周期紧密依赖于宿主机终端会话的持续性。

Detached(分离)模式 后台运行

在detached模式下,容器在后台以非交互的方式启动,不与宿主机的任何终端直接关联。启动容器后,Docker会立即返回命令行提示符,允许用户在同一会话中继续执行其他命令,而不会阻塞在容器的输出上。

日志管理: 由于容器不在前台输出,其日志信息不会直接显示在宿主机的终端上。用户需要通过其他工具(如docker logs命令)来查看容器的输出或跟踪其运行状态。

独立运行: Detached模式下的容器独立于任何终端会话运行,即使用户关闭了启动容器的终端,容器仍会继续运行,直到显式停止(如通过docker stop命令)或遇到内部错误导致退出。这种模式非常适合于部署生产环境中的长期运行服务,确保服务的稳定性和持续性不受终端会话的影响。

无交互性: 由于没有直接的终端连接,用户不能直接在宿主机终端上与detached容器进行交互。如果需要在运行时与容器内部进行交互,可以使用docker exec命令打开一个临时的交互式shell或执行单个命令。

 docker容器简单操作命令
docker info #查看docker详细信息
docker image ls #查看所有镜像
docker container run nginx #创建一个nginx镜像的容器(前台运行)
docker container run -d nginx #创建一个nginx镜像的容器(后台运行)
docker run nginx #旧的版本命令 创建一个镜像
docker container ls #查看所有当前运行中的容器
docker container ps -a #查看所有容器详细 或者 ls -a
docker container stop xxx xxx=容器的id #停止服务
docker conteriner rm xxx #删除容器(如果容器运行中无法删除,需要先停掉)
docker conteriner rm id1 -f #强制删除容器,包括运行中的容器
docker container logs xxx #查看容器log
docker container logs -f xxx #动态跟踪查看容器log
docker容器批量操作命令
docker container stop id1 id2 id3  #停掉多个容器
docker container ps -aq #列出所有容器id
docker container stop $(docker container ps -qa)  #停掉所有运行中的容器
docker conteriner rm $(docker container ps -qa)   #删除所有的容器实例
docker容器的交互模式
交互式进入容器命令
docker exec -it id1 sh  #交互式进入容器
docker container run -it busybox sh #创建镜像容器并交互式进入容器,busybox 是镜像名称
linux查看进程id依赖关系
ps aux | grep nginx  #查看所有nginx运行进程id 

pstree -halps 9930  #查看进程id父子级关系

二、docker镜像的创建管理和发布

docker镜像的获取
        从 Docker Hub 获取

               Docker Hub 是 Docker 官方维护的公共镜像仓库,其中包含了大量由官方和社区贡献的免费和付费镜像。网址:Docker Hub Container Image Library | App Containerization

        从red hat quay 获取

                red hat quay是一个流行的第三方 Docker 镜像仓库,由 CoreOS(现为 Red Hat 公司的一部分)开发和维护。网址:Quay Container Registry · Quay

        对于中国地区的用户,由于网络原因,直接从 Docker Hub 拉取镜像可能会速度较慢或不稳定。此时可以利用国内的镜像加速服务,如阿里云、腾讯云、DaoCloud 等提供的镜像加速器。

通常做法是: 注册并获取加速器地址。 编辑 Docker 配置文件 /etc/docker/daemon.json(Linux 系统)或 Docker for Windows / Docker for Mac 的相关设置,添加如下内容: 

{"registry-mirrors": ["https://加速器地址"]
}
         从私有仓库获取

        在企业内部或受限网络环境中,可能需要使用私有 Docker 仓库,如 Harbor、Artifactory、Nexus 等。

        配置私有仓库认证和拉去镜像
docker login [私有仓库地址]
docker pull [私有仓库地址]/[镜像名]:[标签]
docker镜像的命令操作
       在线拉取镜像和删除镜像
docker pull nginx # 拉去docker hub 官方 nginx 最新版本镜像
docker pull nginx:1.20.0 #拉取registry 镜像
docker image inspect xxx #查看镜像详细的信息
docker image rm xxx #删除镜像(注意:正在运行和被容器使用的image镜像是无法删除的)
docker image save xxx镜像名称 -o xxxx文件名称 #把镜像导出为离线文件
docker image load -i xxxx文件 #把镜像离线文件导入
docker image build -t 文件名:1.0 . #编译dockerfile文件 . 代表当前文件夹 --build-arg VERSION=xxx
docker login #登陆
docker image push xxxx #上传镜像到dockerhub
docker image prune -a #删除没有使用到的镜像
         离线镜像文件操作
#把镜像导出为离线文件, nginx.image是文件名称
docker image save nginx:1.20.0 -o nginx.image#把离线文件导入为镜像
docker image load -i ./nginx.image docker image build -t 文件名:1.0 . #编译dockerfile文件 . 代表当前文件夹 --build-arg 

三、容器

#容器的基本操作
docker info #查看docker详细信息
docker image ls #查看所有镜像
docker container run nginx #创建一个nginx镜像的容器(前台运行)
docker container run -d nginx #创建一个nginx镜像的容器(后台运行)
docker run nginx #旧的版本命令 创建一个镜像
docker container ls #查看所有容器
docker container ps -a #查看所有容器详细 或者 ls -a
docker container stop xxx xxx #停止服务
docker conteriner rm xxx xxx #删除容器
docker conteriner run -p 80:80 nginx #端口映射创建镜像
docker container stop $(docker container ps -qa) #停止所有服务
docker container rm $(docker container ps -aq) #删除所有容器
docker comtainer rm -f xxx #强制删除
docker attach xxx #进入容器attach模式
docker container logs xxx #查看容器log
docker container logs -f xxx #动态跟踪查看容器log
docker container run -it ubuntu sh #创建一个交互式的ubuntu的容器
docker run -it ubuntu /bin/bash #创建一个交互式的ubuntu的容器
docker exec -it xxx sh #交互式进入正在运行容器的sh
docker pull nginx:1.20.0 #拉取registry 镜像
#imgae 镜像
docker image inspect xxx #查看镜像详细的信息
docker image rm xxx #删除镜像(注意:正在运行和被容器使用的image镜像是无法删除的)
docker image save xxx镜像名称 -o xxxx文件名称 #把镜像导出为离线文件
docker image load -i xxxx文件 #把镜像离线文件导入
docker image build -t 文件名:1.0 . #编译dockerfile文件 . 代表当前文件夹 --build-arg VERSION=xxx
docker login #登陆
docker image push xxxx #上传镜像到dockerhub
docker image prune -a #删除没有使用到的镜像
docker container run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -v mysql-data:/var/lib/mysql mysql:5.7 #mysql 数据持久化
docker system prupe -f #清理系统
docker volume prune -f #volume清理
docker run -i -t -d --name bt -p 20:20 -p 21:21 -p 9000:80  -p 888:888 -p 8888:8888 --privileged=true -v E:\www:/www baota:v0 #ip+文件映射启动容器
#linux 一些命令
pstree -halps 进程id #查看进程id结构
ping xxxxx #测试网络的连通性
telnet xxx : 80 #端口是否可达
traceroute #网络路径跟踪
ip addr #linux 查看ip地址
ifconfig #linux 查看ip地址
ipconfig #windows 查看ip地址

docker的image和container

image镜像

docker image就是一个read.only文件,可以理解成一个模版,docker image具有分层的概念

可以自己制作,也可以从registry拉去

container容器

一个运行中的docker image,实质上是复制image最上层read.write的层,基于同一个image可以创建多个container

四、docker网络

1、容器端口映射使用-p 参数进行配置,8080:80  宿主机8080容器内部80端口。也可以 ip:8080:80,这样只有宿主机的ip可以访问8080端口。dockerFile使用expose 设定暴漏端口。

2、docker netword ls 查看docker网络,bridge和host有什么区别,bridge是默认的虚拟网络模式,host网络是容器直接使用宿主机的网络栈。启动创建容器使用--network=host关键字指定使用网络模式。还有一个none模式,这个就是告诉docker启动一个没有网络的容器。

3、linux网络命名空间隔离技术可以使多应用部署独立的网络空间,例如web应用和数据库分别配置独立的网络空间,即使web网络出现故障不会影响db的网络,还有就是安全隔离,db网络严格限制外部访问从而降低数据泄露的风险。

4、bridge网络,当我们创建容器容器会默认连接名为docker0的桥接网络,桥接网络本质上是一个虚拟网络设备,可以想象成一台交换机,将多个网络接口连接在一起,可以实现容器之间的相互通信。

五、容器集群swarm

1、k8s和 docker-swarm都是容器编排和管理工具,总得来说空k8s采用了分布式架构和模块化设计,能够应对大规模的容器集群,常用于大型互联网公司的生产环境。docker-swarm简单易用,更合适中小型的集群的编排。

2、搭建一个多机器的swarm容器集群的大概流程,初始化主节点-创建项目目录和文件结构-编写dockerFile-编写配置文件-编写docker-compose.yml-部署服务到集群

3、swarm夸机器无法满足容器之间通信,overlay网络就是为了解决这些问题而设计的,它是一种虚拟网络,就像云服务器的内网ip通信一样,swarm是可以创建多个overlay网络实现服务的网络隔离。overlay

4、关于容器集群网络有哪些,分为三种,1外部访问部署集群的服务流量通过ingress解决2容器之间访问的流量通过overlay解决-东西向流量3集群访问外部网络的流量-南北向流量通过linux+bridge+iptables nat解决。

5、ingress主要实现swarm外部流量到服务区的负载均衡和路由。

6、docker的服务依赖和检测,在创建dockerfile或者composer时候可以增加healthcheck参数,cmd curl http 状态实现服务检测,可以通过docker inspect命令查看容器的健康状态。依赖是composer配置文件可以通过depends_on 设置服务器启动的优先级,解决应用服务的依赖关系,例如启动一个web服务,web服务需要依赖redis和mysql,web依赖的服务优先安装和启动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/8933.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PyTorch】5.张量索引操作

目录 1. 简单行、列索引 2. 列表索引 3. 范围索引 4. 布尔索引 5. 多维索引 个人主页:Icomi 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为…

穿心莲内酯(andrographolide)生物合成CYP72-文献精读106

Two CYP72 enzymes function as Ent-labdane hydroxylases in the biosynthesis of andrographolide in Andrographis paniculata 两种CYP72酶在穿心莲(Andrographis paniculata)中作为Ent-labdane羟化酶,在穿心莲内酯(andrograp…

关于圆周率的新认知 - 2

当未知长度的单位 1 和已完成长度的单位 1 之间的比例不是 1:1 而是其它的数值的时候,不难看出,这时候的圆周率就变成了“椭圆周率”。你可能要说,这不是椭圆积分吗?对了,这就是椭圆积分。但是我们不要考虑什么椭圆积分…

ARM64平台Flutter环境搭建

ARM64平台Flutter环境搭建 Flutter简介问题背景搭建步骤1. 安装ARM64 Android Studio2. 安装Oracle的JDK3. 安装 Dart和 Flutter 开发插件4. 安装 Android SDK5. 安装 Flutter SDK6. 同意 Android 条款7. 运行 Flutter 示例项目8. 修正 aapt2 报错9. 修正 CMake 报错10. 修正 N…

进程池的制作(linux进程间通信,匿名管道... ...)

目录 一、进程间通信的理解 1.为什么进程间要通信 2.如何进行通信 二、匿名管道 1.管道的理解 2.匿名管道的使用 3.管道的五种特性 4.管道的四种通信情况 5.管道缓冲区容量 三、进程池 1.进程池的理解 2.进程池的制作 四、源码 1.ProcessPool.hpp 2.Task.hpp 3…

新年祝词(原创)

新年将至,福进万户。 家家团圆,事事顺心。 喜迎财神,多寿添金。 瑞兽迎春,炮竹声起。 趋吉避凶,蛇年大吉。 中华崛起,人人自强。 天下大同,百姓富足。 有情有义,平易近人。 …

stack 和 queue容器的介绍和使用

1.stack的介绍 1.1stack容器的介绍 stack容器的基本特征和功能我们在数据结构篇就已经详细介绍了,还不了解的uu, 可以移步去看这篇博客哟: 数据结构-栈数据结构-队列 简单回顾一下,重要的概念其实就是后进先出,栈在…

python:洛伦兹变换

洛伦兹变换(Lorentz transformations)是相对论中的一个重要概念,特别是在讨论时空的变换时非常重要。在四维时空的背景下,洛伦兹变换描述了在不同惯性参考系之间如何变换时间和空间坐标。在狭义相对论中,洛伦兹变换通常…

DIY QMK量子键盘

最近放假了,趁这个空余在做一个分支项目,一款机械键盘,量子键盘取自固件名称QMK(Quantum Mechanical Keyboard)。 键盘作为计算机或其他电子设备的重要输入设备之一,通过将按键的物理动作转换为数字信号&am…

【Unity3D】aab包太大无法上传Google问题

目录 一、勾选Split Application Binary,Unity直接打aab包 勾选Split Application Binary选项的影响 不勾选Split Application Binary选项的影响 总结 2、导出Android工程打包aab 一、勾选Split Application Binary,Unity直接打aab包 超出150MB部分…

DeepSeek助力学术文献搜索!

搜集文献 宝子们如果是第一次发表学术论文,论文往往是会署名多个作者。在这种情况下,即便成功发表了论文,独立撰作或主导写作的挑战仍旧存在。那么,怎样才能独立地完成一篇属于自己的学术论文呢?对于初次尝试学术论文…

【时时三省】(C语言基础)文件的随机读写

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 fseek 根据文件指针的位置和偏移量来定位文件指针 示例: 这个输出的就是ade seek_cur的意思是从当前偏移量 2就是从a往后偏移两个就是d 偏移量 SEEK_CUR…

Python-基于PyQt5,json和playsound的通用闹钟

前言:刚刚结束2024年秋季学期的学习,接下来我们继续来学习PyQt5。由于之前我们已经学习了PyQt5以及PyUIC,Pyrcc和QtDesigner的安装,配置。所以接下来我们一起深入PyQt5,学习如何利用PyQt5进行实际开发-基于PyQt5,json和…

数据结构课程设计(三)构建决策树

3 决策树 3.1 需求规格说明 【问题描述】 ID3算法是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的…

2024收尾工作

目录 开场白 栈与队列 LeetCode232. 用栈实现队列 LeetCode225. 用队列实现栈 LeetCode102. 二叉树的层序遍历 LeetCode103. 二叉树的锯齿形层序遍历 堆(优先级队列) 堆排序 LeetCode215. 数组中的第 k 个最大元素 总结 开场白 今天是除夕&…

纯css实现div宽度可调整

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>纯css实现div尺寸可调整</title><style…

浅谈Linux的发展

目录 1.Linux背景 1.1 发展史 UNIX发展的历史 1.2开源 1.3官网 1.4.企业应用现状 1.5.发行版本 1.6 os概念&#xff0c;定位 1.Linux背景 1.1 发展史 学习Linux系统编程&#xff0c;你可能要问Linux从哪里来&#xff1f;它是怎么发展的&#xff1f;在这里简要介绍Linux的发展史…

四层网络模型

互联网由终端主机、链路和路由器组成&#xff0c;数据通过逐跳的方式&#xff0c;依次经过每条链路进行传输。 网络层的工作是将数据包从源端到目的端&#xff0c;跨越整个互联网。 网络层的数据包称为数据报。网络将数据报交给链路层&#xff0c;指示它通过第一条链路发送数据…

世上本没有路,只有“场”et“Bravo”

楔子&#xff1a;电气本科“工程电磁场”电气研究生课程“高等电磁场分析”和“电磁兼容”自学”天线“、“通信原理”、“射频电路”、“微波理论”等课程 文章目录 前言零、学习历程一、Maxwells equations1.James Clerk Maxwell2.自由空间中传播的电磁波3.边界条件和有限时域…

python学opencv|读取图像(四十六)使用cv2.bitwise_or()函数实现图像按位或运算

【0】基础定义 按位与运算&#xff1a;全1取1&#xff0c;其余取0。按位或运算&#xff1a;全0取0&#xff0c;其余取1。 【1】引言 前序学习进程中&#xff0c;已经对图像按位与计算进行了详细探究&#xff0c;相关文章链接如下&#xff1a; python学opencv|读取图像&…