栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

dockers容器基础及基础命令(一)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

dockers容器基础及基础命令(一)

目录

前言

一、KVM虚拟化的简单概论

1、虚拟化

2、虚拟化类型

3、虚拟化特性

4、KVM简介

二、docker容器简介

1、docker概念

2、Docker和虚拟机的区别

3、Docker的使用场景

4、Docker 引擎(Docker Engine )

5、Docker三大核心组件

6、docker的架构(docker architecture)

7、docker底层原理

三、部署20版Docker

1、基础环境配置、以及安装docker-ce社区版

2、设置镜像加速

3、网络优化

4、docker配置文件一些配置

四、Docker镜像相关操作

1、查找指定镜像

2、下载镜像

3、查看镜像信息

4、添加镜像新标签(打标签)

5、删除镜像

6、将镜像保存到本地

7、载入镜像

8、上传镜像

 五、容器的相关操作命令

1、查询docker镜像列表及版本信息

2、显示 docker 的系统级信息

3、查询容器、删除容器

4、创建、启动、停止运行容器

5、运行容器

6、进入、退出容器

7、容器导出、导入

8、查询当前容器资源消耗信息

六、私有仓库的操作

1、下载并创建私有仓库

2、挂载容器,并更改标签

3、上传镜像到私有仓库

4、获取私有仓库列表

5、从私有仓库下载镜像

总结


前言

        以1inux而言,linux操作 系统会有一个主进程pid=1派生出其他进程来控制不同服务,例如:

pid=2 --> python 、pid=3-->java 、pid4-->php ,三个服务可能会相互影响,此时使用者期望将这

三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本,以此为基

础,思考能否将这三种服务分别封装起来呢?这时就有了KVM虛拟化技术,实现了一个操作系统

模拟多个操作系统/不同的运行时环境。随着技术发展,人们发现虚拟化技术开销较大,这时就延

伸出了容器技术,虚拟化层的抽象层(用户层)剥离,使用docker engine来替代(来宾操作系统去

除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销。

一、KVM虚拟化的简单概论

1、虚拟化

        虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机(对计算机物理资源的抽

象,实现资源的模拟、隔离和共享)。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机

可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高

计算机的工作效率。虚拟化是一种资源管理技术,打破实体结构的不可分割的障碍,可以对数据中

心的所有资源进行虚拟化和管理,可以实现服务虚拟化、存储虚拟化、网络虚拟化和桌面虚拟化。

        在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的、旧的硬

件产能过低的重组、重用,透明化底层物理硬件,从而最大化的利用物理硬件,对资源充分利用。

(主要解决的两个问题:资源充分利用;以及缩短交付时间。)

        虚拟化技术就是通过软件/应用程序的方式,来实现物理硬件的功能。

2、虚拟化类型

①全虚:将物理硬件资源全部通过软件的方式抽象化,最后进行调用

使用的方法:使用hypervisor(VMM)软件,其原理是在底层硬件和服务器之间建立一个抽象层,

而基于核心的虚拟机是面向Linux系统的开源产品hypervisor(VMM)可以捕捉CPU的指令。

②半虚:需要修改操作系统

③直通:直接使用物理硬件资源(需要设备支持,还不完善)

3、虚拟化特性

①优势:

集中化管理(远程管理、维护);

提高硬件利用率(物理资源利用率低,例如峰值,虚拟化解决了“空闲”容量);

动态调整机器/资源配置(虚拟化把系统的应用程序和服务硬件分离、提高了灵活性);

高可靠(可部署额外的功能和方案,可提高透明负载均衡、迁移、恢复复制等应用环境)。

②劣势:

前期高额费用(初期的硬件支持);

降低硬件利用率(特定场景,例:极度吃资源的应用不一定适合虚拟化);

更大的错误影响面(本地物理机down机会导致虚拟机均不可用,同时可能虚拟机中文件全部损

坏);

实施配置复杂、管理复杂(管理人员运维、排障困难);

一定的限制性(虚拟化技术涉及各种限制,必须与支持/兼容虚拟化的服务器、应用程序以及供应

商结合使用);

安全性(虚拟化技术自身的安全隐患)。

4、KVM简介

        KVM (Kernel-based vritual Machine)——基于内核的虚拟机。KVM是基于虚拟化扩展的X86

硬件的开源Linux原生的全虚拟化方案(要求cpu支持Intel-vT-x或AMD-V)。KVM内嵌于内核模块

中,模拟处理器和内存以支持虚拟机运行,虚拟机被实现为常规的Linux进程,由标准Linux调度程

序进行调度;虚拟机的每个虚拟CPU被实现为一个常规的Linux进程。这使得KVM能够使用Linux内

核的已有功能但KVM本身不执行任何模拟。

        需要客户空间程序(虚拟机)通过/dev/kvm (此虚拟设备需要开起硬件辅助虚拟化才能看到)接口

设置一个客户机虚拟服务器的地址空间,并且由Qemu模拟I/O (ioctl)进行调度资源和维护管理。

Libvirt:KVM的管理工具,除了可以管理KM这类VMM,还可以管理xen,VirtualBox,甚至

Openstack底层

Libvirt包含3个组件:后台daemon程序libvirtd、 API库、命令行工具virsh

①、KVM工作流程

 

【1】用户模式的Qemu利用接口libkvm通过ioctl系统调用进入内核模式。

【2】KVM驱动为虚拟机创建 虚拟CPU和虚拟内存。

【3】然后执行VMLAU.NCH指令进入客户模式,装载Guest OS并运行。

【4】Guest OS运行过程中如果发生异常,则暂停Guest OS的运行并保存当前状态同时退出到内

核模式来处理这些异常。

【5】内核模式处理这些异常时如果不需要I/O则处理完成后重新进入客户模式。如果需要I/O则进

入到用户模式,则由Qemu来处理I/O,处理完成后进入内核模式,再进入客户模式。

②、KVM各核心组件功能

【1】QEMU:负责抽象化I/O资源,客户机系统,包括CPU (vCPU) 、内存驱动(Console、 网卡、

I/O设备驱动等),被KVM置于一种受限制的CPU 模式下运行。功能:控制I/O虚拟化,调用硬件资

源。

【2】KVM:内置在内核中,负责对实际物力资源进行抽象/逻辑分割,模拟处理器和内存以支持虚

拟机运行。功能:为虚拟机提供CPU、内存(硬件资源)的虚拟化。

③、KVM虚拟化架构(三种模式)

◆客户模式(guestOs) :VM中的OS为Guestos

客户机在操作系统中运行的模式,客户机分为内核模式和用户模式,作用如下:

◆用户模式:为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,Qemu工作在此模式下(Qemu的主要功能)

◆linux内核模式:模拟CPU、 内存,实现客户模式切换,处理从客户模式的推出,KVM即运行在此模式下

④、KVM原理

KVM驱动提供处理器、内存的虚拟化,以及客户机I/O的拦截,guest的I/O被拦截后,交由Qemu处

理;Qemu利用接口libkvm调用(ioctl) 虚拟机设备接口/dev/kvm来分配资源、管理、维护虚拟机。

客户机-----用户层/虚拟化层(QEMU)------内核(kvm)之间是通过API接口调用的。

二、docker容器简介

Docker是一种轻量级的”虚拟机”,在linux容器里运行应用的开源工具。

1、docker概念

        docker是一个用于开发,交付和运行应用程序的开放平台。docker是由容器引擎,把linux的

cgroup、namespaces等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷

界面(命令行Cli、api等) C/s。docker使应用程序和基础架构分开,从而可以快捷交付软件;还是一

个开源的应用容器引擎,让开发者可以打包大门的应用以及依赖包到一个可移植的镜像中,然后发

布到任何流行的linux或者windows机器上;也可以实现虚拟化,容器是完全使用沙箱机制,相互之

间不会任何接口。(沙箱,在计算机安全领域,沙箱是一种程序的隔离运行机制)

①、云计算三层架构及说明如下。而Docker就是PAAS中的技术。

②、使用docker的作用

◆docker引擎统一了基础设施环境docker环境:docker环境------》image------>封装一个简易的操作

系统(3.0+G)。

◆docker引擎统一了程序打包(装箱)方式-docker镜像:docker镜像一》 images

◆docker引擎统一了程序部署(运行)方式-docker容器:docker容器一 》基于镜像——》运行为容器

(可运行的环境)实现了一次构建、多次、多处使用。

镜像———》 封装的某一个时刻的服务/应用状态

容器———》应用跑起来的状态(正常提供服务的状态-运行时)

2、Docker和虚拟机的区别

不同点

container

vm

启动速度

快速(秒级别)

慢(分钟级)

运维性能

接近原生(使用共享内核)

50%左右损失

磁盘占用

小(内核大小MB)

大(整个系统的大小GB)

数量

成百上千

一般十几台

隔离性

进程级别

系统级别(更彻底)

操作系统

主要支持Linux

支持几乎所有

封装程度

只打包项目代码和依赖关系,共享宿主机内核

完整的操作系统,与宿主机隔离

        容器是依赖于内核来隔离,彼此的关系像共享一样,所以安全性较之虚拟机差一些,毕竟不

是完全隔离。所以若一个容器被黑客攻破,宿主机基本也就没了。这里也不是完全没有办法,那就

是 cgroup 资源分配,其能提供一定的安全机制。

        Docker 拥有的众多优势与操作系统虚拟化的特点是分不开的:传统虚拟机需要有额外的虚拟

机管理程序和虚拟机操作系统层;而 Docker 容器是直接再操作系统层面之上实现的虚拟化。

3、Docker的使用场景

流程:war jar------>Igithub gitlab私有仓库(代码仓库)----> jenkins ( 测试)

(应用程序封装/构建镜像)一》 运维使用镜像下载,使用容器技术进行运行/发布

可以实现:

◆打包应用程序简单部署

◆可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁

移到阿里云

◆持续集成和持续交付(CI/CD):开发到测试发布

◆部署微服务

◆提供PAAS产品(平台即服务) {OpenStack的 云主机类似于阿里云的ECS,属于IAAS;Docker

(K8S) 属于PAAS

4、Docker 引擎(Docker Engine )

Docker Engine是具有以下主要组件的C/S客户端-服务器应用程序:

◆server端:服务器是一种长期运行的程序,称为守护程序进程(dockerd命令)

◆client端: REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。通过client

客户端传入命令,比如以下:docker run:运行、docker start:开启、docker rm:删除、与sever

端进行交互,控制server端进行应命令的操作。

5、Docker三大核心组件

①、镜像:模板;组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所

需要的基础环境(泛指操作系统环境),可以理解为容器的模板。

        可以理解为是一个面向 Docker 容器引擎的只读模板,比如:一个镜像可以是一个完整的

CentOS 操作系统环境,称之为一个 CentOS 镜像;或者一个安装了 MySQL 的应用程序,称之为

是一个 MySQL 镜像……,Docker 提供了简单的机制来创建和更新现有的镜像,用户也可以从网

上下载已经做好的应用镜像来直接使用。

②、容器(Docker container):基于镜像的一种运行状态/运行时状态。

是【从镜像创建的运行实例】,它可以被【启动、停止和删除】,容器即服务

创建的每一个容器都是相互隔离、互不可见的,相互之间隔离性超强,从而保证平台的安全性。可

以把容器看做是一个简易版本的 Linux 环境,Docker 可以利用容器来运行和隔离一个个应用。

③、仓库(Docker reqistry):存放image镜像模板;仓库分类:公共仓库docker hub 和 私有仓库

registry harbor。

Docker 仓库是用来集中保存镜像的地方,创建完自己的镜像后,可以使用【push】命令将其上传

至【公共仓库(public)】或【私有仓库(Private)】;之后,在另一台机器上使用这个镜像,直

接【pull】下来就可以了。

6、docker的架构(docker architecture)

Docker使用客户端-服务器架构。Docker 客户端与Docker守护进程进行对话,该守护进程完成了构

建,运行和分发Docker容器的繁重工作。

Docker区别于传统的虚拟化,不需要虚拟硬件资源,直接使用容器引擎,所以速度快。

◆Docker Client:客户端/提供一个与用户交互,展示的平台+管理、控制docker服务端(功能)的

工具。Docker客户端( docker)是许多Docker用户与Docker交互的主要方式。当您使用诸如之类的

命令时docker run,客户端会将这些命令发送到dockerd,以执行这些命令。该docker命令使用

Docker APT。 Docker客户端可以与多个守护程序通信。

◆Docker daemon:守护进程。Docker 守护程序( dockerd))侦听 Docker API请求并管理Docker对

象,例如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理pocker服务。

◆Docker images:镜像。存储镜像的地方,默认在公共的Docker Hub上查找,可以做个人仓库

(registry harbor)。容器可以被打包成镜像

◆Docker container:容器

◆Docker registry:镜像仓库

7、docker底层原理

①、名称空间

        应用和应用的隔离,如何进行判断,应用A与应用B隔离,在操作系统中,是通过

namespaces (名称空间、命名空间)实现的,只要实现以下6个空间隔离,才能认为两个应用实现

了完全/完整隔离。

容器隔离了6个名称空间(namespace资源隔离-用容器化技术封装)

mount

文件系统,挂载点。一个文件系统内,不能重复挂载一个指定目录

user

操作进程的用户和用户组

pid

进程编号

uts

主机名和主机域

ipc

信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)

net

网络设备、网络协议栈、端口等

②、控制组(Control groups,资源管理)

        Linux上的Docker引擎还依赖于另一种称为控制组( cgroups)的技术。cgroup将 应用程序限制

为一组特定的资源。控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限

制和约束。例如,您可以限制特定容器可用的内存。

4个CPU

container1 container2

三、部署20版Docker

1、基础环境配置、以及安装docker-ce社区版
#关闭防火墙、关闭安全子系统
systemctl stop firewalla
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
#添加域名
vim /etc/reslov.conf
nameserver 114.114.114.114
#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
 		##device-mapper-persistent-data:存储驱动
		##lvm2:控制工具
设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker-ce社区版
yum install -y docker-ce
systemctl start docker  #开启
systemctl enable docker  #开机自启

2、设置镜像加速

配置阿里云镜像加速,不然下载速度很慢,加速地址从自己的阿里云上获取。

阿里云官网:https://account.aliyun.com/

获取方式:登录阿里云–>控制台–>在上面搜索容器镜像服务–>左下角的镜像加速器。在此页面中

显示阿里云的镜像加速地址和配置方法。

#创建守护进程文件
mkdir -p /etc/docker/daemon.json

#直接命令行输入以下内容:
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://t466r8qg.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload        #重启守护进程
systemctl restart docker          #重启docker服务

3、网络优化
[root@docker ~]# vim /etc/sysctl.conf     #添加路由转发,配置转发功能
	net.ipv4.ip_forward=1    #添加

[root@docker ~]# sysctl -p   #加载内核配置
net.ipv4.ip_forward = 1

[root@docker ~]# systemctl restart network
[root@docker ~]# systemctl restart docker

4、docker配置文件一些配置
vim /etc/docker/daemon.json		##docker配置文件还可以添加以下的建立配置:

	{
	"graph": "/data/docker",					##数据目录
	"storage-driver": "overlay2",				
##存储引擎;版本迭代:LXC——>overlay——>overlay2(overlayfs:文件系统,解决docker镜像分层)
	"insecure-registries": [" registry.access.redhat.com", "quary.io"]	##私有仓库位置
	"registry-mirrors": ["https://q***"]		##镜像加速
	"bip": "172.7.5.1/24",		
##docker网络;控制网段的位置;需要创建新的网桥,系统默认的docker0是不变的
	"exec-opts": ["native.cgroupdriver-systemd"],		##启动时候的额外参数(驱动)
	"live-restore":true		##当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离)
    }

systemctl daemon- reload     #启动守护进程
systemctl restart docker

四、Docker镜像相关操作

1、查找指定镜像

docker search 服务名

[root@docker ~]# docker search nginx

2、下载镜像

docker pull 服务名

3、查看镜像信息

docker images      #查看下载的镜像

docker inspect 镜像的ID   #查看指定镜像的详细信息

4、添加镜像新标签(打标签)

docker tag 仓库名:原镜像名 仓库名:新镜像名

 使用docker tag 打标签类似于起别名,上面可以看到有两个镜像了,但是看镜像id,其实就是同一

个镜像,只是tag标签不一样。当镜像多时,可以配合grep使用:docker images | grep nginx

5、删除镜像

docker rmi 镜像的ID

docker rmi 仓库名:标签名

docker rmi `docker images -aq`    #删除全部镜像,未创建容器的镜像

6、将镜像保存到本地

docker save -o 存放镜像的位置 仓库名:镜像名

   -o :指定保存的位置

将镜像存储到本机上,命名为nginx_test。

7、载入镜像

方法一:

docker load < 本地导出的镜像名

方法二:

docker --input 本地导出的镜像名

8、上传镜像

将本地的镜像上传到公有的镜像仓库,要先登陆到镜像仓库,注意上传镜像前要修改标签,标签前

面要加上Docker官网的账号名

标签格式: Docker官网的账号名/仓库名:镜像名

不过一般不会上传到公有仓库中,公司内部都使用私有仓库。

docker push [OPTIONS] NAME[:TAG]

#按照下面的流程就可以上传到公有云,有兴趣的可以上传

#改标签
docker tag 仓库名:镜像名 用户名/仓库名:镜像名

#登录
docker login
Username:   #用户名
Password:   #密码

#上传
docker push 用户名/仓库名:镜像名

 五、容器的相关操作命令

1、查询docker镜像列表及版本信息
[root@docker ~]# docker images       #查询镜像列表
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@docker ~]# docker images ls    #查询镜像列表
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@docker ~]# docker -v           #查看docker版本
Docker version 20.10.11, build dea9396
[root@docker ~]# docker version     #查看docker详细信息
Client: Docker Engine – Community   #客户端
 Version:           20.10.11
 API version:       1.41            #引擎版本
 Go version:        go1.16.9        #go语言版本
 Git commit:        dea9396         #git工具
 Built:             Thu Nov 18 00:38:53 2021   #创建时间
 OS/Arch:           linux/amd64     #操作系统
 Context:           default         #连接方式
 Experimental:      true
 
Server: Docker Engine – Community   #服务端
 Engine:
  Version:          20.10.11
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.9
  Git commit:       847da18
  Built:            Thu Nov 18 00:37:17 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:          #容器版本
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:           #运行的容器版本
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:      #初始化
  Version:          0.19.0
  GitCommit:        de40ad0
[root@docker ~]#

2、显示 docker 的系统级信息

用于显示 docker 的系统级信息,比如内核,镜像数,容器数等。

 

3、查询容器、删除容器

        容器的STATUS状态:up是正在运行的;Exited (0)是正常停止的容器;Exited (非0)异常停止

的容器。

docker ps       #查看运行中的容器

docker ps -a             #显示所有的容器,包括未运行的。a:all;全部

docker ps -aq           #查询容器的id。q:代表过滤;只过滤容器ID

docker rm 容器ID   #运行状态的容器不能直接删除,需要强制删除

docker ps -a | awk '{print "docker rm " $1'} | bash              ##批量删除容器(正则匹配);$1:是容器的id

for i in `docker ps -a | grep -i exit | awk '{print$1}'`; do docker rm -f $i;done    ##批量删除"exit"状态(指定状态)的容器

docker rm -f `docker ps -q`         ##强制批量删除非up状态的容器;不建议使用,若需要删除删选出id进行删除

4、创建、启动、停止运行容器

docker create [选项] 镜像运行的程序    #创建一个容器

              -i:让容器的标准输入保持打开

              -t:让docker分配一个伪终端

              -d:后台守护进程的方式运行

docker start 容器ID  #启动一个或多个已经被停止的容器

docker stop 容器ID  #停止运行中的容器,状态码137:表示主动退出停止容器

docker restart 容器ID    #重启容器

#启动一次性运行容器(持续性运行浪费资源,那么一次性执行如下操作)

docker run centos:7 /usr/bin/bash -c ls /

       -c:传递命令参数

#持续后台运行容器

docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello; done"  ##后台运行centos:7的容器

       while true;do echo hello; done:代表给予一个死循环

#批量删除“exit”状态(指定退出状态)的容器

for i in `docker ps -a | grep -i exit | awk '{print $1}'`;do docker rm -f $i;done

5、运行容器

run和start的作用有些类似,准确来说run相当于create+start

一般第一次可以使用run,后面维护还是使用start/stop/restart

格式:  docker run [选项] 镜像 [命令] [变量]

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用

-c 命令表示后面的参数将会作为字符串读入作为执行的命令

-v: 绑定一个卷

-P: 随机端口映射,容器内部端口随机映射到主机的端口

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

--name="名称": 为容器指定一个名称

--link name:alias 添加链接到另一个容器,格式“--link容器名:别名”

[root@docker ~]# docker run nginx  #运行容器,不加选项,需要ctrl+c退出
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
……
^C[root@docker ~]# docker ps -a  #ctrl+c退出,容器进程也会退出,此时返回值为0,是正常退出状态
ConTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                        PORTS     NAMES
7c2509b57f14   nginx          "/docker-entrypoint.…"   24 minutes ago   Exited (0) 24 minutes ago               admiring_antonelli
[root@docker ~]# docker run -d nginx  #加选项d,在后台运行
874914f116a743c19785403cc604b7b55c7167203c010fc58b162ca75a8d43a8
[root@docker ~]# docker run -d nginx /bin/bash -c "ls"   #后面添加命令在容器中执行,
1ab77880cd8ed5641e3bd8a4812f39658ad7a9e0bad187872bc4dec978eec9d9
[root@docker ~]# docker ps -a   #执行完成后容器正常退出,返回值0
ConTAINER ID   IMAGE          COMMAND                  CREATED              STATUS                          PORTS     NAMES
1ab77880cd8e   nginx          "/docker-entrypoint.…"   about a minute ago   Exited (0) about a minute ago             friendly_joliot
874914f116a7   nginx          "/docker-entrypoint.…"   3 minutes ago        Up 3 minutes                    80/tcp    objective_bhaska
……

6、进入、退出容器

使用exec进入的容器状态一定要是运行状态。

docker exec -it 容器ID /bin/bash

exit    #退出容器

或者使用run:docker run -it nginx:latest /bin/bash

注意:

docker run -it 会创建前台进程,但是会在输入exit后终止进程

docker attach 会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止容器进程

docker exec -it 会连接到容器,可以像SSH已有进入容器内部,进行操作,可以通过exit退出容器,但是不影响容器运行状态

[root@docker ~]# docker exec -it 874914f116a7 /bin/bash  #指定一个运行状态的容器进入,需要加选项-it不然无法输入命令
root@874914f116a7:/# ls  #进入成功,并可以执行命令
root@874914f116a7:/# exit
exit
[root@docker ~]# docker exec -it 1ab77880cd8e /bin/bash #指定一个未运行的容器,会报错
Error response from daemon: Container 1ab77880cd8ed5641e3bd8a4812f39658ad7a9e0bad187872bc4dec978eec9d9 is not running
[root@docker ~]#

7、容器导出、导入

#容器导出

docker export 容器ID > 备份文件名

#容器导入(会生成镜像,而不会创建容器)

cat 备份文件名 | docker import - 仓库名:镜像名

8、查询当前容器资源消耗信息

命令:docker stats

[CONTAINER]:以短格式显示容器的ID。
[CPU %]: CPU的使用情况。
[MEM USAGE 1 LIMIT]:当前使用的内存和最大可以使用的内
[MEM %]:以百分比的形式显示内存使用情况。
[NET I/O]:网络I/O数据。
[BLOCK 1/0]:磁盘I/O数据。
[PIDS]: PID号。
●docker stats --no-stream (只返回当前的状态)

六、私有仓库的操作

1、下载并创建私有仓库
[root@docker ~]# docker pull registry
[root@docker ~]# vim /etc/docker/daemon.json  
#添加如下内容
{
  "insecure-registries": ["192.168.163.100:5000"],
 #在守护进程的配置文件中添加私有仓库的IP:端口。默认本机端口是5000
  "registry-mirrors": ["https://t466r8qg.mirror.aliyuncs.com"]
}

[root@docker ~]# systemctl restart docker.service 
[root@docker ~]# docker create -it registry /bin/bash #创建私有仓库容器
10a6ca0d1ba2235661405c947b4de557ea113765bcc3c3b799c0c8789b29050c
[root@docker ~]# docker ps -a
ConTAINER ID   IMAGE      COMMAND                  CREATED         STATUS    PORTS     NAMES
41707d2c550e   registry   "/entrypoint.sh /bin…"   5 seconds ago   Created             naughty_roentgen
10a6ca0d1ba2   registry   "/entrypoint.sh /bin…"   5 minutes ago   Created             festive_williams
[root@docker ~]# docker start 41707d2c550e   #启动创建的容器
41707d2c550e
[root@docker ~]# docker ps -a  #注意 此时容器可以启动,说明镜像没问题,但是现在还不能使用,需要挂载磁盘给容器
ConTAINER ID   IMAGE      COMMAND                  CREATED          STATUS                       PORTS     NAMES
41707d2c550e   registry   "/entrypoint.sh /bin…"   42 seconds ago   Exited (127) 2 seconds ago             naughty_roentgen
10a6ca0d1ba2   registry   "/entrypoint.sh /bin…"   5 minutes ago    Created                                festive_williams
[root@docker ~]#  

2、挂载容器,并更改标签

宿主机的/data/registry自动创建挂载容器中的/tmp/registry

docker run -d -p 宿主机端口:容器内部端口 -v 宿主机目录:容器内目录 镜像

例:docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry

#在创建一个容器的过程中,将本机的端口映射到容器中,以及将本机的目录映射到容器中,接着查看已有容器会
看到端口等映射信息

docker tag nginx:latest 192.168.110.133:5000/nginx #更改标记为192.168.110.133:5000/nginx

3、上传镜像到私有仓库

docker push 192.168.110.133:5000/nginx #注意:上传的时候,镜像也是分层上传的

4、获取私有仓库列表

curl -XGET http://192.168.110.133:5000/v2/_catalog

5、从私有仓库下载镜像

docker pull 192.168.110.133:5000/nginx

总结

1、镜像

查找镜像(search)—上传(pull)、下载(push)—打标签(tag)—删除(rm)—导出(save)、导入(load)

2、容器

查看(ps)—创建(create)—启动(start)、停止(stop)、重启(restart)—运行(run)—进入(exec)、退出(exit)—导入(import)、导出(export)—删除(rmi)

3、仓库

下载registry镜像—>运行容器、暴露端口5000—>修改daemon.json文件—>重启docker

挂载容器—>打标签—>上传—>查询—>下载

4、Docker底层原理

◆名称空间( Namespaces):提供容器的隔离工作区的技术

容器完美的实现了6个名称空问隔离(namespace资源隔离-用容器化技术封装)

mount:文件系统,挂载点

user:操作进程的用户和用户组

pid:进程编号

uts:主机名和主机域

ipc:信号量、消息队列,共享内存(理解,不同的应用调用的时候应该使用不同的内存空间)

net:网络设备、网络协议栈、端口等

◆控制组(Control groups):资源管理功能,将应用程序限制为一组特定的资源

控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束

5、Docker三大组件

镜像:模板;组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础环境(泛指操作系统环境),可以理解为容器的模板

容器(Docker container):基于镜像的一种运行时状态

仓库(Docker reqistry):存放image镜像模板;仓库分类: ①、公共仓库docker hub;②、私有仓库registry harbor

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/599341.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号