0
点赞
收藏
分享

微信扫一扫

HDFS性能优化高频面试题及答案

心存浪漫 2024-09-27 阅读 1

实验部分

1、docker的部署过程

配置软件仓库

[root@docker-node1 etc]# cd /etc/yum.repos.d/

[root@docker-node1 yum.repos.d]# ls redhat.repo rhel9.repo

[root@docker-node1 yum.repos.d]# vim docker.repo

[root@docker-node1 yum.repos.d]# cd

[root@docker-node1 ~]# yum install docker-ce -y

安装docker-ce并启动服务

[root@docker-node1 ~]# vim /usr/lib/systemd/system/docker.service

[root@docker-node1 ~]# systemctl enable --now docker

Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.

[root@docker-node1 ~]# docker info

启动容器

[root@docker-node1 ~]# docker run -d --name test --rm -p 80:8080 timinglee/mari o:latest 1b4e3a695d37c76a4e1bdcb9a341971f0c893350e2b46b4861605f02b55a72f5

2、Docker的基本操作

查看镜像

[root@docker-node1 ~]# docker image inspect nginx:1.23

导出镜像

#保存镜像

[root@Docker-node1 ~]# docker image save nginx:latest -o nginx-latest.tar.gz

[root@Docker-node1 ~]# docker image save nginx:latest nginx:1.26-alpine -o nginx.tag.gz

#保存所有镜像

[root@Docker-node1 ~]# docker save docker images | awk 'NR>1{print $1":"$2}' - o images.tar.gz

[root@Docker-node1 ~]# docker ps #查看当前运行容器

[root@Docker-node1 ~]# docker ps -a #查看所有容器

[root@Docker-node1 ~]# docker inspect busybox #查看容器运行的详细信息

[root@Docker-node1 ~]# docker stop busybox #停止容器

[root@Docker-node1 ~]# docker kill busybox #杀死容器,可以使用信号

[root@Docker-node1 ~]# docker start busybox #开启停止的容器

[root@Docker-node1 ~]# docker rm centos7 #删除停止的容器

[root@Docker-node1 ~]# docker rm -f busybox #删除运行的容器

[root@Docker-node1 ~]# docker container prune -f #删除所有停止的容器

容器内容提交

复制

[root@docker-node1 ~]# docker cp dbbfile exam:/dbbfile

Successfully copied 1.54kB to exam:/dbbfile

查看日志

3、构建参数使用

[root@docker-node1 ~]# mkdir docker/

[root@docker-node1 ~]# cd docker/

[root@docker-node1 docker]# touch leefile

[root@docker-node1 docker]# vim Dockerfile

[root@docker-node1 docker]# touch leefile{1..3}

[root@docker-node1 docker]# tar zcf leefile.gz leefile

[root@docker-node1 docker]# vim Dockerfile

4、docker镜像构建

配置centos7环境

[root@docker-node1 docker]# dnf install httpd -y

[root@docker-node1 docker]# vim /etc/httpd/conf/httpd.conf

[root@docker-node1 docker]# systemctl start httpd

[root@docker-node1 docker]# mkdir /var/www/html/rhel7.9

[root@docker-node1 docker]# mount /dev/sr1 /var/www/html/rhel7.9/

mount: /var/www/html/rhel7.9: WARNING: source write-protected, mounted read-only.

[root@docker-node1 ~]# docker inspect centos

[root@docker-node1 ~]# docker commit -m "add repo" centos centos:repo sha256:d3405633300686ecee84f9ff8e373f30655fde27fd7d18e2fb7b9fcb979302c1

[root@1a93258b3d66 ~]# exit

exit

[root@docker-node1 docker]# docker rm centos centos

建立构建目录,编写构建文件

[root@docker-node1 docker]# vim Dockerfile

通过dockerfile生成镜像

测试镜像可用性

[root@docker-node1 docker]# docker run -d --name checkimage nginx 808059cabaf8fe85190327e6d47aaab1154a8e1167a90106d196a1857940ec26

5、镜像优化

方法1.缩减镜像层

[root@docker-node1 docker]# vim Dockerfile

方法2.多阶段构建

[root@docker-node1 docker]# vim Dockerfile

方法3.使用最精简镜像

[root@docker-node1 docker]# vim Dockerfile

6、docker简单私有仓库的搭建

[root@docker-node1 ~]# docker run -d -p 5000:5000 --restart=always registry 402feafcb10ecef67534fc3bc6c35a1825031ad1fa3c4fe18a186869107b6878

[root@docker-node1 ~]# docker tag nginx:v4 172.25.254.10:5000/nginx:v4

[root@docker-node1 ~]# vim /etc/docker/daemon.json

[root@docker-node1 ~]# systemctl start docker

[root@docker-node1 ~]# docker inspect ecstatic_lamport

7、docker仓库数据传输加密

#生成认证key和证书

[root@docker-node1 ~]# vim /etc/docker/daemon.json  删除

[root@docker-node1 ~]# systemctl restart docker

[root@docker-node1 ~]# mkdir certs

[root@docker-node1 ~]# vim /etc/hosts

[root@docker-node1 ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/timinglee.org.key -addext "subjectAltName = DNS:reg.timinglee.org" -x509 -days 365 -out certs/timinglee.org.crt

启动registry仓库

[root@docker-node1 ~]# mkdir -p /etc/docker/certs.d/reg.timinglee.org -p

[root@docker-node1 certs]# cp /root/certs/timinglee.org.crt /etc/docker/certs.d/reg.timinglee.org/ca.crt

[root@docker-node1 ~]# ls /etc/docker/certs.d/reg.timinglee.org/ca.crt /etc/docker/certs.d/reg.timinglee.org/ca.crt

[root@docker-node1 ~]# curl -k https://reg.timinglee.org/v2/_catalog {"repositories":["nginx"]}

8、docker仓库用户认证

[root@docker-node1 ~]# yum install httpd-tools -y

[root@docker-node1 ~]# mkdir auth

[root@docker-node1 ~]# htpasswd -Bc auth/.htpasswd lee

New password:

Re-type new password:

Adding password for user lee

[root@docker-node1 ~]# cat auth/.htpasswd lee:$2y$05$hKXaGAu6XKmGmnJg080JM.6MBSTd4N8dWsRb6BYzvHmYBdI1rxR2G [root@docker-node1 ~]# htpasswd -B auth/.htpasswd hyl

New password:

Re-type new password:

Adding password for user hyl

[root@docker-node1 ~]# cat auth/.htpasswd lee:$2y$05$hKXaGAu6XKmGmnJg080JM.6MBSTd4N8dWsRb6BYzvHmYBdI1rxR2G hyl:$2y$05$JZ33JbqB.AubdM26dpNjIuBd/7TXjuvFHCwuKbiB4WADDuUWS.

[root@docker-node1 ~]# docker run -d -p 443:443 --restart=always -v /root/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/timinglee.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/timinglee.org.key -v /root/auth:/auth -e REGISTRY_AUTH=htpasswd -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/.htpasswd registry 02085041efd1de26bd3916f012662275b20ce8191c8326b65fa25ac2cc20ba71

[root@docker-node1 ~]# curl -k https://reg.timinglee.org/v2/_catalog -u hyl:hyl {"repositories":["nginx"]}

9、docker-harbor仓库的搭建

[root@docker harbor]# vim harbor.yml

[root@docker-node1 harbor]# ll /data/

总用量 0 drwxr-xr-x 3 root root 18 9月 22 17:56 secret

[root@docker-node1 harbor]# cp /root/certs/ /data/ -r

[root@docker-node1 harbor]# ls /data/

certs secret

[root@docker-node1 harbor]# ls 

common config

[root@docker-node1 harbor]# ls /data/certs/

timinglee.org.crt timinglee.org.key

[root@docker-node1 harbor]# ./install.sh --with-chartmuseum

#管理harbor的容器

本地解析

C:\Windows\System32\drivers\etc\hosts

测试

#未登录上传失败

登录

[root@docker-node1 harbor]# docker logout reg.timinglee.org

Removing login credentials for reg.timinglee.org

[root@docker-node1 harbor]# docker login reg.timinglee.org
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores
​
Login Succeeded

#私有仓库作为默认下载仓库

[root@docker-node1 reg.timinglee.org]# cp /data/certs/timinglee.org.crt ^C

[root@docker-node1 reg.timinglee.org]# cd ..

[root@docker-node1 certs.d]# ls reg.timinglee.org

[root@docker-node1 certs.d]# cd ..

[root@docker-node1 docker]# ls certs.d daemon.json

[root@docker-node1 docker]# vim daemon.json

[root@docker-node1 docker]# systemctl restart docker

[root@docker-node1 docker]# docker info

[root@docker-node1 harbor]# docker pull timinglee/nginx:v4

v4: Pulling from timinglee/nginx Digest:

sha256:e7b51e47f6e4e415ef6f1ea2435aaa6302173858e4e46dc663e4b929608bdeb8

Status: Downloaded newer image for timinglee/nginx:v4

docker.io/timinglee/nginx:v4

#若出现问题

[root@docker-node1 docker]# docker pull timinglee/nginx:v4

Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded ( Client.Timeout exceeded while awaiting headers)

10、docker的webUI工具

#访问

[root@docker-node1 1panel-v1.10.13-lts-linux-amd64]# 1pctl user-info

面板地址: http://$LOCAL_IP:4444/c2c56e339d

面板用户: 23e19dd318 面板密码: !@#$%*_,

提示:修改密码可执行命令:1pctl update password

11.docker原生网络及自定义桥接网络

docker原生bridge网路

[root@docker-node1 ~]# grubby --update-kernel ALL --args iptables=true

[root@docker-node1 ~]# reboot

[root@docker-node1 ~]# cd 1panel-v1.10.13-lts-linux-amd64/

[root@docker-node1 1panel-v1.10.13-lts-linux-amd64]# ls 1panel 1panel.service

1pctl docker install.log install.sh LICENSE README.md

#恢复默认网络

不使用iptables

[root@docker-node1 harbor]# nft list ruleset

docker原生网络host---直连网络

[root@docker-node1 harbor]# docker rm webserver webserver

docker原生网络none

docker的自定义网络

自定义桥接网络---net

原生的桥接网络当中没有dns插件

##webserve、test1都退出

[root@docker-node1 ~]# docker network create mynet1 -d bridge cb9b2d5c2690cc8214a6ee32c813d7593614f0c79c5ba3758ed79523b45f95de

[root@docker-node1 ~]# docker network ls

NETWORK ID NAME DRIVER SCOPE

fe4b1832ecca bridge bridge local

81e88a23fb22 host host local

cb9b2d5c2690 mynet1 bridge local

0ca32642ad25 none null local

12、docker容器间的网络通信

[root@docker-node1 ~]# docker network create mynet2 -d bridge fba196630d53dc8efd1f8b4bebadaafcbc4ae2bffad2028a206a3cf3629e6285

[root@docker-node1 ~]# iptables -nL

[root@docker-node1 ~]# docker rm test1

test1

[root@docker-node1 ~]# docker rm webserver

webserver

/ # ping webserver ping: bad address 'webserver'

##两个容器用不同的站

[root@docker-node1 ~]# docker network connect mynet1 webserver

###两个容器用同一个站

[root@docker-node1 ~]# docker rm test1

test1

[root@docker-node1 ~]# docker rm webserver

webserver

###走回环接口

[root@docker-node1 ~]# docker rm test1

test1

[root@docker-node1 ~]# docker rm webserver

webserver

[root@docker-node1 ~]# docker run -it --name webserver --network container:test1 centos:7

####mysql、php

[root@docker-node1 ~]# docker load -i mysql-5.7.tar.gz

[root@docker-node1 ~]# docker load -i phpmyadmin-latest.tar.gz

##暴露端口

13、docker中容器内外网访问原理

内网访问外网

[root@docker-node1 ~]# docker rm -f mysq

l mysql

[root@docker-node1 ~]# docker rm -f mysqladmin

mysqladmin

[root@docker-node1 ~]# docker run -d --name test --rm nginx -p80:80 58183c0e503d65cf585a405df66412d67d9ea5825957f9d3101d7aff7992c295

[root@docker-node1 ~]# ps ax | grep docker-proxy 12095 pts/1 R+ 0:00 grep --color=auto docker-proxy

rhel9----默认nft

外网访问内网----haproxy、火墙策略双保险

[root@docker-node1 ~]# docker inspect test

[root@docker-node1 ~]# ps ax

14、docker中容器的跨主机通

####实验环境 双主机双网卡

##docker-node2配置docker环境

##安装docker包

[root@docker-node2 ~]# ls
docker.tar.gz
[root@docker-node2 ~]# tar zxf docker.tar.gz
[root@docker-node2 ~]# ls
containerd.io-1.7.20-3.1.el9.x86_64.rpm
docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm
docker-ce-27.1.2-1.el9.x86_64.rpm
docker-ce-cli-27.1.2-1.el9.x86_64.rpm
docker-ce-rootless-extras-27.1.2-1.el9.x86_64.rpm
docker-compose-plugin-2.29.1-1.el9.x86_64.rpm
docker.tar.gz
[root@docker-node2 ~]# dnf install *.rpm -y

##启动docker

[root@docker-node2 ~]# systemctl start docker
[root@docker-node2 ~]# docker info

###打开网卡混杂模式

eth1这款网卡在vmware中要设定为仅主机模式

[root@docker-node1 ~]# ip link set eth1 promisc on
[root@docker-node1 ~]# ip link set up eth1
[root@docker-node1 ~]# nmcli networking
enabled

 15、docker数据卷简介及bindmount模式

默认数据卷

[root@docker-node1 ~]# cd /var/lib/docker/
[root@docker-node1 docker]# ls
buildkit    engine-id  network   plugins   swarm  volumes
containers  image      overlay2  runtimes  tmp
[root@docker-node1 docker]#  cd volumes/

bind mount 数据卷------限制移植性

16、docker数据卷的managed模式

[root@docker-node1 ~]# docker run -d --rm --name mysql -e MYSQL_ROOT_PASSWORD=lee mysql:5.7
ed10fa495167c7bc8730a357cdcefc5d35925006f4d7c144f18e865f4b2854af
[root@docker-node1 ~]# docker ps
CONTAINER ID   IMAGE       COMMAND        CREATED      STATUS     PORTS            NAMES
ed10fa495167   mysql:5.7   "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   3306/tcp, 33060/tcp   mysql
[root@docker-node1 ~]# docker inspect mysql

清理未使用的 Docker 数据卷

[root@docker-node1 volumes]# docker volume create  mysqldate
mysqldate
[root@docker-node1 volumes]# ll /var/lib/docker/volumes/
总用量 32
drwx-----x 3 root root     19  9月 22 17:19 95bb492c95b5461dcffc96022974557c932cea36f721d7505fa                                          3b19a4e37726a
brw------- 1 root root 253, 0  9月 22 19:09 backingFsBlockDev
drwx-----x 3 root root     19  9月 23 17:24 d6cc0eddc22aaf80c5198e791b005cbee008e23abdc758374d9                                          d2d579c935cb1
-rw------- 1 root root  65536  9月 23 17:38 metadata.db
drwx-----x 3 root root     19  9月 23 17:38 mysqldate

[root@docker-node1 volumes]# docker rm -f mysql
mysql
[root@docker-node1 volumes]# docker run -d --rm --name mysql -e MYSQL_ROOT_PASSWORD=lee -v mysqldate:/var/lib/mysql mysql:5.7
e73e7fe026a57c57153e8db946685cef27d993e1eeb7132620d3e7cd5354e8ac
[root@docker-node1 volumes]# docker inspect mysql

###保持持久化

mysql停止后数据还在

 ###删除数据卷

bind mount 数据卷和 docker managed 数据卷的对

17、docker数据的备份及迁移

备份数据卷

数据恢复

18、docker中容器的安全加固思路

Docker 的安全优化   docker---安全隔离   虚拟化---完全隔离

[root@docker-node2 ~]# mount -t cgroup
[root@docker-node2 ~]# mount -t cgroup2
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recur siveprot)

隔离机制 

查看id

[root@docker-node1 ~]# docker inspect test | grep Pid
            "Pid": 2337,
            "PidMode": "",
            "PidsLimit": null,
[root@docker-node1 31a23dcba6e722abfa35b88dcc4ead9bc5de6e7ee506c23c4900a01d1dc1a8ca]#  cat tasks
2337
2382
2383
2384
2385

19、docker中对容器资源限制的原理及对cpu资源限制的方法

限制cpu的使用量

[root@docker-node1 ~]# docker run -it --rm --name test \
> --cpu-period 100000 \
> --cpu-quota 20000 ubuntu

root@fec0c26dc0fa:/#  dd if=/dev/zero of=/dev/null &
[1] 9
root@fec0c26dc0fa:/# top

限制cpu的优先级

[root@docker-node1 cpu]# echo 0 > /sys/devices/system/cpu/cpu1/online
[root@docker-node1 cpu]# echo 0 > /sys/devices/system/cpu/cpu2/online
[root@docker-node1 cpu]# echo 0 > /sys/devices/system/cpu/cpu3/online

开启容器与其争抢

20、docker中对于内存使用的限制

 #####红帽9软件仓库解决办法

安装libcgroup

[root@docker-node1 ~]# dd if=/dev/zero of=/dev/shm/bigfile bs=1M count=200
记录了200+0 的读入
记录了200+0 的写出
209715200字节(210 MB,200 MiB)已复制,0.582844 s,360 MB/s
 

建立x1控制器

[root@docker-node1 x1]# echo 209715200 > memory.memsw.limit_in_bytes

[root@docker-node1 x1]# docker run -d  --name test   --memory 200M --memory-swap 200M nginx
af96d658fd6e1685cf9d8935022c7f3f9eef199bfc5712e0031ff4d4b72d928e
[root@docker-node1 x1]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS     NAMES
af96d658fd6e   nginx     "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   80/tcp    test

21、docker中对于磁盘io速录限制

###写数据位置

####运行速率

####限速

22.docker容器的信息隔离

内存没有隔离开

###安装lxcfs  

####运行lxcfs并解决容器隔离性 

[root@docker-node1 mnt]# lxcfs /var/lib/lxcfs &

23.docker容器特权

使用容器时一些资源不能被修改

#####添加容器特权

 容器特权的白名单

24.docker-compose命令详解

[root@docker-node1 ~]# vim ~/.vimrc

[root@docker-node1 ~]# mkdir test
[root@docker-node1 ~]# cd test/
[root@docker-node1 test]# ls
[root@docker-node1 test]# vim docker-compose.yml

启动配置文件中定义的所有服务

 

查看日志

构建和重新构建服务

25、docker容器编排中servers用法

[root@docker-node1 test]# vim docker-compose.yml 

 端口映射(ports

[root@docker-node1 test]# vim docker-compose.yml 

[root@docker-node1 test]# docker compose  down
[+] Running 2/2
 ✔ Container webserver   Removed                                                                                  0.2s
 ✔ Network test_default  Removed                                                                                    0.3s

环境变量(environment

 [root@docker-node1 test]# vim docker-compose.yml 

[root@docker-node1 test]# docker compose up -d
[+] Running 2/2
 ✔ Network test_default    Created                                                                                0.3s
 ✔ Container test-test1-1  Started                                                                                0.3s
[root@docker-node1 test]# docker ps
CONTAINER ID   IMAGE       COMMAND      CREATED    STATUS         PORT          NAMES
a277a1238c73   mysql:5.7   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   3306/tcp, 33060/tcp   test-test1-1
[root@docker-node1 test]# docker inspect test-test1-1

[root@docker-node1 test]# docker compose down
[+] Running 2/2
 ✔ Container test-test1-1  Removed                                                1.1s
 ✔ Network test_default    Removed                                                0.2s

存储卷(volumes

 [root@docker-node1 test]# vim docker-compose.yml 


[root@docker-node1 test]# docker inspect test-test1-1

[root@docker-node1 test]# docker compose down
[+] Running 2/2
 ✔ Container test-test1-1  Removed                                                        1.6s
 ✔ Network test_default    Removed                                                        0.2s

网络(networks

默认建立

 [root@docker-node1 test]# vim docker-compose.yml

#使用本机自带bridge网络

 [root@docker-node1 test]# vim docker-compose.yml

none

 [root@docker-node1 test]# vim docker-compose.yml

自定义

 [root@docker-node1 test]# vim docker-compose.yml

26、docker-compose 中网络设定

 [root@docker-node1 test]# vim docker-compose.yml

external: true # 不建立新的网络而使用外部资源

name: bridge # 指定外部资源网络名字

自建网络

[root@docker-node1 test]# vim docker-compose.yml

指定ip

[root@docker-node1 test]# vim docker-compose.yml

27、docker-compose中数据卷设定------持久化

[root@docker-node1 test]# vim docker-compose.yml 

28、dockercompose企业示例

[root@docker-node1 ~]#  mkdir /var/lib/docker/volumes/conf
[root@docker-node1 ~]# dnf install haproxy -y --downloadonly --downloaddir=/mnt
[root@docker-node1 mnt]# cd etc/
[root@docker-node1 etc]# ls
haproxy  logrotate.d  sysconfig
[root@docker-node1 etc]# cd haproxy/
[root@docker-node1 haproxy]# ls
conf.d  haproxy.cfg
[root@docker-node1 haproxy]# cp haproxy.cfg /var/lib/docker/volumes/conf/
[root@docker-node1 haproxy]# cd /var/lib/docker/volumes/conf/
[root@docker-node1 conf]# ls
haproxy.cfg
[root@docker-node1 conf]# vim haproxy.cfg
[root@docker-node1 ~]# docker images | grep haproxy
haproxy                             2.3       7ecd3fda00f4   2 years ago     99.4MB
[root@docker-node1 test]# vim docker-compose.yml

[root@docker-node1 test]# echo webserver1 > /var/lib/docker/volumes/data_web1/_data/index.html
[root@docker-node1 test]# echo webserver2 > /var/lib/docker/volumes/data_web2/_data/index.html

举报

相关推荐

0 条评论