03 docker搭建

1 概念

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中,然后可以在几乎任何环境中运行,而无需担心环境差异带来的问题。

1. ​容器(Container)​​

容器是 Docker 的核心。它是一个轻量级、独立、可执行的软件包,包含:

  • 应用程序代码
  • 运行时环境(如 Python、Java、Node.js 等)
  • 系统工具和库
  • 配置文件
  • 容器与虚拟机不同,它不包含完整的操作系统,而是共享宿主机的内核,因此更加轻便、启动更快、资源占用更少。

2. ​镜像(Image)​​

镜像是容器的只读模板,用来创建容器。

比如,你可以有一个 "Ubuntu + Python + Flask" 的镜像,每次基于这个镜像启动的容器都会有一致的运行环境。

镜像是分层存储的,可以继承和复用,提高构建效率。

3. ​Dockerfile​

用于定义如何构建 Docker 镜像的文本文件,包含一系列指令,比如:

FROM python:3.9

WORKDIR /app

COPY . /app

RUN pip install -r requirements.txt

CMD ["python", "app.py"]

通过 docker build命令可以根据 Dockerfile 构建出镜像。

4. ​Docker 引擎(Docker Engine)​​

Docker 的核心后台服务,负责管理镜像、容器、网络和存储等。

包括:Docker Daemon(服务端)、Docker Client(命令行工具)、REST API。

5. ​Docker Hub​

官方的镜像仓库,类似于 GitHub,但存放的是 Docker 镜像。

你可以从 Docker Hub 上拉取(pull)公共镜像,比如 nginx、mysql、ubuntu,也可以将自己的镜像推送(push)上去。

2 安装docker

1. 卸载旧版本(如果有)

sudo apt-get remove docker docker-engine docker.io containerd runc

这一步是为了避免旧版本冲突,如果之前没装过,可以跳过。

2. 安装必要的依赖包

这些包允许 apt 通过 HTTPS 使用仓库:

sudo apt-get update

sudo apt-get install \

ca-certificates \

curl \

gnupg \

lsb-release

3. 添加 Docker 的官方 GPG 密钥

sudo mkdir -p /etc/apt/keyrings

curl -fsSL download.docker.com/linux/ubunt... | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

4. 设置 Docker 的稳定版仓库

echo \

"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] download.docker.com/linux/ubunt... \

$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

对于 jammy,$(lsb_release -cs)会自动返回 jammy。

5. 更新 apt 包索引

sudo apt-get update

6. 安装 Docker 引擎

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

这里安装了:

  • docker-ce:Docker 社区版引擎
  • docker-ce-cli:Docker 命令行客户端
  • docker-buildx-plugin:构建工具插件
  • docker-compose-plugin:Docker Compose(作为插件形式)

7. 验证 Docker 是否安装成功

运行一个测试容器:

sudo docker run hello-world

如果看到类似如下信息,说明 Docker 已经成功安装并运行:

Hello from Docker!

This message shows that your installation appears to be working correctly.

...

3 基本设置

3.1 开机启动

sudo systemctl enable docker

3.2 加入用户组

默认情况下,使用 Docker 命令需要 sudo。如果你不想每次都输入 sudo,可以把你的用户加入 docker用户组:

⚠️ 注意:docker组拥有类似 root 的权限,请谨慎操作。

sudo usermod -aG docker $USER

4 国内镜像加速

4.1 配置 daemon.json

编辑 Docker 配置文件(没有就新建):

sudo mkdir -p /etc/docker

sudo nano /etc/docker/daemon.json

写入以下内容(推荐几个国内可用镜像源):

{

"registry-mirrors": [

"mirror.ccs.tencentyun.com",

"docker.mirrors.huaweicloud.com",

"docker.mirrors.ustc.edu.cn"

]

}

4.2 重启 Docker 服务

sudo systemctl daemon-reexec

sudo systemctl restart docker

4.3 验证是否生效

docker info

正常情况应该能看到类似:

4.4 拉取镜像报错

docker pull nginx

原因:虽然 docker info 已经能看到 Registry Mirrors,但 docker pull nginx 还是直连 registry-1.docker.io,这说明 Docker 版本 20+ 之后 registry mirror 的机制发生了变化。

从 Docker 20.10 开始,官方的解释是:

  • registry-mirrors 只会对 docker.io 的流量做镜像加速
  • 但需要通过 mirror 实现代理功能(如 Docker Hub 代理),而不是直接换源
  • 部分国内镜像站已经不再提供 完整 Docker Hub 代理,所以即使配置了,也可能 fallback 回 registry-1.docker.io

4.5 优化方案

方法一:使用真正的「Docker Hub 代理」

比如:

Docker Proxy(官方推荐社区维护的代理)

尝试更新 /etc/docker/daemon.json:

{

"registry-mirrors": [

"docker.m.daocloud.io",

"mirror.ccs.tencentyun.com"

]

}

然后重启:

sudo systemctl daemon-reexec

sudo systemctl restart docker


方法二:直接拉取「代理仓库」中的镜像

比如腾讯云的 nginx:

docker pull mirror.ccs.tencentyun.com/library/nginx:latest

这相当于手动指定代理,而不是依赖 Docker daemon 自动切换。


方法三:自己搭建 Docker Hub Mirror(进阶)

如果你有一台国外服务器,可以用 registry mirror 搭建一个本地代理,再把它填到 daemon.json,这样 100% 可控。

4. 6 最终结果

终于做到了~

相关推荐
Swot14 小时前
Nuxt3 服务端调用其他 api 的方式
后端
SimonKing14 小时前
Chrome插件千万别乱装!手把手教你从官方渠道安全下载
java·后端·程序员
武子康14 小时前
大数据-84 Spark RDD创建全攻略:从集合、文件到转换操作详解
大数据·后端·spark
软件开发JR14 小时前
基于Spring Boot的社区团购系统的设计与实现
数据库·spring boot·后端·php
小楓120115 小时前
MySQL數據庫開發教學(四) 後端與數據庫的交互
前端·数据库·后端·mysql
这里有鱼汤15 小时前
A股预测还能更准?开源大模型Kronos带你跑通预测+回测全流程
后端·python
shark_chili15 小时前
Java程序员的Linux性能调优宝典:三大经典场景深度剖析
后端
小流苏生15 小时前
或许,找对象真的太难了……
前端·后端·程序员
勇哥java实战分享15 小时前
聊聊六种负载均衡算法
后端