Linux服務(wù)器上使用docker的簡單教程
00 需求
需要配置一些新的服務(wù)器,只能通過 ssh boss@172.16.1.100 來連接,然后在 /data1 磁盤下創(chuàng)建自己的 docker,用 ssh 連接 docker 來使用服務(wù)器。
(boss 和 172.16.1.100 地址均為虛構(gòu),在使用時,需要替換成自己希望配置的服務(wù)器地址,和可以使用的賬號)
系統(tǒng):Ubuntu 20.04,有 nvidia 顯卡。
01 安裝 docker
(我需要配置的服務(wù)器里已經(jīng)安裝了 docker,因此沒有做這個步驟。以下教程是 LLM 生成的)
# 首先,確保系統(tǒng)中沒有舊版本的 Docker sudo apt-get remove docker docker-engine docker.io containerd runc # 然后,更新包列表并安裝必要的包 sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl software-properties-common # 添加 Docker 的官方 GPG 密鑰 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 設(shè)置 Docker 的穩(wěn)定版?zhèn)}庫 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # 更新包列表以包含 Docker 倉庫中的軟件包 sudo apt-get update # 安裝 Docker CE、Docker CLI 和 Containerd sudo apt-get install docker-ce docker-ce-cli containerd.io # 檢查 Docker 的安裝版本 docker --version # 驗證 Docker 是否安裝成功,這個命令會下載并運行一個測試鏡像 sudo docker run hello-world # 最后,配置 Docker 開機自啟 sudo systemctl enable docker
為了不使用 sudo 運行 Docker 命令,可以將當前用戶添加到 docker 組:
sudo usermod -aG docker $USER
重新登錄或重啟系統(tǒng)以使組更改生效。
02 準備工作
新建準備放 docker 的目錄,并改變目錄權(quán)限:(<user_name> 是我的名字,在跑命令時,需要替換成希望 docker 擁有的名字)
sudo mkdir /data1/<user_name> sudo chown boss /data1/<user_name>/ -R sudo chgrp boss /data1/<user_name>/ -R mkdir /data1/<user_name>/docker mkdir /data1/<user_name>/project
配置 ssh 的 authorized_keys:
cd /data1/<user_name>/docker/ vim authorized_keys # 把本地電腦 user/.ssh 里面的 id_rsa.pub 的內(nèi)容復(fù)制上去
03 配置 Dockerfile 和 docker composer
新建 Dockerfile:
cd /data1/<user_name>/docker/ vim Dockerfile
Dockerfile 的具體內(nèi)容:
# 看一下 docker images 里面有哪些鏡像
FROM nvidia/cuda:11.6.0-devel-ubuntu20.04
# 設(shè)置時區(qū)
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 安裝基礎(chǔ)軟件
RUN apt-get update && \
apt-get install -y \
openssh-server \
python3 \
python3-pip \
vim \
git \
wget \
curl \
unzip \
sudo \
net-tools \
iputils-ping \
build-essential \
cmake \
htop \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 安裝其他軟件
RUN apt-get update && \
apt-get install -y \
tmux \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 創(chuàng)建用戶(保持與宿主機相同的 UID 避免權(quán)限問題)
RUN useradd -m -u 1001 -s /bin/bash <user_name>
# sudo without password
RUN echo "<user_name> ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
USER <user_name>
WORKDIR /home/<user_name>
# 創(chuàng)建 .ssh 目錄并設(shè)置權(quán)限
RUN mkdir -p /home/<user_name>/.ssh && \
chown -R <user_name>:<user_name> /home/<user_name>/.ssh && \
chmod 700 /home/<user_name>/.ssh
# 安裝 Conda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh && \
bash miniconda.sh -b -p /home/<user_name>/miniconda && \
rm miniconda.sh
RUN /home/<user_name>/miniconda/bin/conda init bash
CMD ["/bin/bash"]配置 docker composer 之前,先確認哪個端口可用:
sudo netstat -tuln # 找一個不被列出的端口,比如 8012
然后,新建 docker composer:
cd /data1/<user_name>/docker/ vim docker-compose.yml
docker-compose.yml 的具體內(nèi)容:
version: '3.8'
services:
<user_name>:
container_name: <user_name> # 設(shè)置容器名稱
build: . # 使用當前目錄下的 Dockerfile 構(gòu)建鏡像
image: <user_name> # 鏡像名稱
restart: unless-stopped
runtime: nvidia # 啟用 GPU 支持
ports:
- "8012:22" # 選擇一個未被占用的端口(請確認 8012 可用)
volumes:
- /data1/<user_name>/project:/home/<user_name>/project # 掛載項目目錄
- /data1/<user_name>/docker/authorized_keys:/home/<user_name>/.ssh/authorized_keys # SSH
environment:
- NVIDIA_DRIVER_CAPABILITIES=all
command: /bin/bash -c "sudo service ssh start && sleep infinity"
一個兼容舊版本 docker 的 docker composer(我并不懂什么舊版本,都是專家寫的)
services:
container_name: <user_name> # 設(shè)置容器名稱
build: . # 使用當前目錄下的 Dockerfile 構(gòu)建鏡像
restart: unless-stopped
ports:
- "8012:22" # 選擇一個未被占用的端口(請確認 8012 可用)
volumes:
- /data1/<user_name>/project:/home/<user_name>/project # 掛載項目目錄
- /data1/<user_name>/docker/authorized_keys:/home/<user_name>/.ssh/authorized_keys # SSH
environment:
- NVIDIA_DRIVER_CAPABILITIES=all
command: /bin/bash -c "sudo service ssh start && sleep infinity"04 啟動 docker
然后,啟動 docker:
cd /data1/<user_name>/docker/ docker compose build # build Dockerfile docker compose up -d # 啟動 docker # 舊版本 docker docker-compose build # build Dockerfile docker-compose up -d # 啟動 docker # 進入 docker 看一下 docker exec -it <user_name> bash # 然后 ls,會看到 miniconda 和 project 兩個目錄,所有需要映射到磁盤、不希望丟失的文件都需要放到 project 里 # 查看目錄權(quán)限 ls -al # 發(fā)現(xiàn)權(quán)限有問題,退出 docker,再改一下目錄的權(quán)限 sudo chown boss /data1/<user_name>/ -R sudo chgrp boss /data1/<user_name>/ -R # 如果發(fā)現(xiàn) Dockerfile 寫錯了,或者想加一些東西,可以再跑 docker compose build # build Dockerfile docker compose up -d # 會變成 Recreating <user_name> # 假設(shè)已經(jīng)進入了 docker,想改 docker 的 ./ssh 的權(quán)限 docker exec -it <user_name> bash sudo chown <user_name> ~/.ssh -R sudo chgrp <user_name> ~/.ssh -R # 暫時停止和啟動 docker docker compose stop docker compose start # 把 docker 殺掉 docker compose down
05 測試能否 ssh 連接這個 docker(可能需要結(jié)合 04 來 debug)
# 在本地電腦上連接 ssh -p 8012 <user_name>@172.16.1.100
ssh 連接不成功(比如讓輸密碼),很可能是 docker 內(nèi)外的 .ssh 或 authorize_keys 的權(quán)限出了問題,docker 外要改成 boss,dockers 內(nèi)要改成 <user_name>。
如果連接時出現(xiàn)
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 刪除,上面的錯誤提示會給出需要執(zhí)行的命令。
以上就是Linux服務(wù)器上使用docker的簡單教程的詳細內(nèi)容,更多關(guān)于Linux使用docker的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
CentOS Linux系統(tǒng)搭建Android開發(fā)環(huán)境詳細介紹
這篇文章主要介紹了CentOS Linux系統(tǒng)搭建Android開發(fā)環(huán)境詳細介紹的相關(guān)資料,需要的朋友可以參考下2016-11-11
Linux系統(tǒng)中systemd服務(wù)啟動失敗問題排查和解決方法(以ad_auth.service為例)
在 Linux 系統(tǒng)中,systemd 是管理服務(wù)和進程的核心工具,然而,在實際運維中,我們經(jīng)常會遇到服務(wù)啟動失敗的情況,本文將以一個具體的案例——ad_auth.service 啟動失敗為例,詳細介紹如何排查和解決此類問題,需要的朋友可以參考下2025-01-01

