【Ubuntu 安装Docker CE-Jenkins】

安装Docker CE(Ubuntu)

Install | Docker Docs官网

使用apt仓库安装

DNS配置(可选)

#手动替换
sudo vim /etc/systemd/resolved.conf
#典型配置如下
[Resolve]
DNS=8.8.8.8
DNS=114.114.114.114
FallbackDNS=1.1.1.1   # 备用 DNS#sed替换
sudo sed -i '/^#DNS=/ {s/#DNS=/DNS=8.8.8.8/a\DNS=114.114.114.114
}' /etc/systemd/resolved.conf
sudo sed -i 's/#FallbackDNS=/FallbackDNS=1.1.1.1/' /etc/systemd/resolved.conf
#重启服务并更新链接
sudo systemctl restart systemd-resolved
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf  # 避免文件被覆盖:ml-citation{ref="4,5" data="citationList"}#查看当前DNS情况
systemd-resolve --status

1.设置Dockerapt仓库

运行以下命令以卸载所有冲突的软件包

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

设置 apt 仓库

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sleep 1
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sleep 2
sudo chmod a+r /etc/apt/keyrings/docker.asc
cat
# Add the repository to Apt sources:
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

2.安装Docker软件包

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3.设置Docker镜像地址

地址来自:国内可用Docker镜像源加速器/DockerHub镜像汇总(2025年3月28日) - 文武科技柜

sudo mkdir -p /etc/docker && \
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.1ms.run","https://docker.mybacc.com","https://dytt.online","https://lispy.org","https://docker.xiaogenban1993.com","https://docker.yomansunter.com","https://aicarbon.xyz","https://666860.xyz","https://docker.zhai.cm","https://a.ussh.net","https://hub.littlediary.cn","https://hub.rat.dev","https://docker.m.daocloud.io"]
}
EOF
sudo systemctl daemon-reload && \
sudo systemctl restart docker
  • 阿里云专属镜像配置(可选)
  1. 访问 ‌**阿里云容器镜像服务**‌,注册并获取专属加速地址;
  2. 将脚本中的镜像地址替换为你的阿里云专属地址(如 https://xxx.mirror.aliyuncs.com)。

执行以下命令查看镜像源状态 “Registry Mirrors”:

docker info

4.测试

sudo docker run hello-world

输出: Hello from Docker!

5.Docker命令补全

一、基础环境配置

  1. ‌**安装 bash-completion**‌

    sudo apt-get update && sudo apt-get install -y bash-completion
    

    该工具为 bash shell 提供基础补全框架,是 Docker 补全功能的前置依赖。

  2. ‌激活全局补全配置‌
    编辑 ~/.bashrc 文件,确保以下内容已启用:
    vim ~/.bashrc

    if [ -f /etc/bash_completion ] && ! shopt -oq posix; then. /etc/bash_completion
    fi
    

    执行 source ~/.bashrc 使配置生效。


二、Docker 专用补全配置

  1. ‌下载 Docker 官方补全脚本‌

    sudo curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker \-o /etc/bash_completion.d/docker
    

    该脚本覆盖所有 Docker 命令及子命令的补全规则。

  2. ‌**启用 Docker Compose 补全(可选)**‌

    sudo curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose \-o /etc/bash_completion.d/docker-compose
    

三、验证与调试

  1. ‌立即生效配置‌

    exec bash  # 或重新启动终端
    
  2. ‌测试补全功能‌

    • 输入 docker r 后按 Tab,应显示 run、rm 等命令
    • 输入 docker stop con 后按 Tab,应显示运行中的容器名

四、常见问题排查

现象解决方案
补全列表不显示检查 /etc/bash_completion.d/ 目录下 docker 补全脚本是否存在且权限为 644
补全响应延迟删除 /etc/bash_completion.d/ 目录下的冗余补全脚本
仅部分命令可补全确认安装的 Docker 版本 >= 20.10,旧版本需手动更新补全脚本
Ubuntu 容器内补全失效执行 dpkg-reconfigure dash 选择 bash 作为默认 shell

五、进阶优化(适用于生产环境)

  1. ‌多用户全局配置‌
    将补全脚本部署到 /etc/bash_completion.d/ 而非用户目录,实现系统级补全支持

  2. ‌容器内补全支持

    ‌在 Dockerfile 中添加:

    RUN apt-get update && apt-get install -y bash-completion && \curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker \-o /etc/bash_completion.d/docker
    

安装Jenkins-Docker

Jenkins-Docker官网

1.创建网络

使用以下命令在 Docker 中创建一个桥接网络:

docker network create jenkins

2.创建镜像

要在 Jenkins 节点内执行 Docker 命令,请使用以下 docker run 命令下载并运行 docker:dind Docker 镜像:

docker run --name jenkins-docker --rm --detach \--privileged --network jenkins --network-alias docker \--env DOCKER_TLS_CERTDIR=/certs \--volume jenkins-docker-certs:/certs/client \--volume jenkins-data:/var/jenkins_home \--publish 2376:2376 \docker:dind --storage-driver overlay2

注释:

要在 Jenkins 节点内执行 Docker 命令,请使用以下 docker run 命令下载并运行 docker:dind Docker 镜像:

docker run \--name jenkins-docker \ 1--rm \ 2--detach \ 3--privileged \ 4--network jenkins \ 5--network-alias docker \ 6--env DOCKER_TLS_CERTDIR=/certs \ 7--volume jenkins-docker-certs:/certs/client \ 8--volume jenkins-data:/var/jenkins_home \ 9--publish 2376:2376 \ 10 docker:dind \ 11--storage-driver overlay2 12
1(可选)指定用于运行该镜像的 Docker 容器名称。 默认情况下,Docker 会为容器生成一个唯一的名称。
2(可选)在关闭时自动移除 Docker 容器(Docker 镜像的副本)。
3(可选)在后台运行 Docker 容器。 您可以通过运行 docker stop jenkins-docker 来停止此进程。
4在 Docker 中运行 Docker 目前需要特权访问才能正常工作。 随着较新的 Linux 内核版本的推出,这一要求可能会放宽。
5这与前面步骤中创建的网络相对应。
6在 jenkins 网络中,将 Docker 中的 Docker 容器作为主机名 docker 提供。
7启用 Docker 服务器中的 TLS 使用。 由于使用了特权容器,因此建议这样做,不过这需要使用下面描述的共享卷。 此环境变量控制 Docker TLS 证书的管理根目录。
8将容器内的 /certs/client 目录映射到上面创建的名为 jenkins-docker-certs 的 Docker 卷。
9将容器内的 /var/jenkins_home 目录映射到名为 jenkins-data 的 Docker 卷。 这使得由该 Docker 容器的 Docker 守护进程控制的其他 Docker 容器能够挂载来自 Jenkins 的数据。
10(可选)在主机上公开 Docker 守护进程端口。 这有助于在主机上执行 docker 命令来控制此内部 Docker 守护进程。
11该 docker:dind 图像本身。 运行前请使用命令 docker image pull docker:dind 下载此图像。
12Docker 卷的存储驱动程序。 有关支持的选项,请参阅 Docker 存储驱动程序文档。

3.Dockerfile创建Jenkins Docker 镜像

通过执行以下两个步骤来自定义官方的 Jenkins Docker 镜像:

创建一个包含以下内容的 Dockerfile:

FROM jenkins/jenkins:2.504.1-jdk21
USER root
RUN apt-get update && apt-get install -y lsb-release ca-certificates curl && \install -m 0755 -d /etc/apt/keyrings && \curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && \chmod a+r /etc/apt/keyrings/docker.asc && \echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \https://download.docker.com/linux/debian $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable" \| tee /etc/apt/sources.list.d/docker.list > /dev/null && \apt-get update && apt-get install -y docker-ce-cli && \apt-get clean && rm -rf /var/lib/apt/lists/*
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow json-path-api"

根据此 Dockerfile 构建一个新的 Docker 镜像,并为该镜像指定一个有意义的名称,例如“myjenkins-blueocean:2.504.1-1”:

docker build -t myjenkins-blueocean:2.504.1-1 .

如果您尚未下载官方的 Jenkins Docker 镜像,上述过程会自动为您下载。

4.启动容器

使用以下 docker run 命令在 Docker 中以容器形式运行您自己的 myjenkins-blueocean:2.504.1-1 镜像:

docker run --name jenkins-blueocean --restart=on-failure --detach \--network jenkins --env DOCKER_HOST=tcp://docker:2376 \--env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \--publish 8080:8080 --publish 50000:50000 \--volume jenkins-data:/var/jenkins_home \--volume jenkins-docker-certs:/certs/client:ro \myjenkins-blueocean:2.504.1-1

访问测试

http://192.168.0.225:8080

提示输入密码可查看容器日志获取:

docker logs jenkins-blueocean

注释:

docker run \--name jenkins-blueocean \ 1--restart=on-failure \ 2--detach \ 3--network jenkins \ 4--env DOCKER_HOST=tcp://docker:2376 \ 5--env DOCKER_CERT_PATH=/certs/client \--env DOCKER_TLS_VERIFY=1 \--publish 8080:8080 \ 6--publish 50000:50000 \ 7--volume jenkins-data:/var/jenkins_home \ 8--volume jenkins-docker-certs:/certs/client:ro \ 9myjenkins-blueocean:2.504.1-1  10
1(可选)指定此 Docker 镜像实例的 Docker 容器名称。
2如果容器停止运行,请始终重新启动它。 如果手动停止了容器,只有在 Docker 守护进程重启或手动重新启动容器本身时,它才会重新启动。
3(可选)以“分离”模式在后台运行当前容器,并输出容器 ID。 如果您未指定此选项,则此容器的运行 Docker 日志将在终端窗口中显示。
4将此容器连接到先前定义的 jenkins 网络。 现在,Docker 守护进程可通过主机名 docker 供此 Jenkins 容器使用。
5指定由 docker 、 docker-compose 以及其他 Docker 工具用于从上一步连接到 Docker 守护进程所使用的环境变量。
6将当前容器的 8080 端口映射到主机的 8080 端口。 第一个数字代表主机上的端口,最后一个数字代表容器的端口。 例如,若要通过主机上的 49000 端口访问 Jenkins,请为此选项输入 -p 49000:8080 。
7(可选)将当前容器的 50000 端口映射到主机的 50000 端口。 只有在您已在其他机器上设置了一个或多个传入的 Jenkins 代理,并且这些代理又与您的 jenkins-blueocean 容器(即 Jenkins“控制器”)进行交互时,才需要此操作。 默认情况下,传入的 Jenkins 代理通过 TCP 端口 50000 与 Jenkins 控制器进行通信。 您可以通过“安全”页面更改 Jenkins 控制器上的此端口号。 例如,如果您将 Jenkins 控制器的传入 Jenkins 代理的 TCP 端口更新为 51000,则需要通过 docker run … 命令重新运行 Jenkins。 指定“发布”选项如下:第一个值是托管 Jenkins 控制器的机器上的端口号,最后一个值与 Jenkins 控制器上更改的值匹配,例如 --publish 52000:51000 。 传入的 Jenkins 代理在该端口(此示例中为 52000)与 Jenkins 控制器进行通信。 请注意,WebSocket 代理不需要此配置。
8将容器中的 /var/jenkins_home 目录映射到名为 jenkins-data 的 Docker 卷。 除了将 /var/jenkins_home 目录映射到 Docker 卷之外,您还可以将其映射到本地文件系统中的某个目录。 例如,指定选项 --volume $HOME/jenkins:/var/jenkins_home 可将容器中的 /var/jenkins_home 目录映射到本地机器上 $HOME 目录内的 jenkins 子目录 - 通常是 /Users/<your-username>/jenkins 或 /home/<your-username>/jenkins 。 注意:如果您更改此源卷或目录,则需要更新上述 docker:dind 容器中的卷以匹配此设置。
9将 /certs/client 目录映射到先前创建的 jenkins-docker-certs 卷。 现在,用于连接到 Docker 守护进程所需的客户端 TLS 证书可在由 DOCKER_CERT_PATH 环境变量指定的路径中获取。
10您在上一步构建的 Docker 镜像的名称。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/diannao/82414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5、开放式PLC梯形图编程组件 - /自动化与控制组件/open-plc-programming

76个工业组件库示例汇总 开放式PLC编程环境 这是一个开放式PLC编程环境的自定义组件&#xff0c;提供了一个面向智能仓储堆垛机控制的开放式PLC编程环境。该组件采用苹果科技风格设计&#xff0c;支持多厂商PLC硬件&#xff0c;具有直观的界面和丰富的功能。 功能特点 多语…

内网和外网怎么互通?外网访问内网的几种简单方式

在企业或家庭网络中&#xff0c;经常会遇到不同内网环境下网络互通问题。例如&#xff0c;当公司本地局域网内有个办公OA网站&#xff0c;在办公室内电脑上网可以登录使用&#xff0c;但在家带宽下就无法直接通信访问到。这就需要我们采取一些实用的内外网互通技巧来解决这个问…

使用大语言模型进行机器人规划(Robot planning with LLMs)

李升伟 编译 长期规划在机器人学领域可以从经典控制方法与大型语言模型在现实世界知识能力的结合中获益。 在20世纪80年代&#xff0c;机器人学和人工智能&#xff08;AI&#xff09;领域的专家提出了莫雷奇悖论&#xff0c;观察到人类看似简单的涉及移动和感知的任务&#x…

【计算机视觉】OpenCV实战项目: opencv-text-deskew:实时文本图像校正

opencv-text-deskew&#xff1a;基于OpenCV的实时文本图像校正 一、项目概述与技术背景1.1 核心功能与创新点1.2 技术指标对比1.3 技术演进路线 二、环境配置与算法原理2.1 硬件要求2.2 软件部署2.3 核心算法流程 三、核心算法解析3.1 文本区域定位3.2 角度检测优化3.3 仿射变换…

可视化图解算法33:判断是不是平衡二叉树

1. 题目 描述 输入一棵节点数为 n 的二叉树&#xff0c;判断该二叉树是否是平衡二叉树。 在这里&#xff0c;我们只需要考虑其平衡性&#xff0c;不需要考虑其是不是排序二叉树 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;&#xff0c;具有以下性质&#xff1…

【Linux网络】应用层自定义协议与序列化

应用层自定义协议与序列化 应用层 我们程序员写的一个个解决我们实际问题,满足我们日常需求的网络程序,都是在应用层. 协议是一种"约定".Socket的接口,在读写数据时,都是按"字符串"的方式来发送接收的.如果我们要传输一些"结构化的数据"怎么办…

MySQL + Elasticsearch:为什么要使用ES,使用场景与架构设计详解

MySQL Elasticsearch&#xff1a;为什么要使用ES&#xff0c;使用场景与架构设计详解 前言一、MySQL Elasticsearch的背景与需求1.1 为什么要使用Elasticsearch&#xff08;ES&#xff09;&#xff1f;1.2 为什么MySQL在某些场景下不足以满足需求&#xff1f;1.3 MySQL Elas…

PPL困惑度的计算

1. 公式 PPL&#xff08;Perplexity&#xff09;困惑度 是自然语言处理&#xff08;NLP&#xff09;中常用的评估语言模型&#xff08;Language Model&#xff09;性能的指标。PPL 用于衡量语言模型对语言序列的预测能力&#xff0c;数值越小&#xff0c;说明模型的预测能力越…

MegaCLI Raid管理工具

整理在CentOS 7.9和Ubuntu 24.04上&#xff0c;MegaCLI 工具的安装与常用命令。 1. 参考 下载和安装MegaCLI工具 MegaCli RAID管理工具 Megacli 批量磁盘巡检 ubuntu24.04 No such file libncursesw.so.5 dell服务器硬盘的状态变成外来&#xff08;foreign&#xff09;命…

HTML9:页面结构分析

页面结构分析 元素名描述header标题头部区域的内容&#xff08;用于页面或页面中的一块区域&#xff09;footer标记脚部区域的内容&#xff08;用于整个页面或页面的一块区域&#xff09;sectionWeb页面的一块独立区域article独立的文章内容aside相关的内容或应用&#xff08;…

分布式处理架构

分布式处理架构是一种将计算任务分散到多台计算机或服务器上协同完成的系统设计方法。这种架构通过将工作负载分配到多个节点&#xff08;可以是物理机、虚拟机或容器&#xff09;来提高性能、可靠性和可扩展性。下面我将从多个角度详细解释这一概念&#xff1a; 分布式架构的…

算法每日一题 | 入门-分支结构-Apples Prologue/苹果和虫子

Apples Prologue/苹果和虫子 题目描述 小 B 喜欢吃苹果。她现在有 m m m&#xff08;1 ≤ m ≤100&#xff09;个苹果&#xff0c;吃完一个苹果需要花费 t t t&#xff08;0 ≤ t≤ 100&#xff09;分钟&#xff0c;吃完一个后立刻开始吃下一个。 现在时间过去了 s s s&a…

RT Thread Studio创建软件和硬件RTC工程

MCU型号&#xff1a;STM32F103RET6 一.配置软件模拟RTC 1.生成一个带串口输出的工程文件&#xff0c;新建RT-Thread项目工程文件。 2.查看电路图中的串口输出管脚&#xff0c;根据STMCubeMx软件可知此串口为USART1&#xff0c;选择芯片型号为STM32F103RET6&#xff0c;控制台…

STC32G12K128-旋转编码器-软件去抖

STC32G12K128-旋转编码器-软件去抖 简介代码 简介 EC11旋转编码器是一种可以连续旋转的器件A,B,C为旋转编码引脚&#xff0c;带按键的有D,E引脚。引脚功能&#xff1a; A&#xff1a;编码器A相&#xff1b;B&#xff1a;编码器B相&#xff1b;C&#xff1a;公共端-一般接到GN…

配置Jupyter Notebook环境及Token认证(Linux服务器)

配置Jupyter Notebook环境及Token认证&#xff08;Linux服务器&#xff09; 背景 在Ubuntu 18.04.6 LTS服务器&#xff08;IP: 39.105.167.2&#xff09;上&#xff0c;基于虚拟环境pytorch_env&#xff0c;通过Mac终端&#xff08;SSH&#xff09;配置Jupyter Notebook环境&…

从零开始学Flink:开启实时计算的魔法之旅

在凌晨三点的数据监控大屏前&#xff0c;某电商平台的技术负责人突然发现一个异常波动&#xff1a;支付成功率骤降15%。传统的数据仓库此时还在沉睡&#xff0c;而基于Flink搭建的实时风控系统早已捕捉到这个信号&#xff0c;自动触发预警机制。当运维团队赶到时&#xff0c;系…

基于k8s的Jenkins CI/CD平台部署实践(三):集成ArgoCD实现持续部署

基于k8s的Jenkins CI/CD平台部署实践&#xff08;三&#xff09;&#xff1a;集成ArgoCD实现持续部署 文章目录 基于k8s的Jenkins CI/CD平台部署实践&#xff08;三&#xff09;&#xff1a;集成ArgoCD实现持续部署一、Argocd简介二、安装Helm三、Helm安装ArgoCD实战1. 添加Arg…

[C++类和对象]类和对象的引入

面向过程和面向对象 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用来逐步解决问题 C是基于面向对象的,关注的是对象,将一件事情分成不同的对象,靠对象之间完成交互 类的引入 C语言结构体中只能定义变量,在C中,结构体不仅仅可以定义变量,而且可以定义函…

AWS之存储服务

目录 一、传统存储术语 二、传统存储与云存储的关系 三、云存储之AWS 使用场景 文件存储 数据块存储 对象存储 EBS、EFS、S3对比 EBS块存储 S3对象存储 S3 使用案例 S3 存储类 EFS文件存储 一、传统存储术语 分类 接口/技术类型 应用场景特点 关系及区别 机械硬…

WPDRRC 模型:构建动态闭环的信息安全防御体系

WPDRRC 模型是一种信息安全整体架构设计模型&#xff0c;由预警&#xff08;Warning&#xff09;、保护&#xff08;Protection&#xff09;、检测&#xff08;Detection&#xff09;、反应&#xff08;Reaction&#xff09;、恢复&#xff08;Recovery&#xff09;和反击&…