本文为解决问题实际操作,不做过多原理解释,不明白请自行 google
1.免 root 权限操作 docker(为当前用户添加执行 docker 的权限)
#centos
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
docker ps #测试docker命令是否可以使用sudo正常使用
#ubuntu
sudo usermod -aG docker $USER
2.修复 Docker 没有提示
⑴.检查 ~/.bashrc 中是否包含如下脚本、及/etc/bash_completion 目录
#先检查是否包含/etc/bash_completion目录,如果不包含直接看⑵
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
# 不一定和我这里的完全一样 包含/etc/bash_completion 就好,如果是注释了就解除注释
# 如果不包含就添加上然后执行source ~/.bashrc,再测试是否可行,不行的话继续往下看
⑵.安装 bash-completion,开启提示功能
sudo apt-get install -y bash-completion # 1.自动补齐需要依赖工具bash-complete,如果没有,则需要手动安装
source /usr/share/bash-completion/bash_completion # 2.生效脚本
source /usr/share/bash-completion/completions/docker # 3.如果还不行就执行这个
# 4.docker-compose没提示的话就执行下面这句
source /usr/share/bash-completion/completions/docker-compose
# 请再按照⑴的方法检测一遍,防止下次连接后没有提示。
3.[centos]修复 docker logs 不显示日志(更新 Docker 版本)
#首先看了一下docker的版本
$ docker -v
Docker version 1.13.1, build 7f2769b/1.13.1
#发现版本比较低,试了好多种方法都没能解决;具体原因不太清楚,可能是这个版本的bug,想着升级一下试试吧,说干就干!
#卸载旧版本: 只是卸载管理软件,镜像和容器不会丢失
#千万不要删除 /var/lib/docker/ 会导致镜像容器丢失
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
#安装一些必要的系统工具:
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#添加软件源信息:
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新 yum 缓存:
$ sudo yum makecache fast
#安装最新docker-ce(社区版)
$ sudo yum -y install docker-ce
# ***重新加载配置文件,否则修改不会生效。***
#会导致docker运行异常,如:启动容器提示“Error response from daemon: Unknown runtime specified docker-runc”
$ sudo systemctl daemon-reload
#重启docker
$ sudo systemctl restart docker
#设置docker开机自启
$ sudo systemctl enable docker
#然后在进行测试
$ docker logs 容器名称
### ok可以正常显示日志了,至此问题解决成功。
4.安装或升级 DockerCompose
curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
###容器方式运行(解决架构兼容问题)
#方法一
docker run --rm -v /usr/local/bin:/dist gists/docker-compose-bin:latest && docker rmi gists/docker-compose-bin:latest
#方法二
sudo curl -L --fail https://raw.githubusercontent.com/linuxserver/docker-docker-compose/master/run.sh -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
5.开启远程访问
# 编辑启动配置文件
vi /lib/systemd/system/docker.service
# 找到ExecStart=/usr/bin/dockerd 这一行,如果处于注释状态请启用,
# 检查是否包含 "-H tcp://0.0.0.0:2375", 如果不含就添加上。添加后如下:
#<centos7
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
#>=centos7
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
# 重新加载服务的配置文件
systemctl daemon-reload
#<centos7
service docker restart
#>=centos7
systemctl restart docker
6.清理构建失败的镜像
# 方法一:使用自带命令进行清理
docker system prune
# 方法二:筛选清理
docker rmi $(docker images |grep '<none>' | awk '{print $3}')
7.修改容器(docker update)
#重命名
docker rename 旧名称 新名称
## 修改为开机自启
# "no" 默认
# always 总是启动
# on-failure 如果执行失败
# unless-stopped 除非停止
docker update --restart=always 容器标识
# 修改cpu限制 --cpuset-cpus 0-2/1/0,1 (可以是一个或多个)
docker update --cpuset-cpus "1" 容器标识
# 修改内存限制(在ubuntu或其他基于Debian的系统上才会出现的问题,原因是系统默认未开启swap限制)
docker update -m 1500M --memory-swap 1500M 容器标识
# 同时限制cpu和内存(在ubuntu或其他基于Debian的系统上才会出现的问题,原因是系统默认未开启swap限制)
docker update --cpuset-cpus "1" --memory "1g" 容器标识
#控制容器竞争同一个cpu时间片的占比shares(最大1024)
#只有当多个容器使用同一个核心时配置才生效(在没有抢占的情况下使用全部时间片)
docker update --cpuset-cpus "1" --cpuset-shares 500 --memory "1g" 容器标识
8.从镜像中提取 Dockerfile
###dfimage是一个alpine的镜像,启动的时候,通过将docker.sock映射到容器内部来运行,通常将这个操作做成别
#使用alias创建别名(快捷指令)
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
#例如提取nginx:latest的Dockerfile
dfimage nginx:latest