使用非Root用户前要增长sudo 命令node
旧版本的 Docker 称为 docker 或者 docker-engine,使用如下命令卸载旧版本:linux
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
执行如下命令安装依赖包:yum install -y yum-utils device-mapper-persistent-data lvm2
nginx
鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。
执行下面的命令添加 yum 软件源:
阿里云:docker
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
163:json
yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
官方源ubuntu
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
若是须要最新版本的 Docker CE 请使用如下命令:centos
sudo yum-config-manager --enable docker-ce-edge sudo yum-config-manager --enable docker-ce-test
更新 yum 软件源缓存,并安装 docker-ce。缓存
yum makecache fast yum install docker-ce
安装指定版本的Docker:yum list docker-ce --showduplicates | sort -r
安全
yum install docker-ce-18.06.3.ce-3.el7.centos.x86_64
bash
解决方法:
下载container-selinux:wget http://mirrors.atosworldline.com/public/centos/7/extras/x86_64/Packages/container-selinux-2.68-1.el7.noarch.rpm
安装container-selinux(使用–nodeps --force跳过依赖检查):rpm -ivh container-selinux-2.68-1.el7.noarch.rpm --nodeps --force
而后从新安装Docker
systemctl enable docker systemctl start docker
默认状况下,docker 命令会使用 Unix socket 与 Docker 引擎通信。而只有 root 用户和 docker 组的用户才能够访问 Docker 引擎的 Unix socket。出于安全考虑,通常 Linux 系统上不会直接使用 root 用户。所以,更好地作法是将须要使用 docker 的用户加入 docker 用户组。
创建 docker 组:groupadd docker
将当前用户加入 docker 组:usermod -aG docker $USER
退出当前终端并从新登陆,进行以下测试。
# 测试docker是否正确安装 docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
若是在使用过程当中发现拉取 Docker 镜像十分缓慢,能够配置 Docker 国内镜像加速。
添加内核参数
若是在 CentOS 使用 Docker CE 看到下面的这些警告信息:
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
请添加内核配置参数以启用这些功能。
mkdir -p /etc/docker tee -a /etc/sysctl.conf <<-EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
而后从新加载 sysctl.conf 便可sysctl -p
编辑文件/etc/docker/daemon.json 添加如下代码:
{ "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"] }
涉及的命令有export、import、save、load
Save 命令 :docker save [options] images [images...]
示例 :docker save -o nginx.tar nginx:latest
或 docker save > nginx.tar nginx:latest
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
Load 命令 :docker load [options]
示例 docker load -i nginx.tar
或 docker load < nginx.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
Export 命令 :docker export [options] container
示例 docker export -o nginx-test.tar nginx-test
其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
import命令: docker import [options] file|URL|- [REPOSITORY[:TAG]]
示例 docker import nginx-test.tar nginx:imp
或 cat nginx-test.tar | docker import - nginx:imp
区别
export命令导出的tar文件略小于save命令导出的
export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出
基于第二点,export导出的文件再import回去时,没法保留镜像全部历史(即每一层layer信息,不熟悉的能够去看Dockerfile),不能进行回滚操做;而save是依据镜像来的,因此导入时能够完整保留下每一层layer信息。以下图所示,nginx:latest是save导出load导入的,nginx:imp是export导出import导入的。
建议:
能够依据具体使用场景来选择命令
如果只想备份images,使用save、load便可
如果在启动容器后,容器内容有变化,须要备份,则使用export、import
docker中删除images的命令是docker rmi,但有时候执行此命令并不能删除images;(确认删除竟像时镜像没有在容器中运行,为中止状态)
docker images 查看镜像
docker rmi IMAGE ID
docker images 从新查看镜像列表
发现image并无被删除,只是他的tag被删除了,再次执行docker rmi IMAGE_ID只会报错
docker rmi 53912975086f Error: image_delete: Conflict, 53912975086f wasn't deleted 2019/07/20 16:16:27 Error: failed to remove one or more images
查看docker的帮助会发现有两个与删除有关的命令rm和rmi
rm Remove one or more containers rmi Remove one or more images
这里有两个不一样的单词,images和container。其中images很好理解,跟日常使用的虚拟机的镜像一个意思,至关于一个模版,而container则是images运行时的的状态。docker对于运行过的image都保留一个状态(container),可使用命令docker ps来查看正在运行的container,对于已经退出的container,则可使用docker ps -a来查看。 若是你退出了一个container而忘记保存其中的数据,你可使用docker ps -a来找到对应的运行过的container使用docker commit命令将其保存为image而后运行。
回到以前的问题,因为image被某个container引用(拿来运行),若是不将这个引用的container销毁(删除),那image确定是不能被删除。
因此想要删除运行过的images必须首先删除它的container。继续来看刚才的例子,
执行命令 docker ps -a
能够看出53912975086f的image被cc6b344ed27f的container使用着,因此必须首先删除该container
docker rm cc6b344ed27f Error: container_delete: Impossible to remove a running container, please stop it first 2019/07/20 16:36:44 Error: failed to remove one or more containers
现错误,这是由于该container正在运行中(运行docker ps查看),先将其关闭
docker stop cc6b344ed27f docker rm cc6b344ed27f docker rmi 53912975086f docker images
能够看出,image已经被删除。