常用操作
基于镜像创建新的容器并且运行
docker run -i -t -d ubuntu:18.04
启动已创建但停止运行的容器
docker start -i -t -d 3af41afdf9ee
登录已经启动的容器
docker attach 3af41afdf9ee
停止容器的运行
容器和宿主机之间共享文件
有些比较依赖环境的库会以docker镜像的形式提供给开发者,例如GPU版本的Tensorflow,这意味这我们必须要其对应的容器中进行开发。 那就会涉及到代码文件在哪里保存,以及怎么编辑,怎么传送到容器中的问题了。
容器和宿主机之间共享文件的方式很简单,只需要在启动的时候挂载宿主目录,即使用“-v”选项。
docker run -it -v /home/haha/下载:/share microsoft/dotnet:latest /bin/bash
上述代码把宿主机的“/home/haha/下载”目录挂载到docker中的“/share”目录。
不使用sudo的docker运行方法
默认情况下,若不使用sudo,那么docker无法运行,因为docker要绑定unix socket,但如果使用sudo,则所有相关的操作都需要sudo,包括vscode连接容器里的代码时,vscode也得使用sudo启动。很麻烦也不安全。
下面是不使用sudo的运行方法
sudo groupadd docker
sudo usermod -aG docker $USER
#完成后记得注销再重新登录
查看当前所有镜像和容器
docker images
docker container ps -a
保存并迁移容器
docker commit 3af41afdf9ee qzk/my_env
docker save qzk/my_env > my_env.tar
常用模板
可运行基于Nvidia硬件、OpenGL组件的GUI程序的容器
Dockerfile
FROM ubuntu:18.04
# Dependencies for glvnd and X11.
RUN apt-get update \
&& apt-get install -y -qq --no-install-recommends \
libglvnd0 \
libgl1 \
libglx0 \
libegl1 \
libxext6 \
libx11-6 \
&& rm -rf /var/lib/apt/lists/*
# Env vars for the nvidia-container-runtime.
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES graphics,utility,compute
运行参数:
#!/bin/bash
# Expose the X server on the host.
sudo xhost +local:root
# --rm: Make the container ephemeral (delete on exit).
# -it: Interactive TTY.
# --gpus all: Expose all GPUs to the container.
docker run \
--rm \
-it \
--gpus all \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
-e QT_X11_NO_MITSHM=1 \
glvnd-x \
bash
在容器中测试:
apt-get update
apt-get install -y -qq glmark2
glmark2