• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Linux服务器上使用docker的简单教程

    发布者: 涵韵3588 | 发布时间: 2025-8-15 02:12| 查看数: 63| 评论数: 0|帖子模式

    00 需求

    需要配置一些新的服务器,只能通过 ssh boss@172.16.1.100 来连接,然后在 /data1 磁盘下创建自己的 docker,用 ssh 连接 docker 来使用服务器。
    (boss 和 172.16.1.100 地址均为虚构,在使用时,需要替换成自己希望配置的服务器地址,和可以使用的账号)
    系统:Ubuntu 20.04,有 nvidia 显卡。

    01 安装 docker

    (我需要配置的服务器里已经安装了 docker,因此没有做这个步骤。以下教程是 LLM 生成的)
    1. # 首先,确保系统中没有旧版本的 Docker
    2. sudo apt-get remove docker docker-engine docker.io containerd runc

    3. # 然后,更新包列表并安装必要的包
    4. sudo apt-get update
    5. sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

    6. # 添加 Docker 的官方 GPG 密钥
    7. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

    8. # 设置 Docker 的稳定版仓库
    9. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

    10. # 更新包列表以包含 Docker 仓库中的软件包
    11. sudo apt-get update

    12. # 安装 Docker CE、Docker CLI 和 Containerd
    13. sudo apt-get install docker-ce docker-ce-cli containerd.io

    14. # 检查 Docker 的安装版本
    15. docker --version

    16. # 验证 Docker 是否安装成功,这个命令会下载并运行一个测试镜像
    17. sudo docker run hello-world

    18. # 最后,配置 Docker 开机自启
    19. sudo systemctl enable docker
    复制代码
    为了不使用 sudo 运行 Docker 命令,可以将当前用户添加到 docker 组:
    1. sudo usermod -aG docker $USER
    复制代码
    重新登录或重启系统以使组更改生效。

    02 准备工作

    新建准备放 docker 的目录,并改变目录权限:(<user_name> 是我的名字,在跑命令时,需要替换成希望 docker 拥有的名字)
    1. sudo mkdir /data1/<user_name>
    2. sudo chown boss /data1/<user_name>/ -R
    3. sudo chgrp boss /data1/<user_name>/ -R
    4. mkdir /data1/<user_name>/docker
    5. mkdir /data1/<user_name>/project
    复制代码
    配置 ssh 的 authorized_keys:
    1. cd /data1/<user_name>/docker/
    2. vim authorized_keys
    3. # 把本地电脑 user/.ssh 里面的 id_rsa.pub 的内容复制上去
    复制代码
    03 配置 Dockerfile 和 docker composer

    新建 Dockerfile:
    1. cd /data1/<user_name>/docker/
    2. vim Dockerfile
    复制代码
    Dockerfile 的具体内容:
    1. # 看一下 docker images 里面有哪些镜像
    2. FROM nvidia/cuda:11.6.0-devel-ubuntu20.04

    3. # 设置时区
    4. ENV TZ=Asia/Shanghai
    5. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

    6. # 安装基础软件
    7. RUN apt-get update && \
    8.     apt-get install -y \
    9.     openssh-server \
    10.     python3 \
    11.     python3-pip \
    12.     vim \
    13.     git \
    14.     wget \
    15.     curl \
    16.     unzip \
    17.     sudo \
    18.     net-tools \
    19.     iputils-ping \
    20.     build-essential \
    21.     cmake \
    22.     htop \
    23.     && apt-get clean \
    24.     && rm -rf /var/lib/apt/lists/*


    25. # 安装其他软件
    26. RUN apt-get update && \
    27.     apt-get install -y \
    28.     tmux \
    29.     && apt-get clean \
    30.     && rm -rf /var/lib/apt/lists/*

    31. # 创建用户(保持与宿主机相同的 UID 避免权限问题)
    32. RUN useradd -m -u 1001 -s /bin/bash <user_name>

    33. # sudo without password
    34. RUN echo "<user_name> ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

    35. USER <user_name>
    36. WORKDIR /home/<user_name>

    37. # 创建 .ssh 目录并设置权限
    38. RUN mkdir -p /home/<user_name>/.ssh && \
    39.     chown -R <user_name>:<user_name> /home/<user_name>/.ssh && \
    40.     chmod 700 /home/<user_name>/.ssh

    41. # 安装 Conda
    42. RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh && \
    43.     bash miniconda.sh -b -p /home/<user_name>/miniconda && \
    44.     rm miniconda.sh
    45. RUN /home/<user_name>/miniconda/bin/conda init bash

    46. CMD ["/bin/bash"]
    复制代码
    配置 docker composer 之前,先确认哪个端口可用:
    1. sudo netstat -tuln
    2. # 找一个不被列出的端口,比如 8012
    复制代码
    然后,新建 docker composer:
    1. cd /data1/<user_name>/docker/
    2. vim docker-compose.yml
    复制代码
    docker-compose.yml 的具体内容:
    1. version: '3.8'

    2. services:
    3.   <user_name>:
    4.     container_name: <user_name> # 设置容器名称
    5.     build: . # 使用当前目录下的 Dockerfile 构建镜像
    6.     image: <user_name> # 镜像名称
    7.     restart: unless-stopped
    8.     runtime: nvidia # 启用 GPU 支持
    9.     ports:
    10.       - "8012:22" # 选择一个未被占用的端口(请确认 8012 可用)
    11.     volumes:
    12.       - /data1/<user_name>/project:/home/<user_name>/project # 挂载项目目录
    13.       - /data1/<user_name>/docker/authorized_keys:/home/<user_name>/.ssh/authorized_keys  # SSH
    14.     environment:
    15.       - NVIDIA_DRIVER_CAPABILITIES=all
    16.     command: /bin/bash -c "sudo service ssh start && sleep infinity"
    复制代码
    一个兼容旧版本 docker 的 docker composer(我并不懂什么旧版本,都是专家写的)
    1. services:
    2.   container_name: <user_name> # 设置容器名称
    3.   build: . # 使用当前目录下的 Dockerfile 构建镜像
    4.   restart: unless-stopped
    5.   ports:
    6.     - "8012:22" # 选择一个未被占用的端口(请确认 8012 可用)
    7.   volumes:
    8.     - /data1/<user_name>/project:/home/<user_name>/project # 挂载项目目录
    9.     - /data1/<user_name>/docker/authorized_keys:/home/<user_name>/.ssh/authorized_keys  # SSH
    10.   environment:
    11.     - NVIDIA_DRIVER_CAPABILITIES=all
    12.   command: /bin/bash -c "sudo service ssh start && sleep infinity"
    复制代码
    04 启动 docker

    然后,启动 docker:
    1. cd /data1/<user_name>/docker/
    2. docker compose build  # build Dockerfile
    3. docker compose up -d  # 启动 docker
    4. # 旧版本 docker
    5. docker-compose build  # build Dockerfile
    6. docker-compose up -d  # 启动 docker

    7. # 进入 docker 看一下
    8. docker exec -it <user_name> bash
    9. # 然后 ls,会看到 miniconda 和 project 两个目录,所有需要映射到磁盘、不希望丢失的文件都需要放到 project 里

    10. # 查看目录权限
    11. ls -al

    12. # 发现权限有问题,退出 docker,再改一下目录的权限
    13. sudo chown boss /data1/<user_name>/ -R
    14. sudo chgrp boss /data1/<user_name>/ -R

    15. # 如果发现 Dockerfile 写错了,或者想加一些东西,可以再跑
    16. docker compose build  # build Dockerfile
    17. docker compose up -d  # 会变成 Recreating <user_name>

    18. # 假设已经进入了 docker,想改 docker 的 ./ssh 的权限
    19. docker exec -it <user_name> bash
    20. sudo chown <user_name> ~/.ssh -R
    21. sudo chgrp <user_name> ~/.ssh -R

    22. # 暂时停止和启动 docker
    23. docker compose stop
    24. docker compose start

    25. # 把 docker 杀掉
    26. docker compose down
    复制代码
    05 测试能否 ssh 连接这个 docker(可能需要结合 04 来 debug)
    1. # 在本地电脑上连接
    2. ssh -p 8012 <user_name>@172.16.1.100
    复制代码
    ssh 连接不成功(比如让输密码),很可能是 docker 内外的 .ssh 或 authorize_keys 的权限出了问题,docker 外要改成 boss,dockers 内要改成 <user_name>。
    如果连接时出现
    1. ECDSA host key for [172.16.1.100]:8012 has changed and you have requested strict checking.Host key verification failed.
    复制代码
    则需要把 known_host 里面的 172.16.1.100 删除,上面的错误提示会给出需要执行的命令。
    以上就是Linux服务器上使用docker的简单教程的详细内容,更多关于Linux使用docker的资料请关注脚本之家其它相关文章!

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表