写点什么

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

作者:LiaoWD
  • 2022-11-08
    广东
  • 本文字数:4552 字

    阅读完需:约 15 分钟

本周作业

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

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

  3. 部署 http 协议的 harbor 镜像仓库

  4. 扩展作业∶

  • 掌握 containerd 的安装 A

  • 基于 nerdctl 拉取镜像和创建容器 A


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

①创建目录和 Dockerfile 文件

mkdir nginxvim nginx/Dockerfile #基础镜像(centos需小写)FROM centos:7#用户信息MAINTAINER THIS IS NGINX IMAGE添加环境包RUN yum  -y updateRUN yum install -y pcre-devel zlib-devel gcc gcc-c++ makeRUN useradd -M -s /sbin/nologin nginx#解压nginx软件包ADD nginx-1.21.6.tar.gz /usr/local/src#指定工作目录(相当于cd)WORKDIR /usr/local/srcWORkDIR nginx-1.21.6RUN ./configure \--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-http_stub_status_module && make && make installENV PATH /usr/local/nginx/sbin:$PATH#指定httpd端口EXPOSE 80RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.confCMD nginx
复制代码

②上传 nginx-1.21.6.tar.gz 至/root/nginx/目录下


③基于 Dockerfile 文件构建镜像命令

docker build -f Dockerfile -t nginx:latest .
复制代码

docker build :基于 dockerfile 构建镜像

-f :指定 dockerfile 文件(默认不写的话指的是当前目录)

-t : (tag)打标签——》nginx:latest

. :指的是构建镜像时的上下文环境,简单理解:指的当前目录环境中的文件


④运行容器

docker run -d -P nginx:latest
复制代码

-d:守护进程的方式运行

-P: 开放随机端口(49153–65535)

##注意后面不要加/bin/bash 因为 Dockerfile 文件里已经有 CMD 指令,

添加/bin/bash 会和 CMD 冲突,会报错


⑤验证: 浏览器访问


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

在使用docker run的时候可以直接设置资源限制


内存

假如我们希望容器的内存最多只使用 512M。 我们通过 --memory 或 -m 参数设置内存限制。 参数后面跟一个数字,单位可以是 b、 k、 m 或者 g, 最小值是 4M。

docker run -m 512m nginx
复制代码

我们也可以设置一个保留内存(memory reservation)。 这个值要小于--memory 值。当 docker 检测到宿主机上内存较少的或存在内存竞争(memory contention)时才会启用该限制。但是因为是软限制,所以无法保证 docker 容器不超出这个限制。

docker run -m 512m --memory-reservation=256m nginx
复制代码

CPU

默认情况下,CPU 的算力是不受限制的。我们可以通过 cpus 参数设置 CPU 限制。例如,我们限制容器最多使用两个 CPU:


docker run --cpus=2 nginx 
复制代码

我们也可以指定 CPU 分配的优先级。默认优先级是 1024, 更高的数值的优先级更高:

docker run --cpus=2 --cpu-shares=2000 nginx
复制代码


部署 http 协议的 harbor 镜像仓库


Harbor 环境准备:

docker 容器应用的开发和运行离不开可靠的镜像管理,虽然 Docker 官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的 Registry 也是非常必要的。Harbor 是由 VMware 公司开源的企业级的 Docker Registry 管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。

1. docker 安装:docker 安装与卸载

2. Docker-compose 安装:从 github 上下载它的二进制包进行安装:(https://github.com/docker/compose/releases)注意:要安装其他版本的 Compose,请替换 v2.3.4。

sudo curl -L "https://github.com/docker/compose/releases/download/v2.3.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
复制代码


将可执行权限应用于二进制文件:

sudo chmod +x /usr/local/bin/docker-compose
复制代码

 创建软链:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
复制代码

  测试是否安装成功:

docker-compose --version
复制代码


Harbor 服务搭建

1.本地下载 Harbor 安装文件、上传至服务器、解压文件、修改配置。从 【github harbor官网 release】 页面下载指定版本的安装包,拖到服务器/root/目录下进行解压:

tar -zxf harbor-offline-installer-v2.2.2-rc1.tgz
cd harbor
mv harbor.yml.tmpl harbor.yml
vim harbor.yml
复制代码


2. 开始安装 harbor:修改完配置文件后,在的当前目录执行:

 ./install.sh
复制代码

harbor 服务就会根据当期目录下的 docker-compose.yml 开始下载依赖的镜像,检测并按照顺序依次启动各个服务。


3. 安装完成查看状态:

docker-compose ps
复制代码


 4.harbor 的停止与启动

cd harbordocker-compose down   #停止docker-compose up -d  #启动
复制代码

5.访问 harbor 首页:访问刚设置的 hostname 即可,默认是 80 端口,如果端口占用,可以去修改 docker-compose.yml 文件中,对应服务的端口映射。


 登录密码:admin , 登录密码:Harbor12345。


通过 http 请求访问 harbor

如果安装 harbor 是通过 http 请求访问 harnor 镜像仓库,则 必须在 /etc/docker/daemon.json 增加字段 --insecure-registry,填写 如下:

{  "insecure-registries": ["http://192.168.7.214:80"]}
复制代码

重启 docker

systemctl restart docker
复制代码

 停止 harbor

docker-compose down -v
复制代码

 重启 harbor

docker-compose up -d
复制代码

docker push 镜像:


登录镜像仓库: 

[root@centos7 ~]# docker login 192.168.7.214:80Username: adminPassword: WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. Seehttps://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
复制代码

推送 harbor 镜像的命令格式如下:

docker push 192.168.7.214:80/library/REPOSITORY[:TAG]
复制代码

 看命令就知道,docker push 后面的其实就是打标记的时候标记。

命令如下:

[root@centos7 ~]# docker tag centos:latest 192.168.7.214:80/library/centos:latest[root@centos7 ~]# docker push 192.168.7.214:80/library/nginx:latestThe push refers to repository [192.168.7.214:80/library/nginx]fac15b2caa0c: Pushed f8bf5746ac5a: Pushed d11eedadbd34: Pushed 797e583d8c50: Pushed bf9ce92e8516: Pushed d000633a5681: Pushed latest: digest: sha256:6fe11397c34b973f3c957f0da22b09b7f11a4802e1db47aef54c29e2813cc125 size: 1570
复制代码


扩展作业

掌握 containerd 的安装 A

1,下载 containerd 安装包

wget https://github.com/containerd/containerd/releases/download/v1.4.3/cri-containerd-cni-1.4.3-linux-amd64.tar.gz
复制代码

2,解压安装包

tar  -zxvf  cri-containerd-cni-1.4.3-linux-amd64.tar.gz
复制代码

 3、移除不需要的文件(以下都在解压包下操作)

rm -rf etc/cni/rm -rf opt/ #启动systemctl status containerdsystemctl enable containerdsystemctl restart containerd
复制代码

 4,生成默认的配置文件

containerd config  default > /etc/containerd/config.toml 修改配置文件:oom_score = -999
复制代码

5、基本用法

NAME:   ctr -         __  _____/ /______ / ___/ __/ ___// /__/ /_/ /\___/\__/_/ containerd CLI  USAGE:   ctr [global options] command [command options] [arguments...] VERSION:   v1.4.3 DESCRIPTION:   ctr is an unsupported debug and administrative client for interactingwith the containerd daemon. Because it is unsupported, the commands,options, and operations are not guaranteed to be backward compatible orstable from release to release of the containerd project. COMMANDS:   plugins, plugin            provides information about containerd plugins   version                    print the client and server versions   containers, c, container   manage containers   content                    manage content   events, event              display containerd events   images, image, i           manage images   leases                     manage leases   namespaces, namespace, ns  manage namespaces   pprof                      provide golang pprof outputs for containerd   run                        run a container   snapshots, snapshot        manage snapshots   tasks, t, task             manage tasks   install                    install a new package   oci                        OCI tools   shim                       interact with a shim directly   help, h                    Shows a list of commands or help for one command GLOBAL OPTIONS:   --debug                      enable debug output in logs   --address value, -a value    address for containerd's GRPC server (default: "/run/containerd/containerd.sock") [$CONTAINERD_ADDRESS]   --timeout value              total timeout for ctr commands (default: 0s)   --connect-timeout value      timeout for connecting to containerd (default: 0s)   --namespace value, -n value  namespace to use with commands (default: "default") [$CONTAINERD_NAMESPACE]   --help, -h                   show help   --version, -v                print the version
复制代码


基于 nerdctl 拉取镜像和创建容器 A

nerdctl 是 与 Docker 兼容的 CLI for Containerd,其支持 Compose、Rootless、eStargz、OCIcrypt 和 IPFS,与 docker 命令行语法类似


安装 nerdctl 工具

最新 nerdctl 版本 releases 下载地址: https://github.com/containerd/nerdctl/releases

1,从 Github Release 页面中下载适用于你系统的 Full 包

wget -c -b https://github.com/containerd/nerdctl/releases/download/v1.0.0/nerdctl-1.0.0-linux-amd64.tar.gz
复制代码

2,下载完成后解压然后进行相应的安装操作 

tar -zxvf nerdctl-1.0.0-linux-amd64.tar.gzcd usr/local/bin && ./containerd-rootless-setuptool.sh install # 注意不能以root用户运行
复制代码

3,启动 containerd 和 buildkitd 服务。 

# 启动 containerd &&  验证服务状态systemctl enable --now containerd && systemctl restart containerd && systemctl status containerd#
复制代码

4.查看 nerdctl 工具执行结果及其版本,至此安装完毕 

nerdctl --versionnerdctl version 1.0.0
复制代码

使用 nerdctl 工具

描述: 在某一个用户执行时 nerdctl 命令时,我们可以其家目录中创建一个如下路径文件/home/weiyigeek/.config/nerdctl/nerdctl.toml,该文件可配置包含 nerdctl 相关配置项目。

简述尝试

1,镜像拉取与查看

nerdctl pull hello-world:latest
复制代码

2,运行拉取的 hello-world 镜像

 nerdctl run -d --privileged --name hello-containerd hello-world:latest
复制代码


3,查看创建的容器相关信息以及删除容器。

nerdctl ps -a 
nerdctl rm hello-containerdhello-containerd
复制代码

4,删除指定 hello-world 镜像

nerdctl rmi hello-world
复制代码

5,拉取 nginx:alpine 镜像并创建、后台运行 nginx 容器、进入容器内部。

sudo nerdctl run -d --name nginx -p 80:80 nginx:alpine
curl -I localhost
复制代码

6,nginx 容器详细信息查看与容器停止、删除。

nerdctl inspect --format "{{ .Name }} {{ .Id }}" nginx
nerdctl stop nginx
nerdctl ps -a
复制代码


发布于: 刚刚阅读数: 4
用户头像

LiaoWD

关注

还未添加个人签名 2022-09-21 加入

还未添加个人简介

评论

发布
暂无评论
极客时间运维进阶训练营第二周作业_Harbor_LiaoWD_InfoQ写作社区