:-) 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
posted @ 2021-06-07 10:47  nanmi  阅读(2689)  评论(0编辑  收藏  举报