一、Docker 概述

Docker 是在 Linux 容器里运行应用的开源工具,是一种轻量级的"虚拟机"。Docker 的 Logo 设计为蓝色鲸鱼,拖着许多集装箱。如下图,鲸鱼可以看作宿主机,而集装箱可以理解为相互隔离的容器。每个集装箱中都包含自己的应用程序。
在这里插入图片描述

1.Docker 和虚拟机的区别

特性Docker容器虚拟机
启动速度秒级分钟级
计算能力损耗几乎无损耗50%左右
性能接近原生弱于
系统支持量(单机)上千个几十个
隔离性资源限制完全隔离

2.Docker 的使用场合

打包应用程序简化部署
可脱离底层硬件任意迁移——如:服务器从腾讯云迁移到阿里云

3.Docker 三大核心

镜像(Image)

Docker 镜像是 Docker 容器运行时的只读模板,镜像可以用来创建 Docker 容器。每一个镜像由一系列的层(layers)组成。

容器(Container)

Docker 利用容器来运行应用,一个 Docker 容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。容器是从镜像创建的运行实例。它可以被启用,开始,停止,删除。每个容器都是互相隔离的,保证安全的平台。

仓库(Repository)

Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像后,可以使用 push 命令将它上传到共有仓库(Public)或者私用仓库(Private),这样一来当下次要在另外台机器上使用这个镜像时,只需要从仓库上拉取下来就可以了。

二、安装 Docker

主机名操作系统IP地址
DockerCentOS7192.168.1.1
[root@Docker ~]# ls
anaconda-ks.cfg  docker-18.06.1-ce.tgz
[root@Docker ~]# tar xf docker-18.06.1-ce.tgz 
[root@Docker ~]# ls
anaconda-ks.cfg  docker  docker-18.06.1-ce.tgz
[root@Docker ~]# cp docker/* /usr/bin/
[root@Docker ~]# dockerd &					#启用docker

在这里插入图片描述
查看 Docker 版本

[root@localhost ~]# docker version

在这里插入图片描述

三、Docker 镜像操作

1.有网方式

1)搜索镜像

  • 命令语法:docker search 关键字 //用来搜索远端官方仓库中的共享镜像

2)获取镜像

  • 命令语法:docker pull 名称

2.离线方式

把刚才提供链接里的 centos7,拖到虚拟机中

[root@Docker ~]# ls
anaconda-ks.cfg  centos7  docker  docker-18.06.1-ce.tgz
[root@Docker ~]# 
[root@Docker ~]# docker load < centos7 				#load命令加载成镜像
f972d139738d: Loading layer  208.8MB/208.8MB
Loaded image: centos:latest

在这里插入图片描述

1)查看镜像信息

  • 命令语法docker images
[root@localhost ~]# docker images   		#查看本地所有镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              75835a67d134        2 years ago         200MB

注解:

  • REPOSITORY:镜像属于的仓库(名称)
  • TAG:镜像的标签信息,标记同一仓库中的不同镜像(默认为 latest)
  • IMAGE ID:镜像的唯一 ID号,唯一标识了该镜像。
  • CREATED:镜像创建时间。
  • SIZE:镜像大小。

在这里插入图片描述
还可以根据镜像的唯一标识 ID 号,获取镜像详细信息

[root@localhost ~]# docker inspect 75835a67d134

2)添加新标签

  • 命令语法docker tag 原名称:原标签 新名称:新标签

只是一个标签,而不是新建一个镜像,只是为了方便:

[root@Docker ~]# docker tag centos:latest centos7:centos7
[root@Docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              75835a67d134        2 years ago         200MB
centos7             centos7             75835a67d134        2 years ago         200MB
再添加一个标签,方便后面实验:
[root@Docker ~]# docker tag centos:latest centos8:centos8

在这里插入图片描述

3)删除镜像

使用 docker rmi 命令可以删除多余镜像

有两种方式:

  1. 根据镜像标签
[root@Docker ~]# docker rmi centos7:centos7
Untagged: centos7:centos7
[root@Docker ~]# docker images

在这里插入图片描述

  1. 根据镜像 ID
[root@Docker ~]# docker rmi -f 75835a67d134
[root@Docker ~]# docker images

在这里插入图片描述
再重新加载一下镜像

[root@Docker ~]# docker load < centos7

4)存出镜像

  • 当需要把镜像进行迁移的时候,需要保存为本地文件,这样过程叫存出镜像。
[root@Docker ~]# docker save -o test centos:latest

在这里插入图片描述

5)载入镜像

  • 将文件导出,成为镜像,这一过程叫做载入镜像。
[root@Docker ~]# docker rmi centos:latest
[root@Docker ~]# docker load < test
[root@Docker ~]# docker images

在这里插入图片描述

6)镜像上传

本地存储的镜像越来越多,就需要指定一个专门的地方存放这些镜像—仓库。

  • 命令格式docker push 名称:标签
  • 注意:因为镜像上传需要网络,所以暂不使用

四、Docker 容器操作

1.容器创建与启用

容器的创建必须在镜像的基础上,不可以单独创建,是镜像的可写层。

  • 命令格式docker create [选项] 镜像 运行的程序

常用选项:

  • -i:表示让容器的输入保持打开。
  • -t:表示让 Docker 分配一个伪终端。
  • --name:指定名字

创建容器:

[root@Docker ~]# docker create -it --name test centos:latest /bin/bash
[root@Docker ~]# docker ps -a

在这里插入图片描述
启用容器:

[root@Docker ~]# docker start test
[root@Docker ~]# docker ps

在这里插入图片描述
如果用户想创建并启动容器,可以执行 docker run 命令

  • 命令格式docker run [选项] 镜像 运行的程序
[root@Docker ~]# docker run --name zhangsan centos:latest /bin/bash -c ls

在这里插入图片描述
但是通过查看容器运行状态,发现,运行完命令就停止了,start 启动也没有用

[root@Docker ~]# docker ps -a

在这里插入图片描述

有时候需要在后台持续运行这个容器,就需要添加 -d 选项

[root@localhost ~]# docker run -d --name lisi centos:latest /bin/bash -c "while true;do echo ok;done"
[root@localhost ~]# docker ps -a

在这里插入图片描述

2.容器的运行与停止

  • 关闭容器docker stop 容器名称或 ID 简写
  • 删除容器docker rm 容器名称或 ID 简写
[root@localhost ~]# docker stop lisi				#关闭容器
[root@localhost ~]# docker rm lisi					#删除容器

在这里插入图片描述
容器的暂停运行

[root@localhost ~]# docker pause test       #暂停运行
[root@localhost ~]# docker unpause test     #继续运行

在这里插入图片描述

3.进入容器

[root@Docker ~]# docker exec -it test /bin/bash
[root@7e74f2e6a025 /]# ls
[root@7e74f2e6a025 /]# exit

在这里插入图片描述

4.导出容器与导入容器

导出容器:将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。

  • 命令格式docker export 容器ID/名称 > 文件名
[root@Docker ~]# docker export test > centos-test
[root@Docker ~]# ls -lh centos-test 
-rw-r--r-- 1 root root 199M 12  6 23:04 centos-test

在这里插入图片描述
导入容器:将容器文件生成镜像。

  • 命令格式:cat 文件名 | docker import - 生成的镜像名称:标签
[root@Docker ~]# cat centos-test | docker import - centos:test
[root@Docker ~]# docker images

在这里插入图片描述

五、Docker 资源控制

Cgroup 是 Control group 的简写,是 Linux 内核提供的一种限制所使用物理资源的机制,这些资源主要包括 CPU、内存、blkio。

1.对 CPU 的控制

1)限制 CPU 使用速率

只有在容器运行时才会在系统 CPU 路径下生成目录。

[root@Docker ~]# docker create -it --name aaa centos:latest /bin/bash
[root@Docker ~]# docker start aaa

在这里插入图片描述
在这里插入图片描述

2)多任务按比例分享 CPU

当多个容器任务运行时,很难计算 CPU 的使用率,为了使容器合理使用 CPU 资源,可以通过 --cpu-shares 选项设置 CPU 按比例共享 CPU 资源,这种方式还可以实现 CPU 使用率的动态调整。

[root@Docker ~]# docker run -itd --name bbb --cpu-shares 1024 centos:latest

在这里插入图片描述

3)限制 CPU 内核使用

在 Docker 中可以使用 --cpuset-cpus 选项来使某些程序独享 CPU 内核,以便提高其处理速度。真实的服务器 CPU 有多个内核;而虚拟机里,默认只有一个,内核0。

[root@Docker ~]# cat /proc/cpuinfo 
processor	: 0					#这行就是CPU的编号的意思,如果有多个CPU ,会有多个这个段
vendor_id	: GenuineIntel
cpu family	: 6
model		: 158
model name	: Intel(R) Core(TM) i5-9300HF CPU @ 2.40GHz
stepping	: 13
microcode	: 0xc6
cpu MHz		: 2400.002
cache size	: 8192 KB
---------------------------------

创建一个新的容器 ccc,使该容器上的进程,只可以在内核 0 上运行:

[root@Docker ~]# docker run -itd --name ccc --cpuset-cpus 0 centos:latest
[root@Docker ~]# docker ps | grep ccc
[root@Docker ~]# cat /sys/fs/cgroup/cpuset/docker/根据容器ID号来写/cpuset.cpus
0

在这里插入图片描述

2.对内存使用的限制

在 Docker 中可以通过 docker run -m 命令来限制容器内存使用量,当内存超过了限制的容量,Linux 内核将会尝试收回这些内存,如果仍旧没法控制使用内存在限制范围之内,进程就会被杀死。

创建一个新的容器 ddd ,内存限制为 512 MB:

[root@Docker ~]# docker run -itd -m 512MB --name ddd centos:latest
[root@Docker ~]# docker ps | grep ddd
[root@Docker ~]# cat /sys/fs/cgroup/memory/docker/根据容器ID号来写/memory.limit_in_bytes

在这里插入图片描述

3.对 blkio 的限制

如果在一台服务器上进行容器的混合部署,那么会存在同时几个程序写入磁盘数据的情况,这时可以通过--device-write-bps 选项来限制每秒写 io 次数来限制指定设备的写速度。相应的还有--device-read-bps 选项可以限制读取的速度,但这种方式只能限制设备,不能限制分区

限制新建容器的 /dev/sda 的写入速度为 1MB:

[root@Docker ~]# docker run -itd --name eee --device-write-bps /dev/sda:1M centos:latest
[root@Docker ~]# docker ps | grep eee
[root@Docker ~]# cat/sys/fs/cgroup/blkio/docker/根据容器ID号来写/blkio.throttle.write_bps_device

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐