标签: ubuntu

  • ubuntu上部署docker


    第一部分:极简安装 Docker

    1. sudo apt remove docker docker-engine docker.io containerd runc
    2. sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg
    3. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    4. echo “deb [arch=amd64 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
    5. sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io

    第二部分:核心难点——解决“拉取不到镜像”

    这是所有国内 Docker 初学者遇到的最大拦路虎。当你执行 docker pull 时,经常会卡住或报错 TLS handshake timeout。这是因为 Docker Hub 的官方服务器在海外。

    出现的报错示例:

    root@gx-VMware-Virtual-Platform:~# docker pull nginx Using default tag: latest Error response from daemon: failed to resolve reference "docker.io/library/nginx:latest": failed to do request: Head "https://registry-1.docker.io/v2/library/nginx/manifests/latest": dial tcp 128.242.240.117:443: connect: connection refused

    针对这个问题,我为你整理了三种不同层级的解决方案:

    方案一:配置国内镜像加速器(基础方案)

    这是最常规的方法,但近期国内很多镜像站(如阿里云、网易等)经常不稳定。建议优先尝试,不行再换方案二。

    1. 创建或修改配置文件:(用vim编辑也可,只是需要apt-get install vim)sudo mkdir -p /etc/docker
      sudo nano /etc/docker/daemon.json
    2. 在文件中粘贴以下内容(这里提供几个目前相对可用的):{
      "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://huecker.io",
        "https://dockerhub.timeweb.cloud"
      ]
      }
    3. 保存退出(按 Ctrl+O 回车,再按 Ctrl+X)。
    4. 重启 Docker 服务让配置生效:sudo systemctl daemon-reload
      sudo systemctl restart docker

    方案二:配置 Docker 代理(进阶稳妥方案)

    如果你有自己的 VPN 或代理节点(比如你的物理机上开了代理,或者局域网内有代理服务器),让 Docker 走代理是最稳的。

    注意: Docker 拉取镜像不走系统环境变量的代理,必须单独配置 systemd。

    1. 创建配置目录:sudo mkdir -p /etc/systemd/system/docker.service.d
    2. 创建代理文件:sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
    3. 粘贴以下内容(假设你的代理在 192.168.1.100 的 7890 端口,请根据实际情况修改):[Service]
      Environment="HTTP_PROXY=http://192.168.1.100:7890"
      Environment="HTTPS_PROXY=http://192.168.1.100:7890"
    4. 重启服务:sudo systemctl daemon-reload
      sudo systemctl restart docker

    第三部分:渗透测试常用 Docker 操作速查

    搭建好环境后,我们来实战。不讲虚的,只讲你做实验、搭靶场最常用的命令。

    1. 概念速解

    • 镜像 (Image): 相当于“光盘”或“安装包”。(只读的)
    • 容器 (Container): 相当于“运行起来的系统”。(可读写的)

    2. 只有 5 个命令的“生存指南”

    假设我们要搭建一个 nginx web服务器做测试。

    Step 1: 运行容器 (Run)

    格式: docker run -d -p [宿主机端口]:[容器内部端口] --name [起个名字] [镜像名]

    sudo docker run -d -p 8080:80 --name my-web nginx
    • -d: 后台运行(不占用你当前的终端)。
    • -p 8080:80: 最关键!把你的 Ubuntu 的 8080 端口映射给容器的 80 端口。
    • 测试: 打开浏览器访问 http://localhost:8080,你应该能看到 Nginx 欢迎页。

    Step 2: 查看正在运行的容器 (Ps)

    sudo docker ps
    • 你能看到容器 ID、状态、端口映射情况。如果不加参数,只显示运行中的;docker ps -a 显示所有的。

    Step 3: 进入容器内部 (Exec)

    这就好比 SSH 连进了一台虚拟机,适合进去修改配置文件或查看 Flag。

    格式: docker exec -it [容器名/ID] /bin/bash
    sudo docker exec -it my-web /bin/bash
    • 退出容器输入 exit 即可。

    Step 4: 停止与启动 (Stop/Start)

    sudo docker stop my-web  # 关机
    sudo docker start my-web # 开机

    Step 5: 删除容器 (Rm)

    做完实验,清理现场。

    sudo docker stop my-web  # 先停止
    sudo docker rm my-web   # 再删除
    如果想连镜像也删了: docker rmi nginx

    第四部分:常见“坑点”排雷指南

    坑点 2:端口冲突 (Bind for 0.0.0.0:xx failed)

    现象: 运行容器时报错:port is already allocated。

    原因: 你指定的宿主机端口(冒号左边的端口)已经被别的程序占用了。

    解决: 换个端口。比如原命令是 -p 80:80,改成 -p 8081:80 即可。

    坑点 3:名字冲突 (The container name “/xxx” is already in use)

    现象: 再次运行同一个 docker run 命令报错。

    原因: 即使容器停止了,它还在那躺着(类似关机的电脑)。你不能创建一个同名的新容器。

    解决:

    1. 删除旧的:docker rm [容器名]
    2. 或者给新的容器起个不同的名字:--name my-web-2