当前位置: 首页 > ds >正文

【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镜像地址

sudo mkdir -p /etc/docker && \
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]
}
EOF
sudo systemctl daemon-reload && \
sudo systemctl restart docker
  • 阿里云专属镜像配置(可选)
  1. 访问 ‌**阿里云容器镜像服务**‌,注册并获取专属加速地址;
  2. 将脚本中的镜像地址替换为你的阿里云专属地址(如 https://6k0ibwjk.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,应显示 runrm 等命令
    • 输入 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这与前面步骤中创建的网络相对应。
6jenkins 网络中,将 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 守护进程。
11docker: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指定由 dockerdocker-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.xdnf.cn/news/4108.html

相关文章:

  • 促销量化模型简介和示例
  • 商业秘密泄露后的法律救济
  • 36、C#中的⽅法声明参数关键字params,ref,out的意义及⽤法
  • 微前端qiankun动态路由权限设计与数据通信方案
  • Python中有序序列容器的概念及其与可变性的关系
  • Excel VBA 自定义函数
  • 深入探索 Apache Spark:从初识到集群运行原理
  • conda配置好的pytorch在jupyter中如何配置
  • 【心海资源】telegram换U地址完整源码
  • Attention Is All You Need 翻译版
  • 在macOS上安装windows系统
  • Java面试深度解密:Spring Boot、Redis、日志优化、JUnit5及Kafka事务核心技术解析
  • 精益数据分析(40/126):移动应用商业模式的关键指标与盈利策略
  • 签名去背景图像处理实例
  • HTML5 新元素
  • llama_factory0.9.3微调Qwen3
  • 互联网大厂Java面试:从Java SE到微服务的全栈挑战
  • Unity:输入系统(Input System)与持续检测键盘按键(Input.GetKey)
  • android-ndk开发(5): 编译运行 hello-world
  • 【C++类】序幕
  • 【SpringBoot篇】详解短信验证码登录功能实现
  • C与指针——常见库函数
  • 【Linux】进程控制
  • linux inotify 资源详解
  • 数据结构之二叉树(4)
  • 一款基于 .NET 开源的多功能的 B 站视频下载工具
  • vulkanscenegraph显示倾斜模型(6.5)-vsg::DatabasePager
  • 网络安全自动化:精准把握自动化边界,筑牢企业安全防
  • 拷贝多个Excel单元格区域为图片并粘贴到Word
  • 谷歌最新推出的Gemini 2.5 Flash人工智能模型因其安全性能相较前代产品出现下滑