> 技术文档 > 【ubuntu】ubuntu下docker的使用_ubuntu docker

【ubuntu】ubuntu下docker的使用_ubuntu docker


git和github建立连接

  • 安装
    • windows安装的重点(Hyper-V和WSL)
    • 安装Docker
    • 加速镜像
      • 配置国内仓库
      • 配置HTTP/HTTPS代理
      • 配置docker.service代理
    • 验证
  • 操作
    • 镜像和容器
    • 基本操作
    • 一些问题
      • 权限问题
      • 命令失效
      • 显卡问题
  • 图形界面
    • VcXsrv
      • 通过Dockerfile制作
      • 新的Dockerfile

安装

windows安装的重点(Hyper-V和WSL)

Hyper-V:Windows自带的虚拟化技术,可以使用它创建Linux虚拟机,从而实现在Windows上运行Docker
WSL:Win10、Win11等自带的Linux子系统,全称Windows Subsystem for Linux。可以利用WSL在Windows上运行Docker
官网下载安装包

安装Docker

Bilibili安装Docker的教程

加速镜像

配置国内仓库

修改Docker的配置文件daemon.json来配置镜像加速器,可以加速Docker镜像的拉取速度

sudo vim /etc/docker/daemon.json
{ \"registry-mirrors\": [ \"https://hub-mirror.c.163.com\", \"https://docker.mirrors.ustc.edu.cn\", \"https://ueo0uggy.mirror.aliyuncs.com\", \"https://docker.m.daocloud.io\", \"https://cf-workers-docker-io-apl.pages.dev\", \"http://95.169.25.181\" ]}

重启Docker服务

sudo systemctl restart docker

通过docker info查看当前Docker配置,包括是否成功加载

docker info | grep -i \'Registry Mirrors\'

如果配置成功,您会看到类似以下的输出:

Registry Mirrors: https://hub-mirror.c.163.com https://docker.mirrors.ustc.edu.cn https://ueo0uggy.mirror.aliyuncs.com https://docker.m.daocloud.io https://cf-workers-docker-io-apl.pages.dev http://95.169.25.181

配置HTTP/HTTPS代理

修改daemon.json文件,配置HTTP和HTTPS代理。

sudo vim /etc/docker/daemon.json

这里的http://127.0.0.1是主机地址,7890是代理端口,CLASH默认的的代理就是这样

{ \"proxies\": { \"http-proxy\": \"http://127.0.0.1:7890\", \"https-proxy\": \"http://127.0.0.1:7890\" }}

重启Docker服务

sudo systemctl restart docker

验证代理配置是否生效:

docker info | grep -A 1 \' HTTP Proxy\'

输出的结果:

WARNING: bridge-nf-call-iptables is disabledHTTP Proxy: http://127.0.0.1:7890HTTPS Proxy: http://127.0.0.1:7890WARNING: bridge-nf-call-ip6tables is disabled

配置docker.service代理

直接在 Docker 服务的启动配置中设置代理。通过编辑docker.service文件来配置
查看docker.service文件的位置:

systemctl status docker

输出为docker.service文件的路径:

Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)

编辑docker.service文件,在[service]部分添加代理环境变量:

sudo vim /lib/systemd/system/docker.service
[Service]Environment=\"HTTP_PROXY=http://127.0.0.1:7890/\"Environment=\"HTTPS_PROXY=http://127.0.0.1:7890/\"

重载docker.service配置,重启docker服务

sudo systemctl daemon-reloadsudo systemctl restart docker

验证

通过拉取一个镜像来检查是否使用了镜像加速器

docker pull hello-world

查看docker启动日志

sudo journalctl -u docker.service

操作

镜像和容器

基本操作

# 启动dockersudo service docker start# 重启dockersudo service docker restart# 停止dockersudo service docker stop

一些问题

权限问题

通常情况下会发生没有权限执行Docker命令,需要添加Docker用户组,或者一直使用sudo命令

sudo groupadd docker sudo usermod -aG docker ${USER}sudo systemctl restart dockersu root su ${USER}

命令失效

如果重复安装docker,会出现docker命令失效的情况,因为重复创建 ./docker目录文件夹

sudo rm -rf ~/.docker/

显卡问题

nvidia-docker的问题,在docker中运行程序,使用显卡进行运算
(作者未验证)需要添加容器的环境变量NVIDIA_DRIVER_CAPABILITIES=compute,utility和NVIDIA_VISIBLE_DEVICES=all

docker run -itd --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all 镜像名

或者在Dockerfile中添加:

ENV NVIDIA_VISIBLE_DEVICES=all NVIDIA_DRIVER_CAPABILITIES=compute,utility\\ LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64

Docker图片

图形界面

配置Docker子程序的图形界面有多种方案,现罗列如下:
要在docker中运行GUI程序,关键是让Docker知道X Server(大多数Linux桌面环境的基础)。
文章的核心就在以下参数:

share the Host’s DISPLAY environment variable to the Container--env=\"DISPLAY\"run container with host network driver with--net=host$ docker run --net=host --env=\"DISPLAY\"

引用自running-gui-applications-inside-docker-containers
上述参数的含义就是将Linux宿主机的X_Server共享给Docker容器,还有一种方式就是映射宿主机X_Server.sock文件到容器中去。
在Windows或Mac这些没有X11的Host机器上怎么办呢?

VcXsrv

VcXsrv Windows X Server是Windows上的X11程序,另外还可选择Xming,但Xming最后一次更新是在2016年,代码相对较老,所以还是选择VcXsrv吧。
VcXsrv程序下载安装步骤可以参考Run GUI app in linux docker container on windows host。
然后从开始菜单运行 Xlaunch,并按照初始配置步骤进行操作:
【ubuntu】ubuntu下docker的使用_ubuntu docker
【ubuntu】ubuntu下docker的使用_ubuntu docker
【ubuntu】ubuntu下docker的使用_ubuntu docker
【ubuntu】ubuntu下docker的使用_ubuntu docker

通过Dockerfile制作

FROM ubuntu:18.04# 修改源地址RUN mv /etc/apt/sources.list /etc/apt/sources_backup.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic universe \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates universe \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic multiverse \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates multiverse \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-security universe \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-security multiverse \" >> /etc/apt/sources.list && \\echo \"deb http://archive.canonical.com/ubuntu bionic partner \" >> /etc/apt/sources.list && \\# 安装firefoxapt-get update && apt-get install -y firefoxCMD /usr/bin/firefox

构建镜像

docker build -t firefox .

运行容器container

docker run -ti --rm -e DISPLAY=host.docker.internal:0.0 firefox

相较原文有如下变动:

  1. 删除了set-variable -name DISPLAY -value YOUR-IP:0.0命令
  2. 设置容器的DISPLAY参数为host.docker.internal而不是宿主机的具体ip
    原文的set-variable作用是将宿主机的ip作为临时环境变量,在docker run的时候直接引用该环境变量赋值给容器的DISPLAY,可有可无,并且set-variable只能在PowerShell环境生效,因此直接删除。
    再来看-e DISPLAY=host.docker.internal:0.0,从18.03版本开始,Docker推荐容器使用host.docker.internal来访问宿主机上的服务,容器的DNS会自动解析到宿主机的内部IP上,参考Docker for Windows的官方文档:I WANT TO CONNECT FROM A CONTAINER TO A SERVICE ON THE HOST。
    因为Docker build时未指定ubuntu的locales,ubuntu的镜像默认不支持中文导致的

新的Dockerfile

FROM ubuntu:18.04# 修改源地址RUN mv /etc/apt/sources.list /etc/apt/sources_backup.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic universe \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates universe \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic multiverse \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates multiverse \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-security universe \" >> /etc/apt/sources.list && \\echo \"deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-security multiverse \" >> /etc/apt/sources.list && \\echo \"deb http://archive.canonical.com/ubuntu bionic partner \" >> /etc/apt/sources.list && \\# 更新并安装国际化语言包以及中文字体apt-get update && \\apt-get install -y locales && \\locale-gen zh_CN && \\locale-gen zh_CN.utf8 && \\apt-get install -y ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy# 设置系统语言环境为中文UTF-8ENV LANG zh_CN.UTF-8 ENV LANGUAGE zh_CN.UTF-8ENV LC_ALL zh_CN.UTF-8# 安装firefoxRUN apt-get install -y firefoxCMD /usr/bin/firefox

网上还有几种方式,我只看了文章的理论,感觉可行,大家有空可以去亲自尝试一番:
● Xvfb + VNC - Xvfb + VNC
● Xming - Xming
● SSH with X11 forwarding - SSH with X11 forwarding
● X11docker - 一个专门为Docker增加X11图形渲染支持的项目 X11docker