docker-事件

docker-事件

添加私有仓库的ssl证书

方法一: 配置https可信地址

方法二: 将证书复制到os路径

方法三: dockerd配置证书

即 /etc/docker/certs.d/仓库地址


# 提取域名的证书
# 创建镜像仓库证书目录,xxx.com.cn需替换为镜像仓库域名,如端口非443则需要追加:port
mkdir -p /etc/docker/certs.d/xxx.com.cn

# 使用openssl获取镜像仓库的X.509证书,写入刚创建目录下文件中,如端口非443则需替换
echo -n | openssl s_client -connect xxx.com.cn:443 2>/dev/null | openssl x509 > /etc/docker/certs.d/xxx.com.cn/ca.crt

mkdir -p /etc/docker/certs.d/域名:端口
tree /etc/docker/certs.d
/etc/docker/certs.d
└── harbor.xxxx.com
    ├── ca.crt
    ├── server.cert
    └── server.key

文件描述符限制

  1. 方法一: /etc/securiy/limits.conf 针对当前登陆用户有效; 但是对于 docker 程序, 似乎是没有效果的

  2. 方法二: docker 程序启动参数 --ulimit 有效果, 可以有效限制容器的文件描述符数量

  3. 方法三: systemd 文件 /lib/systemd/system/containerd.service /etc/systemd/system/containerd.service LimitNOFILE=infinity LimitNOFILE=1048576

对部分 docker 程序是有限制的, 但是容器内 ulimit 看到的还是无限, 所以不一定是有效的

时区问题

默认是 UTC 时间,时区也是 0

注意容器输出日志时, 是宿主的 dockerd 处理的日志, 时区还是 0, 这个是变不了的

方法

  1. 方法1: 容器环境变量设置 - 推荐 "TZ=Asia/Shanghai"

  2. 方法2: 拷贝宿主机的文件覆盖容器内的 /etc/localtime

RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  1. 方法3: 挂载宿主机的 /etc/localtime 文件
-v /etc/localtime:/etc/localtime:ro

alpine 更改时区环境变量

apk add -no-cach tzdata
apk add -U tzdata
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
apk del tzdata
echo "Asia/Shanghai" > /etc/timezone

镜像站

镜像站可用性检测站点

https://tools.opsnote.top/registry-mirrors/

推荐地址

https://docker.1ms.run

https://docker.1panel.live

使用方式

方法1-dockerd.json:

前面的优先级最高, 下载失败后, 会到后面进行下载, 直到第一个成功响应的镜像站, 全部失败后会回退到默认的 Docker Hub (registry-1.docker.io)

{ "registry-mirrors": ["https://func.ink","https://proxy.1panel.live"] }

方法2:

docker pull docker.1ms.run/library/golang:1.23-bullseye
docker pull func.ink/library/nginx:1.25.0
docker pull proxy.1panel.live/library/nginx:1.25.0

知名hub仓库

# Docker Hub 官方镜像仓库
docker pull nginx:latest

# GitHub Container Registry
ghcr.io/username/image:tag

# Google Container Registry
gcr.io/username/image:tag

# Google Kubernetes
k8s.gcr.io/username/image:tag
registry.k8s.io/username/image:tag

# Quay.io
quay.io/username/image:tag

# Microsoft Artifact Registry
mcr.microsoft.com/azure-cognitive-services/diagnostic:latest

多平台构建镜像

构建指定平台

docker build -t xxxx --platform=linux/amd64  .
docker build -t xxxx --platform=linux/arm64  .

构建时识别平台

# 构建时的环境变量会发生变化
TARGETPLATFORM: 解析值为 linux/amd64
TARGETOS: 解析值为 linux
TARGETARCH: 解析值为 amd64

示例

FROM docker.cnb.cool/xxx/images/alpine:3.21

ARG TARGETOS
ARG TARGETARCH
ARG TARGETPLATFORM

RUN echo "Target OS: ${TARGETOS}"
RUN echo "Target Arch: ${TARGETARCH}"
RUN echo "Target Platform: ${TARGETPLATFORM}"

远程管理

默认情况下,只监听本地 /var/run/docker.sock 文件, 即只与本地 root 用户 或 socket 文件属组的用户通信;

方法1:开启 daemon 进程的TCP监听(注意网络的安全性)

docker -d -H tcp://0.0.0.0:8988
docker -d -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock &

厂商发行版修改

# /etc/sysconfig/docker
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

# /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H unix://
ExecStart=/usr/bin/docker daemon $DOCKER_OPTS -H tcp://0.0.0.0:1234

方法2: https 接口, 需要配置 tls 证书

客户端连接管理

# 方法一
export DOCKER_HOST="tcp://0.0.0.0:8988"

# 方法二 指定 -H 选项
docker -H localhost:1234 info

# 方法三 ssh 访问
export DOCKER_HOST=ssh://root@192.168.100.100
最后更新于