:-) Docker


Ubuntu安裝Docker

# 更新軟件源列表
sudo apt update

# 安裝依賴
sudo apt install apt-transport-https ca-certificates curl software-properties-common

# 在系統中添加Docker的官方密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加Docker源,選擇stable長期穩定版
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

# 查看可以安裝的Docker版本
sudo apt-cache policy docker-ce

# 開始安裝Docker(ce表示社區版)
sudo apt install docker-ce

# 查看安裝的Docker版本
docker -v

# 啟動Docker服務
sudo systemctl start docker

# 設置開機自啟動docker
sudo systemctl enable docker

# 查看Docker是否開啟,出現綠色圓點表示服務正常開啟
sudo systemctl status docker

Ubuntu離線安裝Docker

Docker的離線安裝需要用到containerd.io ,docker-ce-cli,docker-ce,從下面的網址下載指定的版本。
link: https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/
image

安裝

安裝的順序為:containerd.io ,docker-ce-cli,docker-ce
image

如果出現

在執行dpkg -i containerd.io_1.3.7-1_amd64.deb 時出現報錯:

(正在讀取數據庫 ... 系統當前共安裝有 186840 個文件和目錄。)
正准備解包 containerd.io_1.3.7-1_amd64.deb  ...
正在將 containerd.io (1.3.7-1) 解包到 (1.3.7-1) 上 ...
dpkg: 依賴關系問題使得 containerd.io 的配置工作不能繼續:
 containerd.io 依賴於 libseccomp2 (>= 2.4.0);然而:
系統中 libseccomp2:amd64 的版本為 2.2.3-3kord3。

dpkg: 處理軟件包 containerd.io (--install)時出錯:
 依賴關系問題 - 仍未被配置
正在處理用於 man-db (2.7.5-1kord) 的觸發器 ...
在處理時有錯誤發生:
 containerd.io

解決辦法:

  • 在線安裝
apt-get install -y libltdl7 libseccomp2
dpkg -i libseccomp2_2.4.3-1ubuntu1_amd64.deb

啟動Docker

sudo systemctl start docker

查看Docker的狀態

sudo systemctl status docker

安裝Nvidia Docker(NVIDIA Container Toolkit)

在線安裝

  • 設置穩定版本的庫及GPG密鑰
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

$ sudo apt-get update
  • 安裝nvidia-docker2包及其依賴:
sudo apt-get update
sudo apt-get install -y nvidia-docker2
# 重啟docker服務
sudo systemctl restart docker

離線安裝

https://github.com/NVIDIA/libnvidia-container/tree/gh-pages/stable下載對應系統的

libnvidia-container1_1.9.0-1_amd64.deb
nvidia-container-toolkit_1.9.0-1_amd64.deb
nvidia-container-runtime_3.9.0-1_all.deb
nvidia-docker2_2.9.1-1_all.deb
libnvidia-container-dev_1.9.0-1_amd64.deb
libnvidia-container-tools_1.9.0-1_amd64.deb

安裝

sudo dpkg -i libnvidia-container1_1.9.0-1_amd64.deb
sudo dpkg -i libnvidia-container-tools_1.9.0-1_amd64.deb
sudo dpkg -i nvidia-container-toolkit_1.9.0-1_amd64.deb
sudo dpkg -i nvidia-container-runtime_3.9.0-1_all.deb
sudo dpkg -i libnvidia-container-dev_1.9.0-1_amd64.deb
sudo dpkg -i nvidia-docker2_2.9.1-1_all.deb
# or
sudo dpkg -i ./*.deb
# 重啟docker服務
sudo systemctl restart docker

測試

docker run --rm --gpus all nvidia/cuda:11.4-base nvidia-smi

修改docker源

可選的源列表

# Docker中國區官方鏡像:
https://registry.docker-cn.com

# 網易:
http://hub-mirror.c.163.com

# ustc:
https://docker.mirrors.ustc.edu.cn

# 中國科技大學:
https://docker.mirrors.ustc.edu.cn

# 阿里雲:
https://cr.console.aliyun.com/

# 騰訊雲:
https://mirror.ccs.tencentyun.com

修改源

創建或修改 /etc/docker/daemon.json 文件,修改:

{
    "registry-mirrors" : [
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://cr.console.aliyun.com",
        "https://mirror.ccs.tencentyun.com"
    ]
}

重啟docker服務

sudo systemctl daemon-reload
sudo systemctl restart docker

Docker添加用戶組

docker安裝完成需要添加用戶組,如果不添加會報如下警告,強迫症的筆者一定要干凈

WARNING: Error loading config file: /home/nvidia/.docker/config.json: stat /home/nvidia/.docker/config.json: permission denied

解決方案

  1. 創建組
sudo groupadd docker
  1. 將用戶先加到上一步創建的組中
sudo gpasswd -a {your user name of linux} docker
  1. 重啟docker-daemon
sudo systemctl restart docker
  1. 更新用戶組
newgrp docker
  1. 設置目錄及其所有文件的權限
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R

sudo chmod g+rwx "/home/$USER/.docker" -R

Done!


Docker harbor私服搭建

安裝docker-compose

# 下載docker-compose的最新版本
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 為docker-compose添加可執行權限
chmod +x /usr/local/bin/docker-compose

# 驗證查看docker-compose版本
docker-compose --version

如果docker compose的版本太低會提示如下錯誤:

x Need to upgrade docker-compose package to 1.18.0+.

安裝Harbor

下載Harbor

下載Harbor離線安裝包:https://github.com/goharbor/harbor/releases
image

tar -xvf harbor-offline-installer-v2.6.0.tgz #解壓離線安裝包
mv harbor /opt/ #移到/opt目錄下
cd /opt #進入到/opt目錄
cd harbor
ll #查看目錄內容

進入harbor目錄修改harbor.yml

然后安裝harbor

./prepare
./install.sh

成功會顯示:

 ----Harbor has been installed and started successfully.----

使用Harbor

瀏覽器輸入harbor.yml中設置的hostname的IP

  1. 增加倉庫地址
    文件目錄:/etc/docker/daemon.json (沒有則新建該文件)
{ "insecure-registries":["hostname:port"] }

重新登陸

docker logout hostname:port
docker login hostname:port

此時如果報錯

Error response from daemon: login attempt to http://10.1.1.49:80/v2/ failed with status: 502 Bad Gateway

是因為重啟docker服務的時候有一些容器沒有自動重啟
重啟所有容器

docker restart $(docker ps -a -q)
  1. 重啟dcoker服務
service docker restart
  1. push鏡像
  • 重新登陸harbor

  • 新建項目(私有倉庫)

#拉取鏡像
docker pull hello-world

#給鏡像打tag(鏡像的格式為,鏡像倉庫IP:端口/鏡像名稱)
docker tag hello-world 192.168.100.3:80/repo-test/hello-world:20190720

 #PUSH到倉庫
docker push 192.168.100.3:80/repo-test/hello-world

如果出現

The push refers to repository [192.168.100.3:80/hello-world]
af0b15c8625b: Retrying in 5 seconds 

是因為tag打的不對

如果忘記harbor密碼

#1、進入[harbor-db]容器內部
docker exec -it harbor-db /bin/bash

#2、進入postgresql命令行,
 psql -U postgres -d postgres -h 127.0.0.1 -p 5432  #或者用這個可以不輸入密碼。

#3、切換到harbor所在的數據庫
\c registry
#4、查看harbor_user表
select * from harbor_user;

#5、例如修改admin的密碼,修改為初始化密碼Harbor12345 ,修改好了之后再可以從web ui上再改一次。
 update harbor_user set password='94d45d5615496d023c8137c362d9d0a9', salt='g3vdOcNhqlQN4Q792SkznRN633ZqvIQ5'  where username='admin';

#6、退出 \q 退出postgresql,exit退出容器。
\q
exit

完成后通過WEB UI,就可以使用admin 、Harbor12345 這個密碼登錄了,記得修改這個默認密碼哦,避免安全問題。

創建mysql容器並遠程連接

拉取鏡像

docker pull mysql:latest

創建容器

docker run -itd --name=mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql

配置容器

# 進入容器
docker exec -it mysql /bin/bash

# 安裝服務端等軟件
apt-get install ssh openssh-server vim

#修改/etc/ssh/sshd_config     修改為PermitRootLogin yes和修改為UsePAM no

mysql -uroot -proot 或 (mysql -uroot -p )
mysql> select host,user,plugin,authentication_string from mysql.user;
mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
mysql> FLUSH PRIVILEGES;
mysql> quit;

#重啟ssh服務
/etc/init.d/ssh restart

SQLyog登陸測試

MySQL Host Address: 宿主機IP
用戶名: root
密碼: root
端口: 3306, 如果有做過端口映射替換端口

docker容器中可視化

在本地宿主機上安裝x11界面服務

sudo apt-get install x11-xserver-utils

# 開放權限,允許所有用戶,當然包括docker,訪問X11的顯示接口
# xhost + 每次重新開機,需要在本機操作一次
xhost +

創建容器

docker run -it --net=host -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/zhangbo/.Xauthority:/root/.Xauthority -e DISPLAY=$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE --gpus all --restart=always --name v-test  nvidia/cuda:11.4.0-base-ubuntu20.04 /bin/bash

容器可視化測試

安裝xarclock用於測試

apt update
apt-get install -y xarclock
xarclock

docker鏡像的保存和載入

保存鏡像

docker save {hash} > image.tar

載入鏡像

docker load --input image.tar

容器啟動后增加 端口映射 和 掛載目錄

增加 端口映射

停止docker服務(一定要,否則修改會自動還原)
sudo systemctl stop docker

查看docker容器的hash值

docker inspect <容器id> | grep Id

修改 /var/lib/docker/containers/[hash_of_the_container]/hostconfig.json/var/lib/docker/containers/[hash_of_the_container]/config.v2.json

修改hostconfig.json
"NetworkMode":"default",
    "PortBindings":{
        "10002/tcp":[{             // "10002/tcp" 容器端口
            "HostIp":"",
            "HostPort":"10002"     // "10002" 宿主機端口
            }],
        ....
    }
修改config.v2.json

這個文件要修改倆個地方
第一個地方

"Config":{
    "Hostname":"f3d34c2e8a16",
    "Domainname":"",
    "User":"",
    "AttachStdin":false,
    "AttachStdout":false,
    "AttachStderr":false,
  -------------------------------
    "ExposedPorts":{
        "10002/tcp":{}        //增加這部分內容,如果沒有的話,這個地方是暴露的容器的端口
        .....
        },
 --------------------------------
    "Tty":true,
    "OpenStdin":true,
    "StdinOnce":false,
}

第二個地方

"Service":null,
"Ports":{
    "10002/tcp":[{            //容器端口
        "HostIp":"0.0.0.0",
        "HostPort":"10002"    //宿主機端口
        }]
    },
"SandboxKey":"/var/run/docker/netns/b30d214a0bf1"
啟動docker服務
sudo systemctl start docker

增加 掛載目錄

停止docker服務(一定要,否則修改會自動還原)
sudo systemctl stop docker

修改/var/lib/docker/containers/[hash_of_the_container]/config.v2.json

修改config.v2.json
"MountPoints":{
    "/root/workspace":{                //容器目錄
        "Source":"/home/nvidia/data/zhangbo",   //宿主機目錄
        "Destination":"/root/workspace",        //容器目錄
        "RW":true,
        "Name":"",
        "Driver":"",
        "Type":"bind",
        "Propagation":"rprivate",
        "Spec":{
            "Type":"bind",
            "Source":"/home/nvidia/data/zhangbo",  //宿主機目錄
            "Target":"/root/workspace"             //容器目錄
            },
        "SkipMountpointCreation":false
        }
    },
"SecretReferences":null, ...
啟動docker服務
sudo systemctl start docker

Docker容器ssh遠程連接

安裝ssh

apt update
apt install openssh-server
/etc/init.d/ssh start

修改ssh配置文件

vim /etc/ssh/sshd_config

# 修改PasswordAuthentication yes
# 修改PermitRootLogin yes

重啟ssh服務

/etc/init.d/ssh restart

設置root密碼

passwd root


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM