Docker 离线安装与基本使用
一、Docker 概述
1.Docker 和虚拟机的区别
2.Docker 的使用场合
3.Docker 三大核心
镜像(Image)
容器(Container)
仓库(Repository)
二、安装 Docker
三、Docker 镜像操作
1.有网方式
2.离线方式
1)查看镜像信息
2)添加新标签
3)删除镜像
4)存出镜像
5)载入镜像
6)镜像上传
四、Docker 容器操作
1.容器创建与启用
2.容器的运行与停止
3.进入容器
4.导出容器与导入容器
五、Docker 资源控制
1.对 CPU 的控制
1)限制 CPU 使用速率
2)多任务按比例分享 CPU
3)限制 CPU 内核使用
2.对内存使用的限制
3.对 blkio 的限制
一、Docker 概述
Docker 是在 Linux 容器里运行应用的开源工具,是一种轻量级的"虚拟机"。Docker 的 Logo 设计为蓝色鲸鱼,拖着许多集装箱。如下图,鲸鱼可以看作宿主机,而集装箱可以理解为相互隔离的容器。每个集装箱中都包含自己的应用程序。
1.Docker 和虚拟机的区别
2.Docker 的使用场合
打包应用程序简化部署
可脱离底层硬件任意迁移——如:服务器从腾讯云迁移到阿里云
3.Docker 三大核心
镜像(Image)
Docker 镜像是 Docker 容器运行时的只读模板,镜像可以用来创建 Docker 容器。每一个镜像由一系列的层(layers)组成。
容器(Container)
Docker 利用容器来运行应用,一个 Docker 容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。容器是从镜像创建的运行实例。它可以被启用,开始,停止,删除。每个容器都是互相隔离的,保证安全的平台。
仓库(Repository)
Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像后,可以使用 push 命令将它上传到共有仓库(Public)或者私用仓库(Private),这样一来当下次要在另外台机器上使用这个镜像时,只需要从仓库上拉取下来就可以了。
二、安装 Docker
- 实验所需软件包从这个链接下载:https://pan.baidu.com/s/1v2Y3gyq2AgRRyJMlLGSOlA
- 提取码:y7xd
[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
2.根据镜像 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