Docker ------ 基本管理

一、Docker 介绍与部署:

(1)Docker:
在这里插入图片描述
Docker 是一个开源的应用容器引擎:让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。是一个轻量级的“虚拟机”,容器是完全使用沙箱机制,相互之间不会有任何接口。

(2)Docker 与虚拟机的区别:

!!!相同点:
①可在不同的主机之间迁移;
②都具备 root 权限;
③都可以远程控制;
④都有备份、回滚操作。

!!!不同点:

1、操作系统上:
docker:在性能上有优势,可以轻易的运行多个操作系统;
虚拟机:可以安装任何系统,但是性能不及容器。

2、原理:
docker:和宿主机共享内核,所有容器运行在容器引擎之上,容器并非一个完整的操作系统,所有容器共享操作系统,在进程级进行隔离。
虚拟机:每一个虚拟机都建立在虚拟的硬件之上,提供指令级的虚拟,具备一个完整的操作系统。

3、优点:
docker:高效、集中。一个硬件节点可以运行数以百计的的容器,非常节省资源,QoS 会尽量满足,但不保证一定满足。内核由提供者升级,服务由服务提供者管理。
虚拟机:对操作系统具有绝对权限,对系统版本和系统升级具有完全的管理权限。具有一整套的的资源:CPU、RAM 和磁盘。QoS 是有保证的,每一个虚拟机就像一个真实的物理机一样,可以实现不同的操作系统运行在同一物理节点上。

4、缺点:
docker:对内核没有控制权限,只有容器的提供者具备升级权限。只有一个内核运行在物理节点上,几乎不能实现不同的操作系统混合。容器提供者一般仅提供少数的几个操作系统。
虚拟机:每一台虚拟机都具有更大的负载,耗费更多的资源,用户需要全权维护和管理。一台物理机上能够运行的虚拟机非常有限。

(3)Docker的使用场景:

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

(4)Docker 核心概念:

  • 镜像;
  • 容器;
  • 仓库;

Centos 安装Docker 的两种方式

  • 使用 curl 获得 Docker 的安装脚本进行安装;
  • 使用 yum 仓库来安装 Docker(推荐使用!!!)。

(5)安装 Docker:

1、先安装依赖包:
yum install -y yum-utils device-mapper-persitent-data lvm2

2、设置阿里云镜像源:
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、安装Docker-CE:
yum install -y docker-ce
systemctl stop firewalld.service 
setenforce 0

4、开启服务:
systemctl start docker
systemctl enable docker      //设置开启自启动

在这里插入图片描述

二、Docker 镜像操作:

(1)镜像加速:此操作会让我们下载镜像时,速度会有明显的加快。

tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors": ["https://05vz3np5.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload      //重载
systemctl restart docker     //重启

(2)搜索镜像:docker search 关键词

docker search nginx   //搜索nginx镜像

在这里插入图片描述
(3)获取/下载镜像:docker pull 仓库名称

docker pull nginx

在这里插入图片描述
(4)查看镜像:

  • docker images 仓库名称;
  • docker inspect 镜像ID号;

在这里插入图片描述
(5)添加新标签:
在这里插入图片描述

示例:将标签更新为 abner/nginx:web(用户名/仓库名:标签)
docker tag nginx:latest abner/nginx:web   

在这里插入图片描述
(6)删除镜像:
在这里插入图片描述

示例:
docker rmi nginx:web
docker rmi 231d40e811cd

(7)存出镜像:这样其他服务器就可以直接拿来用了,无需额外再下载了

docker save -o 存出文件名 存出的镜像
示例:
docker save -o nginx nginx:latest  //nginx为存出文件名

(8)载入镜像:

方式一: docker load --input 存出文件名

方式二: docker load < 存出文件名
docker load < nginx

(9)上传镜像:需要有公有仓库

docker login   //登录

docker push 仓库名称:[:标签]
示例:
docker push nginx:web

三、Docker 容器操作:

镜像是不可以直接使用的,只有加载给容器,再启动容器,才可以使用镜像。

(1)创建容器:

docker create [选项]镜像运行的程序
-i :让容器的标准输入保持打开;
-t :让 Docker分配一个伪终端。

示例:docker create -it nginx:latest /bin/bash

(2)查看容器运行的状态:

docker ps -a
// -a :列出最近一次启动的容器

(3)启动容器:

docker start 容器的id

(4)创建容器并启动执行shell命令:

docker run [选项]镜像运行的程序 执行的命令
-d :在后台运行

示例:docker run nginx /usr/local/bash -c ls /
//含义:nginx是镜像名称;
      /usr/local/bash是指定环境
      -c ls /:指定命令查看/目录下的文件列表

docker run :是一个综合体的命令,先帮你下载镜像,再创建一个容器,再启动容器,并进入容器做相关操作后再退出。

如果想让容器一直在后台保持执行的状态,可以写一个循环语句:
docker run -d nginx /bin/bash -c "while true;do echo hello;done"

(5)终止容器:

docker stop 容器的id/名称

(6)进入容器:

docker exec [选项] 容器的id(或者名称) /bin/bash

示例:docker exec -it f5683d53d83 /bin/bash

(7)导出容器:

docker export 容器的id > 文件名

示例:docker export j684ds68w358 > nginx_c

(8)导入容器:会生成镜像,但是不会创建容器

cat 文件名| docker import -生成的镜像名称:标签

示例:
cat nginx_c | docker import - nginx:web
有了nginx:web 这个镜像,就可以利用这个镜像再创建容器,开启等相关操作了。

(9)删除容器:

1、删除单个容器:
docker rm [选项] 容器的id/名称

2、批量删除(不会删除正在运行的容器,只会删除不在用的容器):
docker ps -a | awk '{print "docker rm "$1}' | bash
//前面的命令会输出容器的id号,并没有删除,加上bash,是指这条命令在bash环境下运行,即删除

四、Docker 资源控制:

(1)限制CPU使用速率:
在这里插入图片描述
示例一:

 docker run --cpu-quota 20000 nginx:latest   //上限值设置为20%

在这里插入图片描述
示例二:通过修改配置文件实现

文件位置:/sys/fs/cgroup/cpu/docker/b6a358e3452d15285e23360491a6a4ccff0d914914fe05f1c3f27919983d9708/cpu.cfs_quota_us
修改数值就可以。 

在这里插入图片描述
(2)多任务按比例分享CPU:
在这里插入图片描述

示例1:创建两个容器为c1和c2,将这两个容器cpu资源占比设置为1/3和2/3
[root@localhost docker]# docker run -itd --name c1 --cpu-shares 512 centos
[root@localhost docker]# docker run -itd --name c2 --cpu-shares 1024 centos

示例2:内存使用限制
[root@localhost docker]# docker run --name c4 -m 512m centos   //限制使用512m的内存

在这里插入图片描述
在这里插入图片描述
(3)使用 --cpuset-cpus 选项限制 CPU 内核使用权:

示例:限制容器使用指定的CPU
[root@localhost docker]# docker run --name c3 --cpuset-cpus 0 centos  //限制使用一个核心数的cpu

在这里插入图片描述
(4)对 blkio 的限制(对某一块磁盘的读写):

1、限制读某个设备的bps(数据量):
--device-read-bps

2、限制写入某个设备的bps(数据量):
--device-write-bps

3、限制读某个设备的iops(次数):
--device-read-iops

4、限制写入某个设备的iops(次数):
--device-write-iops

在这里插入图片描述

五、Docker 数据卷管理:

在Docker中,为了方便查看容器内产生的数据或者将多个容器中的数据实现共享,就需要容器中的数据管理操纵;
管理 Docker 容器中数据有两种方式

  • 数据卷(容器 — 宿主机);
  • 数据卷仓库(容器 — 容器);

(1)数据卷:

数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新不会影响镜像,从而实现数据在宿主机与容器之间的迁移。(类似于,linux系统上对目录的 mount操作)

1、使用 centos 镜像,在宿主机目录 /var/www 挂载容器中的 /data1

docker run -v /var/www:/data1 --name web1 -it centos /bin/bash
// -v:指定卷
  /var/www:宿主机的路径
  /data1:容器中的路径

2、此时进入容器,就可以看见这个数据卷已经创建成功,挂载到 /data1目录上了(为了测试,我们可以在这个目录下创建一个文档):

[root@8e82cab75872 /]# cd data1/
[root@8e82cab75872 data1]# echo "123" > test01.txt   ##创建一个test01.txt
[root@8e82cab75872 data1]# exit
exit

退回到宿主机上,也可以看到这个文件的存在:
[root@localhost docker]# cd /var/www/
[root@localhost www]# ls
test01.txt
[root@localhost www]# cat test01.txt 
123

(2)数据卷容器:

这个是在容器与容器之间使用的,数据卷容器就是一个普通的容器,专门提供数据卷给其他容器挂载使用。

1、首先创建一个名为 web100 的容器:

docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash

在两个目录下创建两个文件:
[root@b2b9b7c908ed /]# cd data1/
[root@b2b9b7c908ed data1]# echo "111" > 111.txt
[root@b2b9b7c908ed data1]# cd ..
[root@b2b9b7c908ed /]# cd data2/
[root@b2b9b7c908ed data2]# echo "222" > 222.txt
[root@b2b9b7c908ed data2]# exit
exit

2、使用 --volumes-from 来挂载 web100 容器中的数据卷到新的容器,新容器名为 db1:

docker run -it --volumes-from web100 --name db1 centos /bin/bash

查看目录和文件是否都存在:
[root@d97174e0ca99 /]# cd data1/
[root@d97174e0ca99 data1]# ls
111.txt
[root@d97174e0ca99 data1]# cat 111.txt 
111
[root@d97174e0ca99 data1]# cd ..
[root@d97174e0ca99 /]# cd data2 
[root@d97174e0ca99 data2]# ls 
222.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值