docker容器常见操作

目录

一、认识容器

1.1、docker用到的内核技术

1.2、namespace

1.3、Control Group

1.4、LXC与docker区别

二、docker环境准备

2.1、安装docker

2.2、docker daemon环境管理

三、镜像、容器和仓库

3.1、镜像常见操作

3.2、配置镜像加速器 命名空间

3.3、非官方镜像仓库

四、用harbor搭建企业级镜像仓库

4.1、harbor

4.2、安装harbor

五、容器常见操作

运行容器并交互式操作

提交镜像docker commit 

批量删除所有容器


一、认识容器

k8s是船舵  引领 docker 

大型机-小型机-PC服务器-虚拟化-云计算-容器

linux容器技术是一种轻量级的虚拟化技术。

主要特点有:

1、轻量:只打包了需要的bins/libs(也就是命令和库文件),与宿主机共享操作系统,直接使用宿主机的内核。

2、部署快:容器的镜像相对于虚拟机的镜像更小,部署更快,秒级部署。

3、移植性好:一次构建,随处部署运行。

4、资源利用率更高:相对于虚拟机,不需要安装操作系统,所以几乎没有额外的cpu和内存消耗


1.1、docker用到的内核技术

docker就是目前最火热的能实现容器技术的软件,使用go(golang)语言开发。

一共是三个版本:docker(2017年之前的老版本不建议使用)、docker-ce和docker-ee

参考:https://www.docker.com/

docker容器本质上是宿主机的进程,可以把docker容器内部跑的进程看作是宿主机的线程

Docker通过namespace(命名空间)资源隔离
通过cgroups实现了资源限制

1.2、namespace

Linux内核实现namespace的一个主要目的就是实现轻量级虚拟化(容器)服务。在同一个namespace下的进程可以感知彼此的变化,而对外界的进程一无所知。
Linux在很早的版本中就实现了部分的namespace,比如内核2.4就实现了mount namespace。大多数的namespace支持是在内核2.6中完成的,比如IPC、Network、PID、和UTS。还有个别的namespace比较特殊,比如User,从内核2.6就开始实现了,但在内核3.8中才宣布完成。
同时,随着Linux自身的发展以及容器技术持续发展带来的需求,也会有新的 namespace被支持,比如在内核4.6中就添加了Cgroup namespace。
Linux内核提拱了6种namespace隔离的系统调用,相当于目录

IPC:每个容器依旧使用linux内核中进程交互的方法,实现进程间通信
PID:每个容器都拥有独立的进程树,而容器是物理机中的一个进程,所以容器中的进程是物理机的线程
Net:每个容器的网络是隔离Mount:每个容器的文件系统是独立的
User:每个容器的用户和组ID是隔离,每个容器都拥有root用户


小结:应用程序运行在一个隔离的空间(namespace)内,每个隔离的空间都拥有独立的UTS,IPC,PID,Net,Mount,User.
 

1.3、Control Group
 

控制组(CGroups)是Linux内核的一个特性,主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,才能避免多个容器同时运行时对宿主机系统的资源竞争。控制组可以提供对容器的内存、CPU、磁盘IO等资源进行限制和计费管理。

1.4、LXC与docker区别


LXC为Linux Container的简写。可以提供轻量级的虚拟化.
Docker的底层就是使用了LXC来实现的. dockerl以LXC为基础,实现了更多更强的功能。


二、docker环境准备

建议直接在宿主机上跑docker(当然也可以在虚拟机里跑docker)
不能直接接在windows上跑docker(因为namespace,cgroup是linux内核的特性,windows没有,所以需要在windows跑linux虚拟机,再跑docker)
1.要求能访问公网
2.关闭防火墙,selinux
 

2.1、安装docker

下载docker官网的镜像源或者阿里云的源 wget

yum clean all 

yum install docker-ce -y

docker version 可以查看客户端和服务端

2.2、docker daemon环境管理

可以将客户端和服务端进行分离实现远程docker连接,必须对docker daemon进行相应配置才能实现。配置完成需要重载 docker daemon -reload

远程客户端# docker -H 容器宿主机IP version(远程连接客户端)

三、镜像、容器和仓库

镜像(image):镜像就是打包好的环境与应用

容器 (container):容器就是运行镜像的实例,镜像是静态的,容器是动态的

仓库(repository):存放多个镜像的一个仓库

docker host 就是运行docker的宿主机

3.1、镜像常见操作

镜像分为两类:

1、操作系统类 (centos/ubuntu)        2、应用程序类

docker search 镜像名称  

可以查看所有镜像,official(官方的仓库)

docker pull 镜像名称  拉取镜像

使用docker load < 重定向导入之前保存好的镜像

docker save 镜像名称 -o 镜像存放目录  (意思就是测试一下先save保存到其他文件夹之后rmi删除,然后从其他文件夹导入镜像,也能理解成恢复备份

3.2、配置镜像加速器 命名空间

vim /etc/docker/daemon.json

在docker守护进程的json文件中配置阿里镜像源或者其他的国内源加速

注意:配置文档可能重复创建/etc/docker目录

3.3、非官方镜像仓库

首先第一步就是和docke hub官方仓库一样 登录 docker login (非官方仓库必须加地址)

退出仓库 docker logout 需要退出的仓库地址,默认是docker hub

例如阿里云:

在阿里云镜像仓库先创建命名空间之后创建镜像名称

注意:上传镜像必须打标签才能上传

四、用harbor搭建企业级镜像仓库

4.1、harbor

Harbor是VMware公司开源了企业级Registry项目,可以帮助用户快速搭建一个企业级的Docker registry服务.
harbor由python语言开发,需要使用docker-compose工具进行启动
 

需要的工具:

使用epel源安装pip,使用pip安装docker-compose

安装完成docker-compose之后检查一下是否拥有可执行权限

查看服务器架构:加上 可执行符合 单引号即可执行查看(常用于写shell)

4.2、安装harbor

建议使用离线包安装

下载地址: https://github.com/goharbor/harbor/releases

千篇一律地把安装包上传到服务器之后tar  xf 解压,然后进入/usr/local/harbor/

修改配置文件 vim harbor.cfg  主要就是hostname是主机名,admin用户的登录密码默认了,直接./install.sh 安装即可

在docker宿主机配置daemon.json文件
因为docker用https通讯,所以还需要做证书,太麻烦。
配置"insecure-registries": ["harbor服务器IP"]来使用http通讯

tag给镜像打标签之后才能push上传,上传又发现docker是用https协议通讯所以必须修改daemon.json文件

如果不先docker login 登录harbor服务器就无法push推送

五、容器常见操作

把容器比喻为轻量级虚拟机,但是容器实际上只是进程。进程运行完了当然就退出了,除非是类似服务那样的守护进程
 

docker运行一个不间断的脚本,-d表示后台运行(后台运行表示不输出结果到屏幕)

例如容器ip等信息

运行容器并交互式操作

如果是简单的run运行容器不进行交互,容器不是持续运行的进程所以不会在后台运行,加上-d也不会,在容器中写一个循环持续运行才能

交互式运行容器命令:-it 直接运行并进入容器,exit能退出容器但是后台运行的进程也退出了

交互式容器退出之后如何查看或修改之前在容器里创建的文件?

容器进程退出之后可以使用docker start 容器id 启动,先使用docker ps -l 查看退出的容器信息

主要区别在于它们如何与容器交互以及它们所启动的进程类型。

  1. Docker attach(只能连接up状态的容器):

    • 使用 `docker attach` 可以将当前控制台连接到一个正在运行的容器中。
    • 它允许用户执行命令并在容器内部查看输出。
    • 如果从连接的终端退出,容器也将被终止。
  2. Docker exec:
    • 用户可以使用 `-D` 参数让命令在后台运行,而不占用终端。
    • 它会在容器中启动一个新的进程(终端),并执行指定的命令,这样就不会中断容器的其他活动。
    • `docker exec` 用于在运行的容器中执行命令,而不是直接在容器的当前进程上启动新的终端。

提交镜像docker commit 

批量删除所有容器

一次性删除大量测试容器必须先停止docker stop $(docker ps -qa)才能删除docker rm $(docker ps -qa)   rmi是删除镜像

需要注意的是交互式启动容器之后如果该容器中没有运行可持续的进程则容器不会是up状态

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亿道丨防爆工业平板哪家好丨防爆平板电脑pad:防什么?

在爆炸性环境中&#xff0c;工作安全是至关重要的。防爆工业平板作为一种特殊设计的设备&#xff0c;不仅能够抵御爆炸风险&#xff0c;还提供高效的工作性能。本文将介绍防爆工业平板的防护功能以及其在各个行业中的应用。 在许多行业&#xff0c;如石油、化工、矿山和制药等领…

【RT-DETR有效改进】Best Paper | DAttention (DAT)可变形注意力机制和动态采样点

一、本文介绍 本文给大家带来的是RT-DETR改进DAT(Vision Transformer with Deformable Attention)的教程&#xff0c;其发布于2022年CVPR2022上同时被评选为Best Paper&#xff0c;由此可以证明其是一种十分有效的改进机制&#xff0c;其主要的核心思想是&#xff1a;引入可变…

考研高数(高阶导数的计算)

1.归纳法 常见高阶导数 2.泰勒展开式 3.莱布尼兹公式 4.用导数定义证明导函数在某一点连续的例题

亿道丨三防平板电脑厂商哪家好丨麒麟系统三防平板PAD

随着科技的飞速发展&#xff0c;人们对于移动设备的需求越来越高。然而&#xff0c;在不同的行业应用场景下&#xff0c;常规的智能平板往往无法满足特殊的工作要求。&#xff0c;亿道三防平板&#xff0c;将高可靠性与卓越性能高度结合&#xff0c;为各行各业提供卓越的移动解…

stm32——hal库学习笔记(ADC)

这里写目录标题 一、ADC简介&#xff08;了解&#xff09;1.1&#xff0c;什么是ADC&#xff1f;1.2&#xff0c;常见的ADC类型1.3&#xff0c;并联比较型工作示意图1.4&#xff0c;逐次逼近型工作示意图1.5&#xff0c;ADC的特性参数1.6&#xff0c;STM32各系列ADC的主要特性 …

华为OD机试真题-用连续自然数之和来表达整数-2023年OD统一考试(C卷)---python代码免费

题目&#xff1a; 代码 """ 题目分析&#xff1a; 一个整数 连续的自然数之和表示(非负整数&#xff09;输入&#xff1a; 一个整数T[1,1000] 输出&#xff1a; 输出多个表达式&#xff0c;自然数个数最少优先输出 最后一行&#xff0c; 输出“Result : 个数…

[计网底层小探索]:实现并部署多线程并发Tcp服务器框架(基于生产者消费者模型的线程池结构)

文章目录 一.网络层与传输层协议sockaddr结构体继承体系(Linux体系)贯穿计算机系统的网络通信架构图示: 二.实现并部署多线程并发Tcp服务器框架线程池模块序列化反序列化工具模块通信信道建立模块服务器主体模块任务回调模块(根据具体应用场景可重构)Tips:DebugC代码过程中遇到…

4.Spring MVC入门

文章目录 1. HTTP协议2. Spring MVC2.1. 三层架构2.2. MVC&#xff08;解决表现层的问题&#xff09;2.3. 核心组件 3. Thymeleaf3.1. 模板引擎3.2. Thymeleaf3.3. 常用语法 代码 1. HTTP协议 网址&#xff1a;https://www.ietf.org/ &#xff08;官网网址&#xff09; https:…

oppo手机如何录屏?解锁录屏新功能!

“最近换了一款oppo手机&#xff0c;感觉它的拍照功能真的很强大。但除此之外&#xff0c;我发现oppo还有许多隐藏功能&#xff0c;比如录屏。但我尝试了很久&#xff0c;都没找到录屏的开关在哪里。有没有哪位oppo用户知道怎么打开这个功能呢&#xff1f;” 随着科技的不断发…

几个常见的C/C++语言冷知识

当涉及到C/C语言时&#xff0c;有一些冷知识可能并不为人所熟知&#xff0c;但却可以让你更深入地理解这门古老而强大的编程语言。以下是一些有趣的C/C语言冷知识。 1. 数组的下标可以是负数 在我们日常的C语言编程中&#xff0c;数组是一个非常常见的数据结构。我们习惯性地使…

opencv python投影变换效果

变换原理&#xff1a; https://www.cnblogs.com/txwtech/p/18024547 python示范代码&#xff1a; src2原图&#xff0c;4个坐标点 dst2转换后&#xff0c;4个坐标点 p_touyin cv2.getPerspectiveTransform(src2,dst2) #计算投影变换矩阵 #利用矩阵值进行图像投影变换 r…

TCP 三次握手和四次挥手

为了准确无误地把数据送达目标处&#xff0c;TCP协议采用了三次握手策略。 1 TCP 三次握手漫画图解 如下图所示&#xff0c;下面的两个机器人通过3次握手确定了对方能正确接收和发送消息(图片来源网络)。 简单示意图&#xff1a; 客户端–发送带有 SYN 标志的数据包–一次握手…

jmeter下载base64加密版pdf文件

一、何为base64加密版pdf文件 如下图所示&#xff0c;接口jmeter执行后&#xff0c;返回一串包含大小写英文字母、数字、、/、的长字符串&#xff0c;直接另存为pdf文件后&#xff0c;文件有大小&#xff0c;但是打不开&#xff1b;另存为doc文件后&#xff0c;打开可以看到和…

Linux多线程服务端编程:使用muduo C++网络库 学习笔记 第十二章 C++经验谈(一)

作者对C的基本态度是“练从难处练&#xff0c;用从易处用”&#xff0c;因此本章有几节“负面”的内容。作者坚信软件开发一定要时刻注意减少不必要的复杂度&#xff0c;一些花团锦簇的招式玩不好反倒会伤到自己。作为应用程序的开发者&#xff0c;对技术的运用要明智&#xff…

Pandas时间序列数据补全

一、问题 时间序列数据缺失&#xff0c;将其补全。 如下图所示&#xff0c;数据存在缺失秒级的情况 二、方法 1、需要将时间戳字段设置成 df 的索引 2、使用df.resample()方法 (1)上采样&#xff08;将上一条数据作为当前缺失数据&#xff09; resample()中的参数&#x…

基于深度学习的子图计数方法

背景介绍 子图计数&#xff08;Subgraph Counting&#xff09;是图分析中重要的研究课题。给定一个查询图 和数据图 , 子图计数需要计算 在 中子图匹配的&#xff08;近似&#xff09;数目 。一般我们取子图匹配为子图同构语义&#xff0c;即从查询图顶点集 到数据图顶点集 的…

pitch、yaw、roll

pitch、yaw、roll是描述物体在空间中旋转的术语&#xff0c;通常用于计算机图形学或航空航天领域中。这些术语描述了物体绕不同轴旋转的方式&#xff1a; Pitch&#xff08;俯仰&#xff09;&#xff1a;绕横轴旋转&#xff0c;使物体向前或向后倾斜。俯仰角度通常用来描述物体…

基于Java+小程序点餐系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

C#上位机与三菱PLC的通信09---开发自己的通讯库(A-3E版)

1、A-3E报文回顾 具体细节请看&#xff1a; C#上位机与三菱PLC的通信05--MC协议之QnA-3E报文解析 C#上位机与三菱PLC的通信06--MC协议之QnA-3E报文测试 2、为何要开发自己的通讯库 前面开发了自己的A-1E协议的通讯库&#xff0c;实现了数据的读写&#xff0c;对于封装的通…

vue中切换tab时echart不显示或显示不正常

项目中在不同的tab中都使用了echart&#xff0c;但是在切换tab的时候发现第二个tab没有正常显示&#xff0c;通过排查代码和网上查阅才发现是因为element是通过display来控制tab的显示的&#xff0c;没有点击tab2的时候第二个echart图表的容器是 display:none&#xff0c;echar…
最新文章