相关推荐recommended
【工具】Docker使用指南
作者:mmseoamin日期:2024-02-24

安装Docker

#预备软件
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 -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
sudo systemctl status docker

离线安装 https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/

sudo dpkg -i nvidia-container-toolkit_1.9.0-1_amd64.deb 
sudo dpkg -i 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-docker2_2.10.0-1_all.deb 

创建镜像

Dockerfile基本语法

FROM,指定初始系统

RUN,镜像内执行命令

COPY,镜像内复制

ENV,设置镜像内环境变量

ARG,Dockerfile内的变量

FROM ubuntu:16.04
MAINTAINER kirk
RUN apt-get update

构建镜像

在Dockerfile所在路径下,命令为

docker build .

可加参数,-t <镜像标签> -f

常用命令

  1. 重启服务 sudo systemctl daemon-reload sudo systemctl restart docker
  2. 启动docker run -it <镜像ID>
  3. 查看所有镜像 docker images或docker image ls
  4. 提交镜像 docker commit -m "commit message" -a "zhangpeike" <镜像ID>
  5. 复制文件 docker cp <本地文件> <镜像ID>:<路径>
  6. 新终端进入运行的容器,docker exec [OPTIONS] CONTAINER COMMAND [ARG…]: docker exec -it 9df1cd89a8fe /bin/bash新开一个正在运行容器的终端docker exec -it <容器ID> /bin/bash
  7. 前端打开运行中的镜像docker attach <镜像ID>
  8. 保存镜像 docker save <镜像ID> > xxx.tar
  9. 导出镜像 docker export <镜像ID> > xxx.tar docker import 新镜像命名 < xxx.tar,注意导出不能保存镜像的历史信息。
  10. 加载镜像 docker load -i xxx.tar
  11. 本地与镜像路径的映射 docker run -v /local_path:/docker_path
  12. 设置共享内存大小:docker --shm-size="16g"
  13. 查看commit记录:docker inspect <镜像ID>

环境设置记录

  1. 编译Dockerfile遇错

    Get https://registry-1.docker.io/v2/: authenticationrequire

    由于网络代理需要

    在/etc/systemd/system/docker.service.d/下添加文件docker-proxy.conf,

[Service]
Environment="HTTP_PROXY=http://公司账号:密码@proxy.x.com:8080"
Environment="HTTPS_PROXY=http://公司账号:密码@proxy.x.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1"
  1. 第二个问题

    Get https://registry-1.docker.io/v2/: proxyconnect tcp: dial tcp: lookup http: no such host

    推断为无法访问docker镜像官网,设置镜像加速器地址,修改文件/etc/docker/daemon.json

{
    "registry-mirrors": [
    "https://xxx.mirror.x.com"
    ]
}

重启daemon和docker

  1. 编译Dockerfile,RUN apt-get install失败

    容器需要代理方可上网,主机上新建或编辑~/.docker/config.json

{
  "proxies":
  {
    "default":
    {
      "httpProxy": "http://账号:密码@proxy.x.com:8080",
      "httpsProxy": "http://账号:密码@proxy.x.com:8080",
      "noProxy": "localhost,127.0.0.1"
    }
  }
}

设置后镜像中apt-get install出现Failed to fetch http...,软件版本问题,改为apt-get install --fix-missing

安装Nvidia-docker

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 udo | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
#Restart the Docker daemon to complete the installation after setting the default runtime

Rviz报错问题分析与解决

运行rviz出错libGL error: No matching fbConfigs or visuals found

安装Nvidia驱动

  1. 查看板卡ubuntu-drivers devices
  2. 自动安装 ubuntu-drivers autoinstall

    问题:缺少依赖,递归安装解决依赖。

  3. 再次运行rviz,提示
No protocol specified
QXcbConnection: Could not connect to display :1
Aborted (core dumped)

需要在主机上执行 xhost +