【ubuntu】ubuntu下docker的使用

安装

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 disabled
HTTP Proxy: http://127.0.0.1:7890
HTTPS Proxy: http://127.0.0.1:7890
WARNING: 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-reload
sudo systemctl restart docker

验证

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

docker pull hello-world

查看docker启动日志

sudo journalctl -u docker.service

操作

镜像和容器

基本操作

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

一些问题

权限问题

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

sudo groupadd docker 
sudo usermod -aG docker ${USER}
sudo systemctl restart docker
su 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,并按照初始配置步骤进行操作:
Xlaunch步骤
Xlaunch步骤2
Xlaunch步骤3
Xlaunch步骤4

通过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 && \
# 安装firefox
apt-get update && apt-get install -y firefox
CMD /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-8
ENV LANG zh_CN.UTF-8  
ENV LANGUAGE zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8
# 安装firefox
RUN apt-get install -y firefox
CMD /usr/bin/firefox

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值