openEuler容器使用
版本:openEuler-24.03-LTS-SP3
一、容器:isula
yum install iSulad
安装CNI
# 创建目录
mkdir -p /opt/cni/bin /etc/cni/net.d
# 下载 CNI 插件
wget https://github.com/containernetworking/plugins/releases/download/v1.9.1/cni-plugins-linux-amd64-v1.9.1.tgz
# 解压到 /opt/cni/bin
tar -zxvf cni-plugins-linux-amd64-v1.9.1.tgz -C /opt/cni/bin/
# 查看是否有 bridge、host-local 等
ls /opt/cni/bin
配置 iSulad 启用 CNI
vim /etc/isulad/daemon.json
确保包含以下关键项(network-plugin 必须设为 cni):
{
"network-plugin": "cni",
"cni-bin-dir": "/opt/cni/bin",
"cni-conf-dir": "/etc/cni/net.d",
// 其他原有配置保留
"log-level": "info",
"storage-driver": "overlay2"
}
network-plugin: "cni"—— 开启 CNI 网络(默认是空,只有 lo)openEuler社区cni-bin-dir—— CNI 插件二进制目录openEuler社区cni-conf-dir—— CNI 网络配置文件目录openEuler社区
编写一个 CNI 网络配置(bridge 示例)
在 /etc/cni/net.d/ 下创建 10-bridge.conf:
vim /etc/cni/net.d/10-bridge.conf
内容:
{
"cniVersion": "1.0.0",
"name": "bridge-net",
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/16",
"routes": [
{ "dst": "0.0.0.0/0" }
]
}
}
iSulad 会字典序读取 net.d 下第一个 .conf/.conflist 作为默认网络
也可以isula创建
#自动生成 CNI 配置文件放到 /etc/cni/net.d/,并创建对应的网桥
#-d, --driver:网络驱动,仅支持 bridge(默认)
isula network create -d bridge my-net
#--subnet CIDR:容器网段(必填,推荐),如 10.244.0.0/16
#--gateway IP:网关,必须配合 --subnet;不写则用网段第一个 IP。
isula network create --subnet 10.244.0.0/16 --gateway 10.244.0.1 my-net
#--internal:内网隔离,容器不能访问外网
isula network create --internal --subnet 192.168.50.0/24 internal-net
#双网卡内网+外网都能互通,再接入internal-net网卡,这个是docker命令
#docker network connect internal-net nginx
#把 nginx 从 internal-net网卡 断开,这个是docker命令
#docker network disconnect -f internal-net nginx
#彻底删除一个网络(网桥 + CNI 配置全部删掉,容器需要全部断开)
isula network rm my-net
重启 iSulad 生效
systemctl restart isulad
systemctl enable isulad
# 检查是否正常启动
systemctl status isulad
验证 CNI 是否生效
创建网络
# 先确保有 default 桥网络(没有就创建一次)
isula network create -d bridge default
运行一个容器
# 运行并端口映射(必须加 --network default)
isula run -d --name nginx --restart=always --network default -p 80:80 nginx:latest
#查看容器ip
isula inspect nginx | grep IPAddress
nginx容器访问文件夹权限问题
安装semanage
dnf install policycoreutils-python-utils
配置权限
# 1. 添加永久 SELinux 规则(/data/www 及其所有子文件)
semanage fcontext -a -t svirt_sandbox_file_t "/data/www(/.*)?"
# 2. 立刻应用到现有文件(递归)
restorecon -Rv /data/www
# 权限
chmod -R 755 /data/www
检查容器端口映射情况
isula port nginx
禁止 --expose 自动映射
#容器-p 指定容器内部IP
-p 10.17.0.3:9100:9100
举例:
isula run -d \
-p 80:80 \
-p 19180:19180 \
-p 443:443 \
-v /data/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/conf.d:/etc/nginx/conf.d \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/logs:/var/log/nginx \
-v /data/nginx/ssl:/etc/nginx/ssl \
-v /etc/localtime:/etc/localtime:ro \
-v /data/www:/data/www \
-e TZ=Asia/Shanghai \
--restart=always \
--network=proxy \
--ip 10.17.0.2 \
--name nginx \
nginx:1.31.1
isula run -d \
-p 10.17.0.3:9100:9100 \
--restart=always \
--name node-exporter \
--hostname GZ-IT-Proxy \
--network=proxy \
--ip 10.17.0.3 \
--pid host \
-v /etc/localtime:/etc/localtime:ro \
-v /:/host:ro,rslave \
prom/node-exporter:v1.11.1 \
--path.rootfs=/host
二、容器:nerdctl
dnf install containerd -y
# 最新版
wget https://github.com/containerd/nerdctl/releases/download/v2.3.1/nerdctl-2.3.1-linux-amd64.tar.gz
#解压
tar -xzf nerdctl-2.3.1-linux-amd64.tar.gz
# 移动到全局bin
mv nerdctl /usr/local/bin/
#启动容器
systemctl start containerd
systemctl enable containerd
#验证nerdctl
nerdctl -v
为nerdctl配置国内镜像加速
vim /etc/containerd/config.toml
写入下面内容
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = [
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://registry-1.docker.io"
]
创建目录和文件
mkdir -p /etc/containerd/certs.d/docker.io
vim /etc/containerd/certs.d/docker.io/hosts.toml
写入加速器地址:
server = "https://docker.io"
[host."https://xxxxx.mirror.swr.myhuaweicloud.com"]
capabilities = ["pull", "resolve"]
重启容器
systemctl restart containerd
配置 CNI
nerdctl 默认需要 CNI 网络,否则容器无法联网:
# 1. 创建 CNI 目录
mkdir -p /etc/cni/net.d
# 2. 写入默认网络配置(bridge)
cat <<EOF | sudo tee /etc/cni/net.d/10-bridge.conf
{
"cniVersion": "0.4.0",
"name": "bridge",
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"ipam": {
"type": "host-local",
"subnet": "10.4.0.0/24",
"routes": [{"dst": "0.0.0.0/0"}]
}
}
EOF
编排
nerdctl compose up -d
nerdctl compose down
三、防火墙
# 开发端口
firewall-cmd --add-port=9100/tcp --permanent
firewall-cmd --reload
#移除端口
firewall-cmd --zone=public --remove-port=9100/tcp --permanent
firewall-cmd --reload
#防火墙IP加黑名单
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="45.200.148.199" reject'