【Docker】(1)了解docker的基础命令、概念(底层隔离机制),云服务

目录

❤docker基础命令

安装MySQL镜像

❤三个基本概念:镜像、容器、仓库

1.概念

2.镜像的导入和导出

❤docker和VMware的区别

❤docker底层隔离机制

1. LXC

2. namespace

3. Control Groups

❤云计算


❤docker基础命令

docker pull 下载镜像

# 下载nginx镜像
[root@localhost yum.repos.d]# docker pull nginx

docker images 查看镜像信息查看(镜像中包含所以需要的软件代码和基础环境,以及依赖的软件)

[root@localhost yum.repos.d]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    2b7d6430f78d   2 days ago   142MB

docker create 创建容器【格式: docker create -p指定端口映射 --name 指定名字 镜像名字:镜像版本】

        -p 指定端口映射

        --name 指定容器名字

docker start 容器名 启动容器

docket stop 容器名 暂停容器

docker ps 查看docker中有哪些容器

[root@localhost yum.repos.d]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

docker rm 容器名 删除容器(正在运行的容器不能删除,需先停止)

docker rmi 镜像名 删除镜像

docker logs 容器名字/container id 查看日志

docker info 查看系统范围内的信息

docker run 【docker run = docker pull + docker create + docker start】创建、启动docker容器开机

Docker run 命令 | 菜鸟教程 (runoob.com)

docker分配CPU、内存资源 - 灬菜鸟灬 - 博客园 (cnblogs.com)

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

        --name 为容器指定一个名称

        --rm 容器退出后删除镜像

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

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

        -m 设置容器使用内存最大值

        --cpu-shares 分配cpu使用权重

        --cpus 设置CPU数量,不可以超出核心数,不然会报错

        --cpuset-cputs 绑定容器到指定CPU运行

        --volume , -v 绑定一个卷

docker run --rm --name feng-centos-5 -m 10000000 --cpu-shares 2 --cpus 1 --zpuset-cpus 0 -it centos:7

docker [container] inspect 容器名:查看容器的详细信息(IP地址、网关、状态、内存等)

docker cp:Copy files/folders between a container and the local filesystem

# 将/etc/passwd拷贝到容器的根下
docker cp /etc/passwd 容器名:/
docker -exec -it 容器名  bash

docker exec 进入容器,执行命令

        -it 开启一个终端,交互式登录进入

        sc-mysq-1 容器名字

        bash 进入容器里运行的程序

[root@localhost ~]# docker exec -it sc-mysq-1 bash
bash-4.2# 
# 容器内部也有系统
bash-4.2# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.9 (Maipo)
# 在容器中进入mysql
bash-4.2# mysql -uroot -psc123456

安装MySQL镜像

下载mysql镜像,并指定5.7.39版本

[root@localhost ~]# docker pull mysql:5.7.39

查看镜像信息

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        5.7.39    daff57b7d2d1   8 hours ago   430MB
nginx        latest    2b7d6430f78d   2 days ago    142MB

启动mysql(必须指定刚下载的版本,否则会自动去下载最新版)

-e 指定密码

会自动创建一个用户root@'%',并给他授权所有权限

docker run -d --name sc-mysql-1 -p 33060:3306 -e MYSQL_ROOT_PASSWORD='sc123456' mysql:5.7.39

docker logs 容器名字/container id:查看日志

[root@localhost ~]# docker logs 461c154e51e4

查看(没成功,可能是命令出错,先删除容器再操作)

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                    NAMES
461c154e51e4   mysql:5.7.39   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   33060/tcp, 0.0.0.0:33060->3306/tcp, :::33060->3306/tcp   sc-mysq-1
441e91814333   nginx          "/docker-entrypoint.…"   3 hours ago     Up 3 hours     0.0.0.0:8090->80/tcp, :::8090->80/tcp                    sc-nginx

docker rmi nginx :删除镜像

docker rm sc-mysql-1: 删除容器(正在运行的容器不能删除,需先停止)

再启一个mysql容器

[root@localhost ~]# docker run -d --name sc-mysq-2 -p 33061:3306 -e MYSQL_ROOT_PASSWORD='sc123456' mysql:5.7.39
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                                    NAMES
e868255e6aa2   mysql:5.7.39   "docker-entrypoint.s…"   6 seconds ago    Up 5 seconds    33060/tcp, 0.0.0.0:33061->3306/tcp, :::33061->3306/tcp   sc-mysq-2
461c154e51e4   mysql:5.7.39   "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes   33060/tcp, 0.0.0.0:33060->3306/tcp, :::33060->3306/tcp   sc-mysq-1
441e91814333   nginx          "/docker-entrypoint.…"   3 hours ago      Up 3 hours      0.0.0.0:8090->80/tcp, :::8090->80/tcp                    sc-nginx

进入容器

docker exec 进入容器,执行命令

        -it 开启一个终端,交互式登录进入

        sc-mysq-1 容器名字

        bash 进入容器里运行的程序

[root@localhost ~]# docker exec -it sc-mysq-1 bash
bash-4.2# 
# 容器内部也有系统
bash-4.2# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.9 (Maipo)
# 在容器中进入mysql
bash-4.2# mysql -uroot -psc123456

使用SQLyog连接mysql:root sc123456 33060


补充:

关闭防火墙或清除防火墙规则,会导致iptables中和docker有关的SNAT或DNAT等策略实效,导致容器不能和外面的机器通信=》重启docker服务会自动添加docker相关的iptables规则


❤三个基本概念:镜像、容器、仓库

》》》镜像和容器就像类和实例

1.概念

镜像(Image)是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)

>>>镜像是一个包含了程序代码,基础操作系统,以及程序启动所依赖软件和库,在容器运行的整体单元,本质上就是一个文件。

容器(Container)是用镜像创建的运行实例

仓库(Repository)是集中存放镜像文件的场所

【关系图】

2.镜像的导入和导出

>静态导出(必须要删除由该镜像创建的所有实例)

[root@localhost images]# docker save -o nginx.tar nginx
[root@localhost images]# docker save -o mysql.5.7.39.tar mysql:5.7.39
[root@localhost images]# ls
mysql.5.7.39.tar  nginx.tar

导入

docker load < nginx.tar
或
docker load -i nginx.tar

>动态导出正在使用的容器的镜像

docker export -o nginx-liq.tar sc-nginx-liq
# 最后接的是容器名字

导入

        博主换了几种方式一直有异常QAQ ,哪位朋友要是会的话,教我一下❤

❤docker和VMware的区别

docker:共享操作系统内核=》需要加载的东西少

 Docker:

优点

1. 启动速度快

2. 资源消耗少

        · 资源可以控制:cpu和内存,磁盘速度和iops等

        · 共用宿主机内核、基础镜像:消耗内存少

3. 扩展方便:HPA,增加或减少容器

缺点

1. app隔离不彻底,虚拟机安全性更高

【其他区别】虚拟机多一层封装

❤docker底层隔离机制

所有的容器运行起来后都是一个进程,进程之间的隔离依靠操作系统完成

所有的进程共享Linux操作系统内核,内核中有一个软件:LXC(Linux container)

1. LXC

LXC(Linux containers)快速入门 - lisperl - 博客园 (cnblogs.com)

Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。

作用:可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的执行环境就是一个容器。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。

LXC在资源管理方面依赖与Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。LXC在隔离控制方面依赖于Linux内核的namespace特性,具体而言就是在clone时加入相应的flag(NEWNS NEWPID等等)。

2. namespace

命名空间:内存中存放数据的一个空间,例如:变量、函数、库等

作用:隔离资源

Namespace是内核的一个功能,用来给进程隔离一系列(网络,文件系统,进程等)系统资源

命名空间的分类

  1. 网络命名空间
  2. 进程命名空间
  3. IPC命名空间:类似于管道(进程间通信Inter Process Communication)
  4. 挂载命名空间:文件系统相关mount
  5. UTS命名空间:UTS命名空间是扁平化的结构,不同的命名空间之间没有层级关系,用于隔离主机名。
  6. 用户命名空间

项番 类型                         功能说明

No.1 MNT Namespace    提供磁盘挂载点和文件系统的隔离能力

No.2 IPC Namespace      提供进程间通信的隔离能力

No.3 Net Namespace       提供网络隔离能力

No.4 UTS Namespace     提供主机名隔离能力

No.5 PID Namespace      提供进程隔离能力

No.6 User Namespace     提供用户隔离能力

3. Control Groups

对资源进行限制,例如:cpu,内存、磁盘等

cgroups

❤云计算

  • IaaS: Infrastructure as a Service

        这层的作用是提供虚拟机或者其他资源作为服务提供给用户 -->卖基础设施--》卖云服务器 --》阿里云、腾讯云、华为云、aws(亚马逊云)、google云、azure(微软云)

  • PaaS: Platform as a Service

        组件服务(比如存储、cdn、直播等)--》背后有一个公司搭建好了平台,我们去购买服务就可以在平台里买软件

B2C(business to customer),B2B(business to business)

七牛云作为国内知名的云平台即服务(PaaS)提供商,提供海量文件存储、CDN内容分发、视频点播、互动直播及机器数据智能分析与处理等服务,致力于以数据科技全面驱动数字化未来,

  • SaaS: Software as a Service

这层的作用是将应用作为服务提供给客户。通过这种模式,用户只要接上网络,并通过浏览器,就能直接使用在云端上运行的应用,而不需要顾虑类似安装等琐事。 --》WPS提供多人编辑文档,存储 --》卖某个软件的使用权

WPS: 金山公司推出的办公软件 --》word,excel,ppt等软件

  • BaaS: BlockChain as a Service --》卖区块链服务的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值