惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threatpost
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
Recent Announcements
Recent Announcements
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
MongoDB | Blog
MongoDB | Blog
U
Unit 42
B
Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
P
Privacy International News Feed
L
LINUX DO - 最新话题
博客园_首页
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
C
Cisco Blogs
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志
I
Intezer
罗磊的独立博客
MyScale Blog
MyScale Blog
Last Week in AI
Last Week in AI
A
About on SuperTechFans
G
GRAHAM CLULEY
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
D
DataBreaches.Net
The Hacker News
The Hacker News
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
I
InfoQ
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - 叶小钗
Project Zero
Project Zero

mafeifan 的编程技术分享

mafengwo-mp3-downloader | mafeifan 的编程技术分享 示例页面 | mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 查看 default namespace 下的 default service account名称 mafeifan 的编程技术分享 检查日志 | mafeifan 的编程技术分享 bridge fdb show dev flannel.1 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 数据收集原理分析 | mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 几种方法 | mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 check the export on the very top of this document so we can use $do mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 延伸 -- 关于前端路由 xdebug 3 和 2 的区别
mafeifan 的编程技术分享
2026-01-16 · via mafeifan 的编程技术分享

在 Gitlab Pipeline 里我们经常要将代码打包为 docker image 并推送到镜像仓库,而为了完成 docker push 动作需要定义 service: ['docker:dind'],不然 docker push 无法成功

典型的流水线例子如下:

yaml

stages: 
  - create-image
build-image-job:
  stage: create-image
  image: docker
  services:
    - docker:dind
  script:
    - echo $CI_REGISTRY_PASSWORD | docker Login -U $CI_REGISTRY_USER $CI_REGISTRY --password-stdin
    - docker build -t $$CI_REGISTRY_IMAGE/myapp:1.2-
    - docker push $$CI_REGISTRY_IMAGE/myapp:1.2-
    - docker images

为什么非得定义 services 呢?

这里先从Docker的 C/S 架构讲起

Docker 的 C/S(客户端/服务器)架构 ​

Docker 采用典型的 C/S(客户端/服务器)架构

aiignore

┌─────────────────┐      REST API       ┌─────────────────────────────┐
│   Docker 客户端  │<─────────────────── │      Docker 服务器           │
│   (docker CLI)  │    HTTP/UNIX Socket │     (Docker Daemon)         │
└─────────────────┘                     │   ┌─────────────────────┐   │
                                        │   │  Containers         │   │
                                        │   │  Images             │   │
                                        │   │  Networks           │   │
                                        │   │  Volumes            │   │
                                        │   └─────────────────────┘   │
                                        └─────────────────────────────┘

组件说明 ​

客户端 (Client) ​

  • Docker CLI (docker 命令)
  • Docker API 客户端
  • Docker Compose
  • 其他第三方工具
  • 服务器 (Server)

服务端 Docker daemon (dockerd) ​

  • 容器运行时 (containerd)
  • 存储驱动
  • 网络驱动
  • 插件系统

工作流程 ​

  1. 用户输入 docker 命令
  2. Docker CLI 解析命令
  3. 通过 API 发送请求到 daemon
  4. Daemon 处理请求
  5. 返回结果给客户端

示例:运行容器:

docker run nginx


├─► 1. CLI 解析命令

├─► 2. 发送 API 请求到 daemon

├─► 3. Daemon 检查本地是否有镜像

├─► 4. 如无镜像则从仓库拉取

├─► 5. 创建并启动容器

└─► 6. 返回容器 ID 给客户端

客户端环境变量 ​

bash

# 指定 Docker daemon 地址
DOCKER_HOST=tcp://remote-host:2375

# 指定 TLS 设置
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/path/to/certs

优势 ​

  • 客户端和服务器可以分开部署
  • 支持远程管理
  • 便于第三方集成
  • 支持 TLS 加密
  • 可以通过 API 开发自定义工具

常见使用场景 ​

本地开发:

远程管理:

# 通过 TCP 连接远程 daemon
docker -H tcp://remote:2375 ps

进一步 ​

深入了解镜像 docker 和 docker:dind 的具体区别 ​

打开 https://hub.docker.com/_/docker 仔细阅读

发现 docker镜像 docker:28, docker:dind, docker:28-dind 是等价的

docker:cli, docker:28-cli 也是等价的,只不过 tag 不一样

进一步查看他们的 Dockerfile: docker:dinddocker:cli 直接扔给 Gemini 帮忙分析对比,对于 Docker28 版本的 Dockerfile 得出以下结论:

docker:cli ​

  • docker:cli 是基于 alpine:3.21
  • docker:cli 安装的有 docker 命令行工具, buildx插件,docker-compose插件

docker:dind ​

  • docker:dind 是基于 docker:cli, 包含了 docker:cli 的所有功能,并在此基础上增加了运行 Docker daemon 所需的额外组件
  • 额外组件有 git, iptables(IPv4 防火墙), ip6tables(IPv6 防火墙), openssl(SSL 支持), xz, zfs, pigz, e2fsprogs 等文件系统工具
  • 额外组件还有 dockerd (Docker daemon), containerd, ctr, runc 这些容器运行时工具
  • 暴露端口 EXPOSE 2375 2376 # Docker daemon API 端口
  • 特有的存储卷, VOLUME /var/lib/docker # Docker 持久化存储

使用场景 ​

  • docker:cli:

    • 适用于只需要执行 Docker 命令的场景
    • 需要连接外部 Docker daemon
  • docker:dind:

    • 适用于需要完整 Docker 环境的场景
    • 可以独立运行容器
    • CI/CD 环境中的容器构建

网络配置 ​

  • docker:cli:
    • 无特殊网络要求
  • docker:dind:
    • 需要暴露 Docker daemon 端口
    • 需要配置网络隔离

参考 ​

https://docs.gitlab.com/ci/services/

https://docs.docker.com/reference/cli/dockerd/