跳至主要內容

技术中心大约 3 分钟

注意

推荐环境:Centos7,文档环境:Centos7

Docker介绍

Docker
Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Centos7环境配置

关闭SELinux

## 查看状态
getenforce

## 临时关闭
##setenforce 1 设置SELinux 成为enforcing模式
setenforce 0

## 永久关闭
vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled
设置后需要重启才能生效

关闭防火墙

## 临时关闭
systemctl stop firewalld

## 查看状态
firewall-cmd --state

## 取消开机自启
systemctl disable firewalld

配置网络服务

vi /etc/sysconfig/network-scripts/ifcfg-eth0
把onboot=no改成onboot=yes

## 重启网络服务
service network restart

安装Docker

centos7 可能自带了较老版本,新的已经是docker-ce了。所以按照官方的步骤:https://docs.docker.com/engine/install/centos/open in new window

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
$ sudo yum install -y yum-utils

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

$ sudo yum install docker-ce docker-ce-cli containerd.io

让普通用户也能运行 docker
默认情况下,普通用户运行 docker 会有权限问题,每次运行都得加 sudo,很麻烦。把你的账号加到 docker 用户组后就不用加 sudo 了:

sudo usermod -aG docker $USER

配置tcp管理端口

vi /usr/lib/systemd/system/docker.service

# 找到下面的
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

# 改成下面的
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock

安装Docker-Compose

官方地址太慢,换一个:

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.5.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

配置自启动

systemctl enable docker 

禁用Docker自动更新

sudo yum-config-manager --disable docker-ce-stable

修改Docker数据目录

vim /etc/docker/daemon.json

增加以下配置:

{
    "data-root": "/home/docker"
}

安装Portainer

Portainer是docker的图像化管理工具,方便日常对容器的管理运维。

docker run -d  -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce

执行成功,正常则会在控制台返回一串字符串(容器ID)。此时在浏览器访问 http://server_ip:9000 则可以进入portainer界面,根据提示设置管理员密码,如下图所示:

Portainer设置密码
Portainer设置密码

并添加docker服务,如下图所示:

连接Docker
连接Docker

选择Docker,点击Connect,成功则自动进入到管理界面了。

使用GPU

本文只针对N卡在Centos7下面的情况。其他的场景自行搜索资料

屏蔽nouveau

屏蔽nouveau

检查是否存在服务:

lsmod | grep nouveau

如果有显示内容,则存在服务;如果没有则跳过此步。

打开文件

vim /lib/modprobe.d/dist-blacklist.conf

将nvidiafb注释掉:

#blacklist nvidiafb 

然后添加以下语句:

blacklist nouveau
options nouveau modeset=0

重建 initramfs image

mv /boot/initramfs-(unamer).img/boot/initramfs(uname -r).img /boot/initramfs-(uname -r).img.bak
dracut /boot/initramfs-$(uname -r).img $(uname -r)

重启

reboot

重启服务器,执行上面检查命令,确保没有内容输出

安装依赖

yum install kernel-devel gcc dkms -y

下载驱动:从官网下载即可 https://www.nvidia.cn/Download/index.aspx?lang=cnopen in new window

安装驱动:

chmod +x NVIDIA-Linux-x86_64-510.73.05.run
./NVIDIA-Linux-x86_64-510.73.05.run --kernel-source-path=/usr/src/kernels/3.10.0-1160.66.1.el7.x86_64 -k $(uname -r)

测试安装结果,执行如下命令,如果能看到GPU信息则安装成功。

nvidia-smi

配置docker

打开daemon.json文件:

vi /etc/docker/daemon.json

修改runtimes为如下内容,不能为runc。

{
    "default-runtime":"nvidia",
    "runtimes": {
        "nvidia": {
            "path":"/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

Docker中使用GPU

测试镜像:

docker run --gpus all nvidia/cuda:9.0-base nvidia-smi

如果需要自定义镜像,可拉取官方的cuda镜像进行修改,加入自己的环境。在部署容器时,注意加上--gpus参数,后接分配核心数量,all则代表可使用所有GPU核心。