Docker 离线安装与基本使用
Docker 是在 Linux 容器里运行应用的开源工具,是一种轻量级的"虚拟机"。Docker 的 Logo 设计为蓝色鲸鱼,拖着许多集装箱。如下图,鲸鱼可以看作宿主机,而集装箱可以理解为相互隔离的容器。每个集装箱中都包含自己的应用程序
Docker 离线安装与基本使用
一、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地址 |
---|---|---|
Docker | CentOS7 | 192.168.1.1 |
- 实验所需软件包从这个链接下载: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
命令可以删除多余镜像
有两种方式:
- 根据镜像标签
[root@Docker ~]# docker rmi centos7:centos7
Untagged: centos7:centos7
[root@Docker ~]# docker images
- 根据镜像 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
更多推荐
所有评论(0)