安裝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
- 阿里云專屬鏡像配置(可選)
- 訪問 ?**阿里云容器鏡像服務**?,注冊并獲取專屬加速地址;
- 將腳本中的鏡像地址替換為你的阿里云專屬地址(如
https://xxx.mirror.aliyuncs.com
)。
執行以下命令查看鏡像源狀態 “Registry Mirrors”:
docker info
4.測試
sudo docker run hello-world
輸出: Hello from Docker!
5.Docker命令補全
一、基礎環境配置
-
?**安裝
bash-completion
**?sudo apt-get update && sudo apt-get install -y bash-completion
該工具為 bash shell 提供基礎補全框架,是 Docker 補全功能的前置依賴。
-
?激活全局補全配置?
編輯~/.bashrc
文件,確保以下內容已啟用:
vim ~/.bashrc
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then. /etc/bash_completion fi
執行
source ~/.bashrc
使配置生效。
二、Docker 專用補全配置
-
?下載 Docker 官方補全腳本?
sudo curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker \-o /etc/bash_completion.d/docker
該腳本覆蓋所有 Docker 命令及子命令的補全規則。
-
?**啟用 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
三、驗證與調試
-
?立即生效配置?
exec bash # 或重新啟動終端
-
?測試補全功能?
- 輸入
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 |
五、進階優化(適用于生產環境)
-
?多用戶全局配置?
將補全腳本部署到/etc/bash_completion.d/
而非用戶目錄,實現系統級補全支持 -
?容器內補全支持
?在 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 下載此圖像。 |
12 | Docker 卷的存儲驅動程序。 有關支持的選項,請參閱 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 鏡像的名稱。 |