极客时间运维进阶训练营第二周作业

  1. 基于 dockerfile,实现分层构建的 nginx 业务镜像
  2. 基于 docker 实现对容器的 CPU 和内存的资源限制
  3. 部署 http 协议的 harbor 镜像仓库
  4. 扩展作业∶
    • 掌握 containerd 的安装 A
    • 基于 nerdctl 拉取镜像和创建容器 A

1.基于 dockerfile,实现分层构建的 nginx 业务镜像 

创建业务镜像目录
mkdir /data/web -p
cd /data/web

将镜像源替换成国内阿里镜像源,保存到dockerfile相同目录
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

下载nginx镜像
wget https://nginx.org/download/nginx-1.22.1.tar.gz

制作dockerfile
FROM ubuntu:22.04  #基础镜像
ADD sources.list /etc/apt/sources.list #替换阿里镜像源
RUN apt-get update && apt-get install -y iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common tree libssl-dev libpcre3 libpcre3-dev openssh-server iotop lrzsz openssl zlib1g-dev zlib1g-dev unzip zip make gcc #安装系统常用软件包
ADD nginx-1.22.1.tar.gz /usr/local/src/ #拷贝并解压nginx源码包
RUN cd /usr/local/src/nginx-1.22.1 && ./configure --prefix=/apps/nginx && make && make install && ln -sv /apps/nginx/sbin/nginx /usr/bin #编译预、编译、安装
RUN groupadd -g 2210 nginx && useradd -g nginx -s /usr/sbin/nologin -u 2210 nginx && chown -R nginx.nginx /apps/nginx #创建组用户并授权
EXPOSE 80 
WORKDIR /apps/nginx/html/ #切换容器工作目录
RUN mv index.html index.html.bak #替换默认首页文件
ADD index.html /apps/nginx/html/
CMD ["nginx","-g","daemon off;"] #容器启动命令,关闭nginx后台启动

制作过程中报错
Temporary failure resolving 'security.ubuntu.com'

在daemon.json配置文件中添加DNS地址,重启docker
{
  "graph": "/var/lib/docker",
  "storage-driver": "overlay2",
  "insecure-registries": ["harbor.magedu.com","harbor.myserver.com","172.31.7.105"],
  "registry-mirrors": ["https://9916w1ow.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "live-restore": false,
  "log-opts": {
      "max-file": "5",
      "max-size": "100m"
  },
  "dns": ["8.8.8.8","114.114.114.114"]
}

创建构建镜像脚本
vim build-command.sh
#!/bin/bash
TAG=$1
docker build -t ${TAG}

构建nginx业务镜像
bash build-command.sh sean/nginx:v1

使用构建好的镜像启动容器
docker run -itd --name=web01 -p 80:80 sean/nginx:v1

访问宿主机IP地址确认结果

 基于 docker 实现对容器的 CPU 和内存的资源限制

容器资源限制下载压测工具

docker pull lorel/docker-stress-ng

不加任何限制的资源使用情况

docker run -it --rm --name sean-c1 lorel/docker-stress-ng --vm 2 --vm-bytes 256M

通过docker stats 查看容器资源使用情况

 通过-m 参数限制内存256M

docker run -it --rm -m 256m --name sean-c2 lorel/docker-stress-ng --vm 2 --vm-bytes 256M

观察内存不会超过限制的容量

 限制CPU

docker run -it --rm --name sean-c1 lorel/docker-stress-ng --cpu 4 --vm 4

未做限制的情况下。使用慢4核CPU

 通过--cpus 限制CPU使用核数

docker run -it --rm --name sean-c2 --cpus 2 lorel/docker-stress-ng --cpu 4 --vm 4

部署 http 协议的 harbor 镜像仓库

安装docker
tar -xvf docker-20.10.19-binary-install.tar.gz
sh docker-install.sh

安装harbor
mkdir /apps
cd /apps
tar -xvf harbor-offline-installer-v2.6.1.tgz
cd /harbor
cp harbor.yml.tmpl harbor.yml

修改配置文件,添加hostname,用户密码注释掉https配置
vim harbor.yml
'''
hostname: harbor.sean.com
harbor_admin_password: 12345678
'''

执行安装脚本
bash install.sh

配置harbor仓库,docker主机,宿主机域名解析
vim /etc/hosts
宿主机修改C:\Windows\System32\drivers\etc\hosts
"10.0.0.100 harbor.sean.com"


配置仓库信任
vim /etc/docker/daemon.json
"insecure-registries": ["harbor.sean.com","harbor.myserver.com","172.31.7.105"]

在宿主机访问域名登录

 创建项目,访问级别设置公开

 在docker主机登录harbor仓库

 修改镜像标签

docker tag sean/nginx:v1 harbor.sean.com/myimages/nginx:v1

上传镜像

docker push harbor.sean.com/myimages/nginx:v1

harbor中可以看到该镜像已上传

 其他主机可以正常下载该镜像

 安装Containerd

安装相关软件
apt update
apt -y install apt-transport-https ca-certificates curl software-properties-common

安装证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

添加安装源
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

查看支持安装的版本
apt-cache madison containerd-io


更新并安装Containerd
apt update
apt install contianerd.io=1.6.8-1

安装后确认版本信息
root@ubuntu2004:~# containerd --version
containerd containerd.io 1.6.8 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6

修改containerd配置文件文件
containerd config defalut > /etc/containerd/config.toml
6 sandbox_image = "registry.aliyuncs.com/google_containers/pasue:3.7"
153[plugins."io.containerd.grpc.v1.cri".registry.mirrors.]
154[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
155      endpoint=["https://73aepdip.mirror.aliyuncs.com"]

重启containerd服务
systemctl restart containerd && systemctl enable containerd

nerdctl拉取镜像、创建容器

下载nerdctl安装包
wget https://github.com/containerd/nerdctl/releases/download/v0.23.0/nerdctl-0.23.0-linux-amd64.tar.g

解压到/usr/bin目录
tar xvf nerdctl-0.23.0-linux-amd64.tar.gz -C /usr/bin/

安装CNI
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
tar xvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/

启动容器
nerdctl run -d -p 80:80 --name=nginx01 nginx:latest

容器可以正常访问

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值