1. 安装Docker

更新源与系统软件

更新软件列表,查看可安装升级的软件

sudo apt update

升级本机可升级的软件

#-y:自动确认
sudo apt upgrade -y

安装依赖

#ca-certificates:HTTPS证书验证用,安全下载Docker官方GPG key必须用
#curl:用于从 URL 下载安装文件
#gnupg:用于 GPG key 解码/转换
#lsb-release:用于获取系统代号(如 jammy、focal),添加 docker 源会用到
sudo apt install -y ca-certificates curl gnupg lsb-release

2. 添加Docker官方仓库

导入Docker官方GPG key

#curl -fsSL https://xxx/gpg
#-f:遇到错误时退出
#-s:静默模式,不显示进度条
#-S:如出现错误,显示错误信息
#-L:允许重定向

#|:管道,表示把curl下载的数据交给gpg
#gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#gpg:GNU隐私保护工具,用来处理签名和密钥
#--dearmor:把ASCII格式的key转成apt能识别的二进制格式
#-o:输出到指定路径供apt使用
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加Docker官方apt源

#echo "deb [...]":输出一段Docker的apt仓库配置的文本
#deb [选项] 仓库地址 系统代号 软件通道
#deb:表示 Debian/Ubuntu 二进制包仓库
#arch=$(dpkg --print-architecture):自动取系统架构
#signed-by=xxx.gpg:指定使用刚才保存的gpg key验证软件可信度
#https://download.docker.com/linux/ubuntu:Docker 官方仓库地址
#$(lsb_release -cs):填入发行版本名称
#stable:使用稳定版 Docker

#| sudo tee xxx.list
#tee:把文本写入到文件
#xxx.list:Docker软件仓库的配置文件
#> /dev/null:丢弃 tee 的输出信息,只留下结果,界面更干净
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

再次更新软件索引

因为添加了一个新的仓库,apt 需要重新扫描一次软件源。

sudo apt update

安装Docker Engine

#docker-ce:Docker Community Edition(Docker 主服务)
#docker-ce-cli:Docker 命令行工具(docker 命令)
#containerd.io:底层容器运行时,Docker 必须依赖
#docker-buildx-plugin:新版构建工具 buildx
#docker-compose-plugin:新版 compose(直接使用 docker compose)
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动Docker服务

#systemctl:控制系统服务(systemd)
#enable:设置为开机自动启动
#--now:立即启动服务(不用重启)
sudo systemctl enable --now docker
#执行完成会有如下提示信息
#Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-#sysv-install.
#Executing: /lib/systemd/systemd-sysv-install enable docker

查看docker是否正常运行

sudo systemctl status docker
#docker启动成功提示信息:
#docker.service - Docker Application Container Engine
#     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
#     Active: active (running) since Thu 2025-11-20 16:51:23 CST; 2min 29s ago
#TriggeredBy: ● docker.socket
#       Docs: https://docs.docker.com
#   Main PID: 3429 (dockerd)
#      Tasks: 9
#    Memory: 22.7M
#       CPU: 459ms
#     CGroup: /system.slice/docker.service
#             └─3429 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/cont>

3. 安装并运行SQLi-Labs

拉取镜像

#docker pull:从Docker Hub拉取镜像
#acgpiano/sqli-labs:镜像仓库名
#latest:标签(可不写,默认 latest)
docker pull acgpiano/sqli-labs:latest

运行SQLi-Labs容器

#-d:后台运行
#--name sqli-labs:给容器取名字
#-p 8080:80:端口映射:主机 8080 → 容器 80(访问用 http://localhost:8080)
#--restart unless-stopped:自动重启策略,除非手动停止
#acgpiano/sqli-labs:latest:镜像名
docker run -d --name sqli-labs -p 8080:80 --restart unless-stopped acgpiano/sqli-labs:latest
#启动成功后生成:
#30bfff7c6e7e928b5319017901b0d0e5832741140bcacd4dd81c2cd154790313

初始化SQLi-Labs数据库

在浏览器打开:

http://localhost:8080/sql-connections/setup-db.php

显示如下信息,则初始化成功

进入SQLi-Labs靶场

在火狐浏览器下载HackBar插件

查看正在运行的容器【可选】

docker ps
#已经启动的容器会显示在下方:
#CONTAINER ID   IMAGE                       COMMAND       CREATED   STATUS  PORTS   NAMES                              
#30bfff7c6e7e   acgpiano/sqli-labs:latest   "/run.sh"   About a minute ago   Up About a #minute   3306/tcp, 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp   sqli-labs

进入容器内部【可选】

#exec:在容器内执行命令
#-it:交互式分配终端
#/bin/bash:进入bash shell
docker exec -it sqli-labs /bin/bash

停止容器【可选】

docker stop sqli-labs

删除容器【可选】

docker rm sqli-labs

删除镜像【可选】

docker rmi acgpiano/sqli-labs:latest

更多推荐