containerd使用

condtainerd 的使用构建镜像

[root@localhost ~]# nerdctl run -d -p nginx:1.21

启动一个容器
-d: 在后台运行
-p: 指定端口映射,可以多次出现,映射多个端口
-i: 交互式执行
-t: 为容器分配一个tty
--dns: 为容器分配dns
--name: 为容器指定名称
-e: 在容器启动时传递环境变量,可多次出现
--workdir: 指定工作目录
--restart: 容器异常退出时是否重启
--rm: 容器退出时自动删除
-m: 指定内存限制
-c: 指定cpu限制: cpu是基于时间分片的,单位时间内cpu执行的时长。cpu限制只在繁忙时使用。
进入容器
nerdctl exec -it  [容器id] /bin/bash

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AKYEyVV2-1669692080257)(C:\Users\杨其海\Pictures\9b64513c5b17cd791a131f4123202308.png)]

容器的生命周期

1. 容器的启动

   nerdctl start containerd_id

2. 容器的运行

   nerdctl run

3. 容器的停止

   nerdctl stop containerd_id  # 正常退出
   nerdctl kill containerd_id  #异常退出

4. 暂停容器

    nerdctl pause containerd_id   

5. 恢复暂停

   nerdctl unpause containerd_id   

6. 删除容器

   nerdctl rm containerd_id

   -f :强制
7. 删除所有容器
   nerdctl ps -aq | xargs nerdctl rm -f

查看容器日志

nerdctl logs  [containerd_id]

查看容器详情

nerdctl inspect [containerd_id]

查看容器列表

nerdctl ps 
-a :包括已停止容器
-q :只打印容器id

容器存储和网络

nerdctl run -d  -p 8080:80 -v /var/html/:/usr/share/nginx/html:ro nginx:1.21
-v: 将宿主机的指定目录挂在到容器目录,会覆盖容器中目录的内容,可以多次指定,挂载多个路径,除了可以挂在目录外,还可以挂载文件;同时可以指定挂载的目录或文件的权限。

列出容器网络

[root@localhost ~]# nerdctl network ls
NETWORK ID      NAME              FILE
                containerd-net    /etc/cni/net.d/10-containerd-net.conflist
17f29b073143    bridge            /etc/cni/net.d/nerdctl-bridge.conflist
                host
                none

显示容器网络详细信息

[root@localhost ~]# nerdctl network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "17f29b073143d8cd97b5bbe492bdeffec1c5fee55cc1fe2112c8b9335f8b6121",
        "IPAM": {
            "Config": [
                {
                    "Subnet": "10.4.0.0/24",
                    "Gateway": "10.4.0.1"
                }
            ]
        },
        "Labels": {}
    }
]

容器网络:

  • briage :基于iptables实现snat和dnat
  • host:不为容器分配ip地址,而直接将宿主机ip绑定至容器;相较于briage有较好的性能。
  • none:不为容器分配ip,也不绑定宿主机ip。
  • 自定义网络:为容器分配ip地址,跨网络通信

##容器镜像制作

镜像构建工具 buildkit https://github.com/moby/buildkit

下载构建工具 https://github.com/moby/buildkit/releases/tag/v0.10.5

解压到

tar -xf  buildkit-v0.10.5.linux-amd64.tar.gz  /usr/local/
官方示例
#  vi /etc/systemd/system/buildkit.service
[Unit]
Description=BuildKit
Requires=buildkit.socket
After=buildkit.socket
Documentation=https://github.com/moby/buildkit

[Service]
Type=notify
ExecStart=/usr/local/bin/buildkitd --addr fd://

[Install]
WantedBy=multi-user.target

我们使用

[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit

[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true --addr tcp://localhost:1234
#--oci-worker=false 和 --containerd-worker=true 表示使用 containerd 作为 buildkit 的后端 worker
#--addr tcp://localhost:1234 表示监听 localhost:1234 端口和客户端通信
[Install]
WantedBy=multi-user.target
#  vi /etc/systemd/system/buildkit.socket
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit

[Socket]
ListenStream=%t/buildkit/buildkitd.sock
SocketMode=0660

[Install]
WantedBy=sockets.target
Building a Dockerfile with buildctl
buildctl build \
    --frontend=dockerfile.v0 \
    --local context=. \
    --local dockerfile=.
# or
buildctl build \
    --frontend=dockerfile.v0 \
    --local context=. \
    --local dockerfile=. \
    --opt target=foo \
    --opt build-arg:foo=bar

--local exposes local source files from client to the builder. context and dockerfile are the names Dockerfile frontend looks for build context and Dockerfile location.

If the Dockerfile has a different filename it can be specified with --opt filename=./Dockerfile-alternative.

Building a Dockerfile using external frontend

External versions of the Dockerfile frontend are pushed to https://hub.docker.com/r/docker/dockerfile-upstream and https://hub.docker.com/r/docker/dockerfile and can be used with the gateway frontend. The source for the external frontend is currently located in ./frontend/dockerfile/cmd/dockerfile-frontend but will move out of this repository in the future (#163). For automatic build from master branch of this repository docker/dockerfile-upstream:master or docker/dockerfile-upstream:master-labs image can be used.

buildctl build \
    --frontend gateway.v0 \
    --opt source=docker/dockerfile \
    --local context=. \
    --local dockerfile=.
buildctl build \
    --frontend gateway.v0 \
    --opt source=docker/dockerfile \
    --opt context=https://github.com/moby/moby.git \
    --opt build-arg:APT_MIRROR=cdn-fastly.deb.debian.org

镜像的分层架构

  • 镜像不可修改

  • 支持镜像分层的文件系统:UnionFS 可以参考(https://blog.csdn.net/weixin_45880055/article/details/118057568)

    Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下

    支持unionfs的文件系统

    overlayfs

    devicemapper

    aufs
    开始构建镜像,需在含有Dockerfile 的目录构建

buildctl  build --frontend=dockerfile.v0  --local context=. --local dockerfile=.  --output type=image,name=nginx:123

可以用 nerdctl -n buildkit images 查看镜像

也可以使用
[root@localhost ~]# nerdctl build -t nginx:333 .
这个默认保存在 docker.io/library 中

Dockefile语法

#引用基础镜像层
#FROM seratch      引用空白镜像,从零构建
FROM centos:7    
# LABEL 添加一些注解信息 
LABEL  Author natasha<natasha@example.com> \
        Time 20221103\
        function ngnix-demo       
ADD repos.tar.gz /etc/yum.repos.d/
RUN yum -y install nginx && \
    rm -rf /usr/share/nginx/html/* && \的参数;
    echo "hello word" > /usr/share/nginx/html/index.html
#镜像启动时执行的命令
CMD ["nginx","-g","daemon off"]
构建镜像(add 压缩包可以自动解压,除zip外,也可以用copy一个个文件放进去)
 #WORKDIR /etc/yum.repos.d/ 切换工作目录,不会导致新层的出现。
 #USER 切换工作用户
 #ENV 引入环境变量
 ENV my_sqlhost 192.168.1.2
 CONTENT "hello word"
 EXPOSE 用于声明镜像启动为容器监听的端口
 #VOLUME 会在容器启动的时候将宿容器的目录直接挂载给宿主机
 VOLUME /usr/share/nginx/html /etc/nginx 确保数据持久化
 #ENTRYPOINT 在容器启动时执行的指令,ENTRYPOINT所执行的智利是无法覆盖的,如果同时定了了ENTRYPOINT和cmd,则cmd会作为ENTRYPOINT的参数;ENTRYPOINT通常是一个脚本,用在容器启动时执行必要的初始化操作。如
 * 修改配置文件
 * 创建数据库

于声明镜像启动为容器监听的端口
#VOLUME 会在容器启动的时候将宿容器的目录直接挂载给宿主机
VOLUME /usr/share/nginx/html /etc/nginx 确保数据持久化
#ENTRYPOINT 在容器启动时执行的指令,ENTRYPOINT所执行的智利是无法覆盖的,如果同时定了了ENTRYPOINT和cmd,则cmd会作为ENTRYPOINT的参数;ENTRYPOINT通常是一个脚本,用在容器启动时执行必要的初始化操作。如

  • 修改配置文件
  • 创建数据库

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值