1. 快速创建镜像的方法
总的来说以下有两种方法:
- 基于某个基础镜像进一步创建镜像(推荐新手使用这种方法):我建议可以直接在 dockerhub 上找到与你想要创建的环境最相近的镜像,然后再基于这个镜像创建容器安装一些自己需要的依赖环境,以该容器为基础生成一个新的镜像。比如:我用 Python 写了一个算法脚本,想把它打包成 docker 镜像,那么我就可以直接基于 dockerhub 上的 conda 镜像进行二次封装。
- 使用 dockerfile 创建镜像:内容详见「使用 DockerFile 创建镜像」,这种方法的好处在于创建的镜像体积小,镜像创建过程也更为透明,dockerfile 脚本可复用便于管理。
2. 修改 Docker 默认的存储位置
Docker默认的镜像和容器存储位置在/var/lib/docker中,如果仅仅是做测试,我们可能没有必要修改,但是当大量使用的时候,我们可能就要默认存储的位置了。
- 首先暂停 docker 服务
service docker stop
- 修改改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
- 在里面的
EXECStart的后面增加后如下,--graph后为设置的储存位置。
ExecStart=/usr/bin/dockerd --graph /data/docker
- 重启 docker。
systemctl daemon-reload
systemctl restart docker
- 查看
docker info信息。

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 一样,我们也需要设置国内镜像进行加速。
- 打开阿里云控制台,没有的可以用淘宝账号或者支付宝账号直接登录,点击控制台:

打开控制台后,点击容器镜像服务,镜像加速器,复制加速器地址:
Docker 教程
- 配置镜像加速器
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 修改空间大小
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

8. win10使用WSL 2运行Docker Desktop,运行文件从C盘迁移到其他目录
前几天重装系统,把系统升到了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的速度大大提升!!!
但是以前设置镜像位置的功能不见了:
看官网说明,原来,启用WSL后,docker运行数据都在WSL发行版中,文件位置都只能由WSL管理!
安装docker后,docker会自动创建2个发行版:
- docker-desktop
- docker-desktop-data

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
下面是操作方法:
- 首先关闭docker
- 关闭所有发行版:
wsl --shutdown - 将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 - 注销docker-desktop-data:
wsl --unregister docker-desktop-data - 重新导入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


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