安装 docker
一键安装 docker:wget -qO- https://get.docker.com/ | sh
。
基本操作
- 运行容器,docker run 有多种选项。
docker run -d --net=host --privileged -t -v workshop:/workshop --name jerome debian:jessie bash
-v
选项,将 host 目录挂载到 docker 容器系统中--name your_name
,为运行的容器命名,相信直接操作名字总比操作一串数字方便、可用
- 查看运行中的容器,
docker ps
- 容器退出后,还会缓存在系统中,
- 查看缓存,
docker ps -a
- 运行缓存,
docker start jerome
, - 删除缓存,
docker rm jerome
- 查看缓存,
- 进入容器 shell 命令行,
docker exec -it jerome bash
,不会像docker attach
进去退出后,直接将在跑的 docker 实例退出来。 - 怕误操作导致缓存丢失?那就提交一下,
docker commit jerome debian:jessie_jerome
- 查看本地镜像,
docker images
- 重命名镜像,
docker tag image-id REPOSITORY[:TAG]
- 复制文件到容器中,
docker cp abc jerome:/
ordocker cp jerome:/abc host_dir/abc
- 清除 images,
docker rmi
,-f
强制清除,如果碰到这种 log,Error response from daemon: conflict: unable to delete b3370fb9c34a (must be forced) - image is being used by stopped container a1e524588570
,带 -f 选项清除docker rmi -f $(docker images -f "dangling=true" -q)
,删除: ,没有 tag 的 image docker rmi -f $(docker images "your_image_name*" -q)
,删除以 “your_image_name” 开头的所有 image
进入正在运行的容器命令行样例:
1 | sunyongfeng@openswitch-OptiPlex-380:~$ docker ps |
docker 使用中国源
见 https://www.docker-cn.com/registry-mirror
- 方法1:
1 | $ docker pull registry.docker-cn.com/library/ubuntu:16.04 |
方法2:拉取的时候加参数
--registry-mirror=https://registry.docker-cn.com
方法3:默认配置,需要重启 docker 服务才能生效
为了永久性保留更改,您可以修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。
1 | { |
修改保存后重启 Docker 以使配置生效。
本地 repo
详见 https://docs.docker.com/registry/,参考 https://www.jianshu.com/p/fc544e27b507。
docker 命令没有权限
必须 sudo docker xxx?
见 使用docker第一步:
本指南假设你已经完成了Docker的安装工作。检查你安装的Docker,运行以下命令:
1 | # Check that you have a working install |
如果你得到 docker: command not found
,你可能没有完整的安装上Docker。
如果你得到 /var/lib/docker/repositories: permission denied
,那你可能没有权限访问你主机上的Docker。
为获得访问Docker权限可以直接在命令前加sudo,或者采取以下步骤授予权限::
1 | # 如果还没有docker group就添加一个: |
docker 空间不足
配置 docker 的 basesize。
1 | sudo systemctl stop docker |
修改 docker storage driver 为 aufs
ubuntu 16.04 默认为 overlay2,但是目前在用的 sonic 不支持,因此只能回退为 aufs。可通过 docker info
命令查看,其中有一句为:
1 | Storage Driver: overlay2 |
ubuntu 16.04 如何支持 aufs?详见 Use the AUFS storage driver。
- 查看本机 docker storage driver 是否为 aufs,
docker info
, - 备份 docker 数据,
sudo cp /var/lib/docker /var/lib/docker.bak
- 停止 docker 服务,
sudo service docker stop
- 确认系统是否支持 aufs,
grep aufs /proc/filesystem
- 如果系统不支持 aufs,安装依赖包,
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
- 加载 aufs 内核模块,
sudo modprobe aufs
- 配置 docker 启动参数,依赖
/etc/docker/daemon.json
为以下内容。 - 启动 docker 服务,
sudo service docker start
- 确认 docker storage driver 已改为 aufs,
docker info
/etc/docker/daemon.json 内容:
1 | { |
docker 提示 daemon 未运行
提示如下:
1 | $ docker ps |
找 docker log 看原因,原因为 /etc/docker/daemon.json
的配置文件有问题
1 | $ vi /var/log/docker.log |
查看配置文件:
1 | $ cat /etc/docker/daemon.json |
正确的配置文件对比发现,配置的 field 和 value 都要有双引号
1 | { |
为什么我的配置文件没有双引号?查看 Dockerfile:
1 | RUN echo "DOCKER_OPTS=\"--experimental\"" >> /etc/default/docker |
正确的写法如下,echo 的用法整错了。
1 | RUN echo "DOCKER_OPTS=\"--experimental\"" >> /etc/default/docker |
echo 样例:
1 | ~$ echo "{"registry-mirrors": ["https://registry.docker-cn.com"]}" |
Dockerfile 中找不到对应路径的文件
见 https://stackoverflow.com/questions/48126926/unable-to-locate-file-in-docker-container:
- 先通过
COPY
把文件拷贝到 docker 容器中的路径 - 使用时使用 docker 容器中的路径
即 docker build 时,RUN
时使用的路径,是 docker 容器中的路径。
持续集成编译时出现 ‘the input device is not a TTY’
原因: 持续集成环境没有以 tty 形式进行编译,需要把 docker run 的 -t 选项删除。