赞
踩
机器上架,物理连线
安装Huawei Cloud Stack Deploy(物理机器安装,也可以virtalbox,此处使用物理服务器安装)以前叫FCD(FusionCloud Deploy),现在叫HCSD(Huawei Cloud Stack Deploy)
配置交换机
配置Huawei Cloud Stack Deploy
第四步的具体流程
物理连线,参照《交换机物理接口规划表》
控制节点一般来说有三个平面;管理平面、业务平面、存储平面;共六块网卡,实现两两冗余
0:是BMC的板载网卡;0.1的0是插槽号(solt),1是接口号,代表0号插槽的1号口;分别连接交换机的管理口
Huawei 2288X V5服务器(https://info.support.huawei.com/computing/server3D/res/server/2288xv5vc/index.html?lang=cn)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uyc0KR0j-1687697841352)(Img/image-20230608153934162.png)]
部署过程中,Deploy工程会先安装第一台控制节点,称为first node,该节点配置为PXE服务器节点,通过该节点,使用PXE安装其他节点(控制节点、计算节点、网络节点等)
2023-06-03 AM 01:29:49
Docker出现的契机
Docker VS VMware
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
什么是容器
为什么需要容器
Docker不等于容器,Docker只是实现容器的一种解决方案,类似于云计算不等于openstack,openstack只是实现云计算的一种解决方案最为知名
红帽实现容器是使用的Podman
华为实现容器是使用的Containerd
K8S的由来
Docker的特性
Docker核心组件
Dockerhub镜像仓库(https://hub.docker.com/)
aliyun镜像站(https://developer.aliyun.com/)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-36Y6LQ8H-1687697841354)(Img/whco6gkixor4i_65425d5865854d83a6dc2c4d33869ef9.png)]
docker build # 构建镜像
docker pull # 在客户端执行docker pull会把镜像仓库Registry内的镜像拉取到本地
docker run # 运行镜像
[root@CentOSteam8 ~]# free -m # 查看内存,有4G就可以
total used free shared buff/cache available
Mem: 3896 644 2769 11 483 3009
Swap: 499 0 499
[root@CentOSteam8 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 # 安装必要的一些系统工具
# 添加软件源信息
[root@CentOSteam8 ~]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@CentOSteam8 ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# 开启缓存,可有可无
[root@CentOSteam8 ~]# yum makecache timer
Metadata cache refreshed recently.
# 安装docker-ce
[root@CentOSteam8 ~]# yum -y install --allowerasing docker-ce
# 启动docker服务
[root@CentOSteam8 ~]# systemctl enable docker.service
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@CentOSteam8 ~]# systemctl restart docker.service
[root@CentOSteam8 ~]# systemctl is-active docker.service
active
# 查询docker版本
[root@CentOSteam8 ~]# docker -v
Docker version 24.0.2, build cb74dfc
[root@CentOSteam8 ~]# docker version
Client: Docker Engine - Community
Version: 24.0.2
API version: 1.43
Go version: go1.20.4
Git commit: cb74dfc
Built: Thu May 25 21:53:10 2023
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 24.0.2
API version: 1.43 (minimum version 1.12)
Go version: go1.20.4
Git commit: 659604f
Built: Thu May 25 21:52:10 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.21
GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8
runc:
Version: 1.1.7
GitCommit: v1.1.7-0-g860f061
docker-init:
Version: 0.19.0
GitCommit: de40ad0
华为镜像加速器网址(https://console.huaweicloud.com/swr/?agencyId=0c7d0e9afb00f2dc1febc006187d8873®ion=cn-north-4&locale=zh-cn#/swr/mirror)在镜像中心右上角
# 把加速器地址写入docker
[root@CentOSteam8 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": [ "https://0c7d0e9a1080259e0fe4c006b76df820.mirror.swr.myhuaweicloud.com" ]
}
[root@CentOSteam8 ~]# systemctl restart docker.service
[root@CentOSteam8 ~]# docker info | grep -A 1 'Registry Mirrors'
Registry Mirrors:
https://0c7d0e9a1080259e0fe4c006b76df820.mirror.swr.myhuaweicloud.com/
# 下载nginx镜像,不指定版本的话就是最终版本
[root@CentOSteam8 ~]# docker pull nginx
# 下载mysql镜像,指定版本5.6
[root@CentOS ~]# docker pull mysql:5.6
# 查询镜像
[root@CentOSteam8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest eb4a57159180 3 days ago 187MB
# 创建容器
[root@CentOSteam8 ~]# docker create --name web01 nginx
017702126da4e1c3e4a29f49b38fa3f5bd2032c8a316f36625a6a2009e2e5723
# 列出所有容器
[root@CentOSteam8 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
017702126da4 nginx "/docker-entrypoint.…" About a minute ago Created web01
# 运行容器
[root@CentOSteam8 ~]# docker start 017702126da4
017702126da4
#容器已经运行,并且监听的是80端口
[root@CentOSteam8 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
017702126da4 nginx "/docker-entrypoint.…" 2 minutes ago Up 9 seconds 80/tcp web01
# 访问容器,默认使用的是宿主机的IP的80端口,在浏览器中输入IP和端口访问
# 删除容器
[root@CentOSteam8 ~]# docker rm -f 017702126da4
017702126da4
# 删除镜像
# ※:注意,在删除镜像之前先删除容器
[root@CentOS ~]# docker rmi -f ae1328b946d1
Deleted: sha256:ae1328b946d1a825337fc8eeafde5450be58322872997d7fe52f948dd02dd801
Deleted: sha256:ba1870a9436cb85443810fdbed695ffa7960b4e0329495b1c2dbc69fba1fa4a8
# 创建并运行容器
[root@CentOSteam8 ~]# docker run -d -p 8080:80 --name web01 nginx
9ee522d76dc5e66479ca67d697eb67cf0194a66860dd7aa072d6ec6b749f6275
-d:放在后台运行
-p:指定端口映射
-P:随机端口映射
–name:容器名称
nginx:部署容器用到的镜像
# 下载httpd服务,并且创建并运行web02
[root@CentOSteam8 ~]# docker run -d -p 80:80 --name web02 httpd
# 查看容器路径,只有容器在运行的时候才能看到
[root@CentOS merged]# df -h
overlay 30G 5.7G 25G 19% /var/lib/docker/overlay2/b16e7ea95c7ce1514118001c39e6ea7f9485ac6c40bd648ff29c32cf6259ec90/merged
# 查询容器在本机的位置
[root@CentOS lib]# docker inspect 51de133091a6 | grep 51de133091a6
# 查看内存信息
[root@CentOS merged]# free -m
total used free shared buff/cache available
Mem: 1950 1115 113 11 721 675
Swap: 4095 24 4071
[root@CentOS merged]# cat /proc/meminfo
# 实时查看容器的资源使用情况
[root@CentOSteam8 ~]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
9ee522d76dc5 web01 0.00% 8.605MiB / 3.805GiB 0.22% 5.78kB / 0B 13.9MB / 0B 6
#查看单个容器(ID)
docker stats 7c3e162bef49
#查看单个容器(名称)资源使用情况
docker stats name
#查看多个容器资源使用情况
docker stats xxx xxx
CONTAINER ID:容器ID
NAME:容器名称
CPU %:容器使用的主机 CPU百分比
MEM USAGE / LIMIT:容器使用的总内存、以及允许使用的内存总量
MEM %:容器所使用的内存百分比
NET I/O:容器通过网络接口接收和发送的数据量
BLOCK I/O:容器从主机上的块设备写入和的读取数据量
PIDS:容器创建的进程或线程数
# 进入容器交互;-i:;-t:terminal(终端);
[root@CentOS ~]# docker exec -it 7a849e10ca1e /bin/bash
root@7a849e10ca1e:/#
-i:在前台运行
-d:在后台运行
-t:tty,控制台
/bin/bash:开启一个新的环境变量
root@7a849e10ca1e:~# cat /usr/share/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
# 退出容器
root@7a849e10ca1e:~# exit
exit
# 把容器内文件拷贝出来
[root@CentOS ~]# docker cp 7a849e10ca1e:/usr/share/nginx/html/index.html ./
Successfully copied 2.56kB to /root/./
# 修改文件内容
[root@CentOS ~]# echo "hello Docker" > index.html
# 把修改后的内容拷贝回去
[root@CentOS ~]# docker cp ./index.html 7a849e10ca1e:/usr/share/nginx/html/index.html
Successfully copied 2.05kB to 7a849e10ca1e:/usr/share/nginx/html/index.html
[root@CentOS ~]# docker run -p 3366:3306 --name mysql --restart=always --privileged=true \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=redhat -d mysql:5.6
-p 3366:3306:指定宿主机端口3366与容器端口3306映射关系
–name mysql:创建的容器名称
–restart=always:总是跟随docker启动
–privileged=true:获取宿主机root权限
-v /usr/local/mysql/log:/var/log/mysql:映射日志目录,宿主机:容器
-v /usr/local/mysql/data:/var/lib/mysql:映射数据目录,宿主机:容器
-v /usr/local/mysql/conf:/etc/mysql:映射配置目录,宿主机:容器
-v /etc/localtime:/etc/localtime:ro:让容器的时钟与宿主机时钟同步,避免时区的问题,ro是read only的意思,就是只读
-e MYSQL_ROOT_PASSWORD=123456:指定mysql环境变量,root用户的密码为redhat
-d mysql:5.6:后台运行mysql容器,版本是5.6
# 在容器外部访问容器内MySQL数据库
# 1.先在外部安装MySQL数据库客户端,红帽7及以后的版本叫mariadb
[root@CentOS ~]# yum list | grep mariadb # 查询MySQL数据库客户端
mariadb.x86_64 3:10.3.27-3.module_el8.3.0+599+c587b2e7 AppStream
[root@CentOS ~]# yum -y install mariadb.x86_64 # 安装MySQL数据库客户端
# 进入容器内的数据库
[root@CentOS ~]# mysql -u root -p -h 192.168.8.68 -P 3366
Enter password:
# 在容器内直接进入数据库
root@49bebcc8330f:/# mysql -u root -p
Enter password:
-h:用来指定主机名
-P:用来指定数据库端口,默认是3306
# 查看数据库日志;貌似没什么用
[root@CentOS ~]# docker logs -f -n 10 49bebcc8330f
# 容器为任务而生,没有任务的容器不应该运行;command记录了容器的后台脚本,该脚本能保证容器一直在运行
[root@CentOS ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
49bebcc8330f mysql:5.7 "docker-entrypoint.s…" 2 hours ago Exited (0) About an hour ago mysql
51de133091a6 httpd "httpd-foreground" 47 hours ago Up 13 minutes 0.0.0.0:2020->80/tcp, :::2020->80/tcp web02
7a849e10ca1e nginx "/docker-entrypoint.…" 47 hours ago Exited (0) 2 hours ago web01
# 查看脚本内容
root@51de133091a6:~# cat /usr/local/bin/httpd-foreground
#!/bin/sh
set -e
# Apache gets grumpy about PID files pre-existing
rm -f /usr/local/apache2/logs/httpd.pid
exec httpd -DFOREGROUND "$@"
# 后面加上一个&符号代表在后台运行,此时前台不会被占用
[root@CentOS ~]# rm -f index.html &
[3] 124212
# $()代表引用命令执行的结果
# 结束所有的容器:docker stop $(docker ps -aq)
# 删除所有的容器:docker rm -f $(docker ps -aq)
[root@CentOS ~]# docker stop $(docker ps -aq)
49bebcc8330f
51de133091a6
7a849e10ca1e
容器不适合的业务场景
容器用到两种技术
为什么要限制资源
内存资源限制
[root@CentOS ~]# docker run -it -m 200M --memory-swap 300M --name web03 httpd
[root@CentOS ~]# docker run -it -m 200M --name test02 --memory-swappiness 50 --memory-swap 300M progrium/stress --vm 1 --vm-bytes 280M
progrium/stress:一个压力测试的镜像
-m:允许分配的内存大小
–memory-swap:允许分配的内存和swap的总大小
–memory-swapiness:控制内存与swap置换的比例,取值范围0~100,0代表不使用swap只使用内存,100代表不使用内存,只使用swap
–vm:设置内存工作线程数
–vm-bytes:设置单个内存工作线程使用的内存大小
# 有做资源限制的容器
[root@CentOS ~]# docker inspect 96bca9086f5b | grep -i memory
"Memory": 209715200,
"MemoryReservation": 0,
"MemorySwap": 314572800,
"MemorySwappiness": 0,
# 未作内存限制的容器
[root@CentOS ~]# docker inspect 51de133091a6 | grep -i memory
"Memory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
[root@CentOS ~]# docker run --name test03 -c 1024 progrium/stress --cpu 1
-c:设置容器使用cpu的权重
–cpu:设置cpu工作线程的数量
[root@CentOS ~]# docker run -it --device-write-bps /dev/sda:30MB centos:7
–device-read-bps:限制读某个设备的bps
–device-write-bps:限制写某个设备的bps
–device-read-iops:限制某个设备的iops
–device-write-iops:限制写某个设备的iops
Linux文件系统简介
Docker文件系统简介
Docker保存位置
# 查看docker保存在本机的位置
[root@CentOS ~]# docker inspect busybox
···
"Data": {
"LowerDir": "/var/lib/docker/overlay2/bf24eae4ae40c2a227bdcb7c2d90277406a71665b707939ed646e3900118c48d-init/diff:/var/lib/docker/overlay2/776eb1ee4815e68c13db630b07c9fd68b5e27e3fcd863d4b709c6b55617c6505/diff",
"MergedDir": "/var/lib/docker/overlay2/bf24eae4ae40c2a227bdcb7c2d90277406a71665b707939ed646e3900118c48d/merged",
"UpperDir": "/var/lib/docker/overlay2/bf24eae4ae40c2a227bdcb7c2d90277406a71665b707939ed646e3900118c48d/diff",
"WorkDir": "/var/lib/docker/overlay2/bf24eae4ae40c2a227bdcb7c2d90277406a71665b707939ed646e3900118c48d/work"
},
···
LowerDir:镜像文件所在位置
UpperDir:修改文件保存的位置,把要修改的文件从镜像里面复制出来保存在这里
MergedDir:看到的内容,指针指向LowerDir和UpperDir(有改动的话),实际不占空间
WorkDir:对用户不可见,底层工作时的临时目录
2023-06-17-AM 01:14:00
6505/diff",
“MergedDir”: “/var/lib/docker/overlay2/bf24eae4ae40c2a227bdcb7c2d90277406a71665b707939ed646e3900118c48d/merged”,
“UpperDir”: “/var/lib/docker/overlay2/bf24eae4ae40c2a227bdcb7c2d90277406a71665b707939ed646e3900118c48d/diff”,
“WorkDir”: “/var/lib/docker/overlay2/bf24eae4ae40c2a227bdcb7c2d90277406a71665b707939ed646e3900118c48d/work”
},
···
> LowerDir:镜像文件所在位置
>
> UpperDir:修改文件保存的位置,把要修改的文件从镜像里面复制出来保存在这里
>
> MergedDir:看到的内容,指针指向LowerDir和UpperDir(有改动的话),实际不占空间
>
> WorkDir:对用户不可见,底层工作时的临时目录
2023-06-17-AM 01:14:00
### Docker网络管理
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。