写点什么

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

作者:好吃不贵
  • 2022-10-28
    浙江
  • 本文字数:1792 字

    阅读完需:约 6 分钟

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

通过 docker build 来构建。准备环境:

# pull基础镜像,centos或者ubuntudocker pull centos:7.8.2003docker pull ubuntu# 下载nginx镜像wget https://nginx.org/download/nginx-1.23.2.tar.gz
复制代码

写 Dockerfile:

FROM ubuntu:22.04LABLE author="Dave wujianyue000@gmail.com"
ADD sources.list /etc/apt/sources.listRUN touch /etc/apt/apt.conf.d/99verify-peer.conf && echo >>/etc/apt/apt.conf.d/99verify-peer.conf "Acquire { https::Verify-Peer false }"
RUN apt update && apt install -y iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute gcc openssh-server lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute iotop unzip zip make
ADD nginx-1.23.2.tar.gz /usr/local/src/RUN cd /usr/local/src/nginx-1.23.2 && ./configure --prefix=/apps/nginx && make && make install && ln -sv /apps/nginx/sbin/nginx /usr/binRUN groupadd -g 2088 nginx && useradd -g nginx -s /usr/sbin/nologin -u 2088 nginx && chown -R nginx.nginx /apps/nginxADD nginx.conf /apps/nginx/conf/ADD frontend.tar.gz /apps/nginx/html/
EXPOSE 80 443
COPY docker-entrypoint.sh /docker-entrypoint.shRUN chmod a+x /docker-entrypoint.shENTRYPOINT ["/docker-entrypoint.sh"]
复制代码

Certificate verification failed: The certificate is NOT trusted. The certificate issuer is unknown. Could not handshake: Error in the certificate verification.问题的解决:

RUN touch /etc/apt/apt.conf.d/99verify-peer.conf && echo >>/etc/apt/apt.conf.d/99verify-peer.conf "Acquire { https::Verify-Peer false }"

禁用掉 Verify-Peer 即可。

groupadd 和 useradd 为了增加用户,运行 nginx。

使用docker-entrypoint.sh作为 entrypoint 更好。shell 进程就是容器里的 1 号进程了。注意 1 号进程里需要用 while 循环,确保其不会退出。该进程退出了,容器就退出了。

其他配置文件,如nginx.conf见 github。

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

在 docker run 的参数里指定即可。

CPU 参数:

--cpu-period 配置 CFS 调度程序周期。

--cpu-quota 设置对容器的 CPU 限制值。如果 period 是 100k,quota 是 150k,表示可用 1.5 个 CPU。新版用--cpus 配置,直接写--cpus="1.5"即可。表示 cpu 的绝对值。

--cpuset-cpus 指定 CPU 号。比如--cpuset-cpus 0,3-5,可以在 CPU0,3,4,5 上运行。

--cpuset-mem 使用哪个 CPU 的内存,只对 NUMA 架构有效。

--cpu-shares 配置 CFS 中调度的相对最大比例权重。值越高,分到更多的时间片。表示 cpu 的相对值,比如一个容器 A 是 1000,另一个容器 B 是 2000,那么容器 B 可用 CPU 是 A 的两倍。

内存参数:

硬限制:-m 512m,实际使用的内存不能超过这个限制。

软限制:--memory-reservation 384m,基本不用。只能比硬限制小。不确保 container 不会超过这个限制。

swap 分区(一般服务器上不开):--memory-swap="612m"。实际交换分区大小需要减去硬限制的大小,比如 612m-512m=100m。配置为 0,就是没有交换分区了。如果配置-1,可以用宿主机的交换分区最大值。

--oom-kill-disable:禁止 oom 发生在指定容器上,不推荐。

部署 http 协议的 harbor 镜像仓库

cr.console.aliyun.com 登录。

镜像工具里的镜像加速器可以用于加速访问。

配置登录密码:

左侧菜单的"容器镜像服务"-"个人实例"-"设置 Registry 登录密码"。

创建仓库:

点击"创建镜像仓库",填写需要的信息,仓库选本地即可。

把本地镜像打包成新的 tag,push 到 harbor:

docker tag a9c3102fb5e0 registry.cn-hangzhou.aliyuncs.com/cloud_learn/geektime:20221025_2020-nginx1.23.2v1

打完 tag 后,IMAGE ID 还是和原来的一样的。再 push 上去。

docker push registry.cn-hangzhou.aliyuncs.com/cloud_learn/geektime:20221025_2020-nginx1.23.2v1

基于 docker-compose 实现对 nginx+tomcat web 服务的单机编排

下次课再补上。

github 地址在:https://github.com/docker/compose

容器管理分为 3 层。分别是 project,service 和 container。

docker compose 的配置文件是 yml 或 yaml。

docker-compose up -d 可以在后台按 yml 配置启动一个容器。

用户头像

好吃不贵

关注

还未添加个人签名 2018-11-20 加入

还未添加个人简介

评论

发布
暂无评论
极客时间运维进阶训练营第二周作业_好吃不贵_InfoQ写作社区