- 基于 dockerfile,实现分层构建的 nginx 业务镜像
- 基于 docker 实现对容器的 CPU 和内存的资源限制
- 部署 http 协议的 harbor 镜像仓库
- 扩展作业∶
- 掌握 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
容器可以正常访问
?
|