Featured image of post Docker

Docker

在容器中运行程序

太长不看:跳转至此处

什么是Docker

Docker是一组平台即服务(PaaS)的产品。

它基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器,托管容器的软件称为Docker引擎。

Docker能够帮助开发者在轻量级容器中自动部署应用程序,并使得不同容器中的应用程序彼此隔离,高效工作。

为什么需要Docker

Docker解决了以下问题:

  1. Linux内部环境差异导致的软件一致性问题
  2. 环境不一致与依赖地狱(编译器版本、依赖的第三方库的版本)
  3. 隔离性与安全性(进程级的隔离)

Docker的优势:

  1. 如果所有软件都运行在同一个主机操作系统上,一个应用的行为异常(例如内存泄漏、疯狂占用 CPU)或安全漏洞可能会影响到同一主机上的其他应用,甚至导致系统崩溃,在Docker环境中则不会发生。
  2. 提高资源利用率与效率 (比虚拟机效率更高)
  3. 简化软件部署流程(快速实现软件开发/运行环境的准备)

Docker与虚拟机的比较

Linux环境下的Docker安装

以下操作均以 Ubuntu-22.04 LTS 为例。

准备工作

安装基础依赖:

1
2
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release

配置镜像源

1
2
3
4
5
6
7
8
# 添加阿里云GPG密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新APT缓存
sudo apt-get update

安装Docker引擎

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

启动Docker服务

1
2
3
4
5
6
7
8
# 启动服务
sudo systemctl start docker

# 设置开机自启
sudo systemctl enable docker

# 验证服务状态
sudo systemctl status docker

配置镜像加速器

创建配置文件目录(已存在可跳过)

1
sudo mkdir -p /etc/docker

通过命令行生成配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://docker.imgdb.de",
        "https://docker-0.unsee.tech",
        "https://docker.hlmirror.com"
    ]
}
EOF

应用配置

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

以下为可选操作:

点击展开
  • 验证配置
1
2
3
4
5
#测试基础镜像 
sudo docker pull hello-world

#查看已用镜像源 
docker info | grep Mirrors -A 3
  • 用户权限配置(免sudo)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 添加docker用户组
sudo groupadd docker

# 将当前用户加入docker组

sudo usermod -aG docker $USER

# 激活组权限变更
newgrp docker

# 验证权限
docker run hello-world

日志分析

1
2
3
4
5
# 查看Docker服务日志
journalctl -u docker.service --since "2025-08-01" --no-pager

# 查看容器日志
docker logs -f [容器ID] --tail 100

案例

以下提供一些个人使用的Docker。

所有操作必须在Docker安装完成后进行!

OpenList

OpenList 是一个支持多种存储的文件列表程序,是一个有韧性、长期治理、社区驱动的 AList 分支,旨在防御基于信任的开源攻击

Docker CLI方法

首先创建目录:

1
mkdir -p /etc/openlist

然后执行命令:

1
2
3
4
5
docker run --user $(id -u):$(id -g) -d \
        --restart=unless-stopped \
        -v /etc/openlist:/opt/openlist/data \
        -p 5244:5244 -e UMASK=022 \
        --name="openlist" openlistteam/openlist:latest

Docker Compose方法

创建docker-compose.yml文件:

1
2
3
mkdir -p /opt/openlist      # 可以替换为其他目录
cd /opt/openlist
vim docker-compose.yml

写入以下内容,然后保存并退出:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# docker-compose.yml
services:
  openlist:
    image: 'openlistteam/openlist:latest'   # 默认选择最新镜像
    container_name: openlist                # 容器名称
    user: '0:0'                             # 更换为镜像所在目录的user和group
    volumes:
      - './data:/opt/openlist/data'         # 挂载的目录,宿主机目录在前
    ports:
      - '5244:5244'                         # 将Docker的5244端口映射到宿主机的5244端口
    environment:
      - UMASK=022
    restart: unless-stopped                 # 如果不是手动停止则开机自启

在终端中执行:

1
ls -l

输出示例:

1
drwxr-xr-x 2 user group 4096 Mar 11 16:31 example_dir

即可查看到当前目录的所有者usergroup

在 docker-compose.yml 相同目录下执行:

1
2
docker compose pull
docker compose up -d

Openlist 即可启动

需要更新,则进入docker-compose.yml相同目录,然后运行:

1
2
3
docker compose pull
docker compose down
docker compose up -d

ddns-go

ddns-go 可以自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名。

挂载主机目录,使用docker host模式。可把/opt/ddns-go替换为你主机任意目录,配置文件为隐藏文件:

1
2
3
4
5
docker run -d \ 
        --name ddns-go \
        --restart=always \
        --net=host \
        -v /opt/ddns-go:/root jeessy/ddns-go
网站总访客数:Loading

使用 Hugo 构建
主题 StackJimmy 设计