docker 安装与相关操作
目录
一、安装docker
二、获取镜像
三、创建容器
四、安装NVIDIA Container TOOLKIT
五、管理docker存储路径
六、使用过程中遇到的错误
一、安装docker
以下是Ubuntu18.04安装步骤,其他系统安装可以参照官网
1.1 添加使用HTTPS传输的软件包以及CA证书
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
1.2 为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥
$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 官方源
# $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
1.3 要向 source.list 中添加 Docker 软件源
$ sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 官方源
# $ sudo add-apt-repository \
# "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
# $(lsb_release -cs) \
# stable"
1.4 更新 apt 软件包缓存,并安装 docker-ce
$ sudo apt-get update
$ sudo apt-get install docker-ce
1.5 启动docker
$ sudo service docker start
1.6 建立 docker 用户组
$ sudo groupadd docker // 建立 docker 用户组
$ sudo usermod -aG docker $USER //将当前用户加入 docker 组
1.7 测试是否安装正确
$ docker run hello-world
二、获取镜像
2.1 dockerfile
文件
自己编写dockerfile
文件,根据该文件生成镜像
docker build --build-arg USER_ID=$UID -t 镜像名:版本号 .
2.2 dockerhub
直接从dockerhub上拉去镜像
docker pull 镜像名:版本号
三、创建容器
3.1 创建容器
docker run --privileged --net=host --gpus all -it \
--shm-size=8gb --env="DISPLAY" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
--name=topdetectron detectron2:v0
# Centos 需添加/sbin/init 不然systemctl没法用
docker run --privileged --net=host -it \
--shm-size=8gb --env="DISPLAY" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
--name=topdetectron detectron2:v0 /sbin/init
其中--name
后面接容器名,然后是镜像ID或者<镜像名:tag>
3.2 为容器开设端口映射
如果容器创建时网络模式为
--net=host
,则容器和宿主机共享network namespace
,无需添加端口映射, 只要在ssh中设置好不和主机冲突的端口号即可,否则下面两步都需要执行。
1.安装ssh
// ubuntu
apt-get install openssh-server
apt-get install openssh-client
//centos
yum install openssh-server
yum install openssh-client
- 修改SSH配置
vim /etc/ssh/sshd_config
# 修改下面内容
PubkeyAuthentication yes
PermitRootLogin yes
PasswordAuthentication yes
# 查看端口是否被占用命令 netstat -apn | grep 22222
Port 22222
- 启动ssh服务
# Ubuntu18.04
/etc/init.d/ssh restart
# Centos7
systemctl start sshd
2.开设端口映射
假设需要将某个容器的端口22映射到宿主机的端口1022
- 关闭所有容器
# 查看运行的container
docker container ls
# 关闭container
docker container stop [container id or name] bash
# 停止docker服务
sudo systemctl stop docker
- 修改容器配置文件
# 进入容器配置文件夹
cd /var/lib/docker/containers/
# 选择对应的container id后,修改hostconfig.json 和 config.v2.json两个文件
-
- 修改
hostconfig.json
- 修改
# 修改PortBindings内容
"PortBindings":{"22/tcp":[{"HostIp":"","HostPort":"1022"}]}
-
- 修改
config.v2.json
- 修改
# 在"Cofig":{}中添加"ExposedPorts"
"ExposedPort":{"22/tcp":{}}
启动docker服务,进入容器,重启ssh服务
3.3 容器常用操作
启动容器:
docker container start 容器名/ID
进入容器:docker exec -it 容器名/ID bash
查看所有容器:docker ps -a
查看运行中容器:docker container ls
删除容器:docker rm 容器名/ID
删除镜像:docker rmi 镜像名/ID
容器打包成镜像:docker commit [-m "描述信息"] [-a "创建者"] 容器名/ID 镜像名[:标签名]
镜像名必须要全部小写,否则将不能打包
四、安装Nvidia Container Toolkit
-
新建一个安装脚本
nvidia-container.sh
-
脚本内容为
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - 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 && sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker
-
测试显卡是否可用
docker run -it --rm --gpus all ubuntu nvidia-smi
-
中间出现错误
gpg: no valid OpenPGP data found
解决措施
Step1. Open this website https://github.io.ipaddress.com/, and then search nvidia.github.io corresponding IP address.
Step2. sudo vim /etc/hosts ,Add the following at the end.
185.199.108.153 nvidia.github.io
185.199.109.153 nvidia.github.io
185.199.110.153 nvidia.github.io
185.199.111.153 nvidia.github.io
五、管理docker存储路径
Ubuntu18.04中docker中容器和镜像默认存储在/var/lib/docker
下(可用df -h
命令查看),时间一长很容易把存储空间占满,这里将默认路径更改为/data
目录下。
sudo cp -r /var/lib/docker /data/
sudo mv /var/lib/docker /var/lib/docker.bak
sudo ln -s /data/docker /var/lib/docker
rm -rf /var/lib/docker.bak
六、使用过程中遇到的错误
gtk failed to load module canberra-gtk-module
sudo apt install libcanberra-gtk-module libcanberra-gtk3-module
LIBDBUSMENU-GLIB-WARNING: Unable to get session bus
sudo apt-get install dbus-x11
启动某个容器后,其他容器远程连接不生效
检查该容器是否开启了自启动,如果是则需要关闭
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端