1. 快速创建镜像的方法

总的来说以下有两种方法:

  • 基于某个基础镜像进一步创建镜像(推荐新手使用这种方法):我建议可以直接在 dockerhub 上找到与你想要创建的环境最相近的镜像,然后再基于这个镜像创建容器安装一些自己需要的依赖环境,以该容器为基础生成一个新的镜像。比如:我用 Python 写了一个算法脚本,想把它打包成 docker 镜像,那么我就可以直接基于 dockerhub 上的 conda 镜像进行二次封装。
  • 使用 dockerfile 创建镜像:内容详见使用 DockerFile 创建镜像,这种方法的好处在于创建的镜像体积小,镜像创建过程也更为透明,dockerfile 脚本可复用便于管理。

    2. 修改 Docker 默认的存储位置

    Docker默认的镜像和容器存储位置在/var/lib/docker中,如果仅仅是做测试,我们可能没有必要修改,但是当大量使用的时候,我们可能就要默认存储的位置了。
  1. 首先暂停 docker 服务
  1. service docker stop
  1. 修改改docker的docker.service配置文件,不知道 配置文件在哪里可以使用systemd命令显示一下。
systemctl disable docker
systemctl enable docker
# 显示结果
# Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
vi /usr/lib/systemd/system/docker.service
  1. 在里面的EXECStart的后面增加后如下,--graph后为设置的储存位置。
ExecStart=/usr/bin/dockerd --graph /data/docker
  1. 重启 docker。
systemctl daemon-reload
systemctl restart docker
  1. 查看 docker info 信息。

Tips - 图1

Mac 如何修改 docker 镜像安装目录

Mac下Docker的数据文件目录在~/Library/Containers/com.docker.docker/Data,你可以把整个目录搬到另外一块硬盘上:

mv ~/Library/Containers/com.docker.docker/Data /mnt/docker

然后建立一个软链接链接回来就可以了:

ln -s /mnt/docker/Data ~/Library/Containers/com.docker.docker/Data

3. 使用国内镜像加速 Docker Hub

要是直接从 docker hub pull 镜像,速度很慢,所以就像使用 conda 和 R 一样,我们也需要设置国内镜像进行加速。

  1. 打开阿里云控制台,没有的可以用淘宝账号或者支付宝账号直接登录,点击控制台:

image.png
打开控制台后,点击容器镜像服务,镜像加速器,复制加速器地址:
image.png
Docker 教程

  1. 配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://XXX.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

4. 非 root 用户如何使用 Docker

创建docker组

sudo groupadd docker

将当前用户加入docker组

sudo gpasswd -a ${USER} docker

重新启动docker服务(下面是CentOS7的命令)

sudo systemctl restart docker

5. Docker退出容器不关闭容器的方法

进入docker容器后如果退出容器,容器就会变成Exited的状态,那么如何退出容器让容器不关闭呢?
如果要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器,这一点很重要,请牢记!

docker ps可见,直接exit是没有的

[root@/home/baozw/docker/tmp]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
e1e401d3c315        centos:centos6      "/bin/bash"         6 minutes ago       Up 2 minutes                            centos6_container2

后台运行

更多的时候,需要让 Docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d参数来实现。

6. 目录映射

在创建容器时,我们可以使用 -v 参数,将宿主机目录映射到容器内的地址,这样我们就可以在容器内访问宿主机中的文件。-v参数中,冒号 “ : “ 前面的目录是宿主机目录,后面的目录是容器内目录,路径都为绝对路径,docker run --rm -v /host_absolute_dir:/container_absolute_dir username/ubuntu-dev:v1 echo 'test' >/container_absolute_dir/test_file这样,就相当于把host机目录/host_absolute_dir链接为docker容器路径/container_absolute_dir

7. Docker 修改空间大小

参考:https://blog.csdn.net/xiewenbo/article/details/97140242

Docker默认空间大小分为两个,一个是池空间大小,另一个是容器空间大小。

  • 池空间大小默认为:100G
  • 容器空间大小默认为是:10G

改空间大小,必需使Docker运行在daemon环境下,即先停止正在运行的docker服务 :

service docker stop

修改池空间大小方法:

dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/data bs=1G count=0 seek=1000
dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/metadata bs=1G count=0 seek=10

上面的1000为1TB大小,即为数据池空间大小为1TB,而10则为Metadata的空间大小,10GB

从运行完后,使用命令查看docker池空间大小:

docker info

Tips - 图4

8. win10使用WSL 2运行Docker Desktop,运行文件从C盘迁移到其他目录

引自:https://www.cnblogs.com/xhznl/p/13184398.html

前几天重装系统,把系统升到了Windows 10 2004,然后在安装Docker Desktop(2.3.0.3版本)时发现跟以前不太一样了。现在Docker Desktop默认使用WSL 2来运行,而不是以前的Hyper-V。

WSL

WSL:适用于 Linux 的 Windows 子系统。

  • 什么是适用于 Linux 的 Windows 子系统?

    适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生虚拟机开销。

  • 什么是 WSL 2?

    WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的主要目标是提高文件系统性能,以及添加完全的系统调用兼容性。

安装完后试了一下,最明显的感觉就是开启docker的速度大大提升!!!
Tips - 图5
但是以前设置镜像位置的功能不见了:
Tips - 图6
看官网说明,原来,启用WSL后,docker运行数据都在WSL发行版中,文件位置都只能由WSL管理!
安装docker后,docker会自动创建2个发行版:

  • docker-desktop
  • docker-desktop-data

Tips - 图7
WSL发行版默认都是安装在C盘,在%LOCALAPPDATA%/Docker/wsl目录
docker的运行数据、镜像文件都存在%LOCALAPPDATA%/Docker/wsl/data/ext4.vhdx中,这对C盘空间紧张的人非常不友好。。。

WSL发行版迁移

网上查了一下wsl发行版迁移,几乎都是说使用LxRunOffline.exe
经过我试验,LxRunOffline.exe确实可以迁移自己安装的发行版,却迁移不了docker自动创建的2个发行版!
最后只能去github提了个issues:https://github.com/docker/for-win/issues/7348
下面是操作方法:

  1. 首先关闭docker
  2. 关闭所有发行版:
    wsl --shutdown
  3. 将docker-desktop-data导出到D:\SoftwareData\wsl\docker-desktop-data\docker-desktop-data.tar(注意,原有的docker images不会一起导出)
    wsl --export docker-desktop-data D:\SoftwareData\wsl\docker-desktop-data\docker-desktop-data.tar
  4. 注销docker-desktop-data:
    wsl --unregister docker-desktop-data
  5. 重新导入docker-desktop-data到要存放的文件夹:D:\SoftwareData\wsl\docker-desktop-data\:
    wsl --import docker-desktop-data D:\SoftwareData\wsl\docker-desktop-data\ D:\SoftwareData\wsl\docker-desktop-data\docker-desktop-data.tar --version 2

Tips - 图8
Tips - 图9
只需要迁移docker-desktop-data一个发行版就行,另外一个不用管,它占用空间很小。
完成以上操作后,原来的%LOCALAPPDATA%/Docker/wsl/data/ext4.vhdx就迁移到新目录了:
Tips - 图10
重启docker,这下不用担心C盘爆满了!
参考:
https://docs.microsoft.com/zh-cn/windows/wsl/
https://docs.docker.com/docker-for-windows/wsl/