<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Docker on My Blog</title><link>/tags/docker/</link><description>Recent content in Docker on My Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 01 Jan 2021 00:00:00 +0000</lastBuildDate><atom:link href="/tags/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>容器核心技术</title><link>/2021/01/01/%E5%AE%B9%E5%99%A8%E6%A0%B8%E5%BF%83%E6%8A%80%E6%9C%AF/</link><pubDate>Fri, 01 Jan 2021 00:00:00 +0000</pubDate><guid>/2021/01/01/%E5%AE%B9%E5%99%A8%E6%A0%B8%E5%BF%83%E6%8A%80%E6%9C%AF/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h1 id="1容器的重要特征"&gt;1.容器的重要特征&lt;/h1&gt;
&lt;p&gt;随着互联网和软件技术的发展，容器技术越来越为大家所熟知和使用，那么容器技术到底好在哪里呢？ 主要是他有如下四个&lt;strong&gt;重要特征&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;隔离性：基于Linux kernel提供的 namespace资源隔离方案。&lt;/p&gt;
&lt;p&gt;安全性：资源隔离，资源访问自然受到了严格的限制，因此同时也把安全问题解决了&lt;/p&gt;
&lt;p&gt;便捷性：相对于虚拟机技术，容器技术启动速度非常快&lt;/p&gt;
&lt;p&gt;可配额：基于Linux 的Cgroups 即：Control Groups，可以对一个或一组资源控制和监控&lt;/p&gt;
&lt;h2 id="docker优势"&gt;docker优势&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;资源利用率高&lt;/li&gt;
&lt;li&gt;启动快&lt;/li&gt;
&lt;li&gt;运行环境一致
&lt;ul&gt;
&lt;li&gt;便于持续交付和部署&lt;/li&gt;
&lt;li&gt;便于迁移&lt;/li&gt;
&lt;li&gt;便于维护和扩展&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;​&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="docker劣势"&gt;docker劣势&lt;/h3&gt;
&lt;h1 id="2-linux-namespace"&gt;2 Linux namespace&lt;/h1&gt;
&lt;p&gt;Linux Namespace是Linux提供的一种内核级别环境隔离的方法。提供了对UTS、IPC、mount、PID、network、User等的隔离机制。&lt;/p&gt;
&lt;p&gt;&lt;img alt="linux_namespace" loading="lazy" src="/2021/01/01/%E5%AE%B9%E5%99%A8%E6%A0%B8%E5%BF%83%E6%8A%80%E6%9C%AF/linux_namespace.png"&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;分类&lt;/th&gt;
&lt;th&gt;系统调用参数&lt;/th&gt;
&lt;th&gt;相关内核版本&lt;/th&gt;
&lt;th&gt;隔离内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mount namespaces&lt;/td&gt;
&lt;td&gt;CLONE_NEWNS&lt;/td&gt;
&lt;td&gt;Linux 2.4.19&lt;/td&gt;
&lt;td&gt;挂载点（文件系统）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTS namespaces&lt;/td&gt;
&lt;td&gt;CLONE_NEWUTS&lt;/td&gt;
&lt;td&gt;Linux 2.6.19&lt;/td&gt;
&lt;td&gt;主机名与域名,影响uname(hostname, domainname)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IPC namespaces&lt;/td&gt;
&lt;td&gt;CLONE_NEWIPC&lt;/td&gt;
&lt;td&gt;Linux 2.6.19&lt;/td&gt;
&lt;td&gt;信号量、消息队列和共享内存, inter-process communication，有全局id&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PID namespaces&lt;/td&gt;
&lt;td&gt;CLONE_NEWPID&lt;/td&gt;
&lt;td&gt;Linux 2.6.24&lt;/td&gt;
&lt;td&gt;进程编号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network namespaces&lt;/td&gt;
&lt;td&gt;CLONE_NEWNET&lt;/td&gt;
&lt;td&gt;Linux 2.6.29&lt;/td&gt;
&lt;td&gt;网络设备、网络栈、端口等等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User namespaces&lt;/td&gt;
&lt;td&gt;CLONE_NEWUSER&lt;/td&gt;
&lt;td&gt;Linux 3.8&lt;/td&gt;
&lt;td&gt;用户和用户组&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="三个系统调用"&gt;三个系统调用&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;调用&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;clone()&lt;/td&gt;
&lt;td&gt;实现线程的系统调用，用来创建一个新的进程，并可以通过设计上述参数达到隔离。 创建时传入 flags参数，可选值有 CLONE_NEWIPC, CLONE_NEWNET, CLONE_NEWNS, CLONE_NEWPID, CLONE_NEWUTS, CLONE_NEWUSER， 分别对应上面六种namespace。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unshare()&lt;/td&gt;
&lt;td&gt;使某进程脱离某个namespace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;setns()&lt;/td&gt;
&lt;td&gt;把某进程加入到某个namespace&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;常用操作&lt;/p&gt;</description></item><item><title>horovod</title><link>/2018/03/10/horovod/</link><pubDate>Sat, 10 Mar 2018 00:00:00 +0000</pubDate><guid>/2018/03/10/horovod/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h1 id="官方介绍"&gt;官方介绍&lt;/h1&gt;
&lt;p&gt;Horovod is a distributed training framework for TensorFlow, Keras, and PyTorch. The goal of Horovod is to make distributed Deep Learning fast and easy to use.&lt;/p&gt;
&lt;p&gt;官方测试效果&lt;/p&gt;
&lt;p&gt;&lt;img alt="training" loading="lazy" src="/2018/03/10/horovod/horovod.png"&gt;&lt;/p&gt;
&lt;h1 id="running-horovod"&gt;Running Horovod&lt;/h1&gt;
&lt;p&gt;The example commands below show how to run distributed training. See the &lt;a href="https://github.com/uber/horovod/blob/master/docs/running.md"&gt;Running Horovod&lt;/a&gt; page for more instructions, including RoCE/InfiniBand tweaks and tips for dealing with hangs.&lt;/p&gt;
&lt;h2 id="1-单机4卡"&gt;1. 单机4卡:&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# docker
nvidia-docker run -it 172.16.10.10:5000/horovod:0.12.1-tf1.8.0-py3.5
mpirun -np 4 -H localhost:4 python keras_mnist_advanced.py
# singularity
singularity shell --nv /scratch/containers/ubuntu.simg
mpirun -np 4 -H localhost:4 python keras_mnist_advanced.py
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="2-多机多卡"&gt;2. 多机多卡:&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ mpirun -np 16 \
-H server1:4,server2:4,server3:4,server4:4 \
...
python train.py
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="3--完整-docker-使用horovod"&gt;3. &lt;a href="https://github.com/uber/horovod/blob/master/docs/docker.md"&gt;完整 Docker 使用horovod &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;​&lt;/p&gt;</description></item><item><title>docker repository使用方法</title><link>/2017/05/31/docker-repository%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/</link><pubDate>Wed, 31 May 2017 00:00:00 +0000</pubDate><guid>/2017/05/31/docker-repository%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id="1查看repository中的image"&gt;1.查看repository中的image&lt;/h2&gt;
&lt;p&gt;假设集群上docker 私有仓库做到了master节点，172.16.10.10:5000。&lt;/p&gt;
&lt;h3 id="获取已有image"&gt;获取已有image&lt;/h3&gt;
&lt;p&gt;私有仓库目前已有images如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$curl http://172.16.10.10:5000/v2/_catalog|python2 -m json.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 289 100 289 0 0 1125 0 --:--:-- --:--:-- --:--:-- 1128
{
&amp;#34;repositories&amp;#34;: [
&amp;#34;centos&amp;#34;,
&amp;#34;gitlab/gitlab-ce&amp;#34;,
&amp;#34;gitlab/gitlab-runner&amp;#34;,
&amp;#34;gitlab-runner&amp;#34;,
&amp;#34;keras&amp;#34;,
&amp;#34;mongo&amp;#34;,
&amp;#34;nvidia/cuda&amp;#34;,
&amp;#34;nvidia/digits&amp;#34;,
&amp;#34;paddledev/paddle&amp;#34;,
&amp;#34;paddlepaddle/book&amp;#34;,
&amp;#34;paddlepaddle/paddle&amp;#34;,
&amp;#34;redis&amp;#34;,
&amp;#34;registry&amp;#34;,
&amp;#34;superman/registry&amp;#34;,
&amp;#34;ubuntu&amp;#34;,
&amp;#34;yhu/centos&amp;#34;,
&amp;#34;yhu/gitlab-runner&amp;#34;,
&amp;#34;yhu/registry&amp;#34;
]
}
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="获取制定image的所有版本号"&gt;获取制定image的所有版本号&lt;/h3&gt;
&lt;p&gt;如果想要查看对应的images拥有哪些版本， 例如paddlepaddle/paddle 这个镜像的版本&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$curl http://172.16.10.10:5000/v2/paddlepaddle/paddle/tags/list|python2 -m json.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 84 100 84 0 0 20771 0 --:--:-- --:--:-- --:--:-- 28000
{
&amp;#34;name&amp;#34;: &amp;#34;paddlepaddle/paddle&amp;#34;,
&amp;#34;tags&amp;#34;: [
&amp;#34;latest&amp;#34;,
&amp;#34;0.10.0&amp;#34;,
&amp;#34;0.10.0-dev&amp;#34;,
&amp;#34;0.10.0-gpu&amp;#34;
]
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;只需要修改中间对应的名字即可&lt;/p&gt;</description></item><item><title>docker镜像上增加安装包</title><link>/2017/05/25/docker%E9%95%9C%E5%83%8F%E4%B8%8A%E5%A2%9E%E5%8A%A0%E5%AE%89%E8%A3%85%E5%8C%85/</link><pubDate>Thu, 25 May 2017 00:00:00 +0000</pubDate><guid>/2017/05/25/docker%E9%95%9C%E5%83%8F%E4%B8%8A%E5%A2%9E%E5%8A%A0%E5%AE%89%E8%A3%85%E5%8C%85/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id="前提"&gt;前提&lt;/h2&gt;
&lt;p&gt;有时候我们会遇到这样的问题,一个镜像能满足我们的大部分需求,想在此基础上添加一部分功能.有三种方法&lt;/p&gt;
&lt;h3 id="1dockerfile构建"&gt;1.dockerfile构建&lt;/h3&gt;
&lt;p&gt;找到这个镜像的dockerfile,修改后build.&lt;/p&gt;
&lt;h3 id="2作为基础镜像"&gt;2.作为基础镜像&lt;/h3&gt;
&lt;p&gt;也是写一个dockerfile,只不过这次把这个有较多功能的镜像作为基础镜像,添加所需功能.然后build.&lt;/p&gt;
&lt;h3 id="3导出container为image"&gt;3.导出container为image&lt;/h3&gt;
&lt;p&gt;直接在运行的container中添加所需功能,然后commit成image.&lt;/p&gt;
&lt;h4 id="第一步"&gt;第一步&lt;/h4&gt;
&lt;p&gt;使用root用户进入一个新容器，不要用&lt;code&gt;--rm&lt;/code&gt;（否则当你退出容器的时候，容器没有了 你添加的功能自然就不复存在了）&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker run --user 0 -it --name superman sgdockerfilebox/mitosis_cpu:latest bash
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="第二步"&gt;第二步&lt;/h4&gt;
&lt;p&gt;在container中直接添加你要的功能&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;apt update
apt install ...
npm install -g n
n stable ...
pip3 install ...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然后退出容器&lt;code&gt; exit&lt;/code&gt;&lt;/p&gt;
&lt;h4 id="第三步"&gt;第三步&lt;/h4&gt;
&lt;p&gt;新的容器 &lt;code&gt;commit&lt;/code&gt;成新的&lt;code&gt;image &lt;/code&gt;
&lt;code&gt;docker commit superman sgdockerfilebox/wewo_cpu:v1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;（这里的&lt;code&gt;sgdockerfilebox/wewo_cpu:v1 &lt;/code&gt;名字和版本号自己定义）&lt;/p&gt;
&lt;p&gt;查看一下&lt;code&gt;commit&lt;/code&gt;的&lt;code&gt;image&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;root@gyw:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sgdockerfilebox/wewo_cpu v1 e4f2c829d1eb 23 minutes ago 4.42GB
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;没有问题就可以删除 之前创建的容器了，
&lt;code&gt;docker rm superman&lt;/code&gt;&lt;/p&gt;</description></item><item><title>docker设置devicemapper存储驱动</title><link>/2017/05/20/docker%E8%AE%BE%E7%BD%AEdevicemapper%E5%AD%98%E5%82%A8%E9%A9%B1%E5%8A%A8/</link><pubDate>Sat, 20 May 2017 00:00:00 +0000</pubDate><guid>/2017/05/20/docker%E8%AE%BE%E7%BD%AEdevicemapper%E5%AD%98%E5%82%A8%E9%A9%B1%E5%8A%A8/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;在 Ubuntu/Debian 上有 &lt;code&gt;UnionFS&lt;/code&gt; 可以使用，如 &lt;code&gt;aufs&lt;/code&gt; 或者 &lt;code&gt;overlay2&lt;/code&gt;，而 CentOS 和 RHEL 的内核中没有相关驱动。因此对于这类系统，一般使用 &lt;code&gt;devicemapper&lt;/code&gt; 驱动利用 LVM 的一些机制来模拟分层存储。这样的做法除了性能比较差外，稳定性一般也不好，而且配置相对复杂。Docker 安装在 CentOS/RHEL 上后，会默认选择 &lt;code&gt;devicemapper&lt;/code&gt;，但是为了简化配置，其 &lt;code&gt;devicemapper&lt;/code&gt; 是跑在一个稀疏文件模拟的块设备上，也被称为 &lt;code&gt;loop-lvm&lt;/code&gt;。这样的选择是因为不需要额外配置就可以运行 Docker，这是自动配置唯一能做到的事情。但是 &lt;code&gt;loop-lvm&lt;/code&gt; 的做法非常不好，其稳定性、性能更差，无论是日志还是 &lt;code&gt;docker info&lt;/code&gt; 中都会看到警告信息。&lt;a href="https://docs.docker.com/storage/storagedriver/device-mapper-driver/"&gt;官方文档&lt;/a&gt;有明确的文章讲解了如何配置块设备给 &lt;code&gt;devicemapper&lt;/code&gt; 驱动做存储层的做法，这类做法也被称为配置 &lt;code&gt;direct-lvm&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;除了前面说到的问题外，&lt;code&gt;devicemapper&lt;/code&gt; + &lt;code&gt;loop-lvm&lt;/code&gt; 还有一个缺陷，因为它是稀疏文件，所以它会不断增长。用户在使用过程中会注意到 &lt;code&gt;/var/lib/docker/devicemapper/devicemapper/data&lt;/code&gt; 不断增长，而且无法控制。这个稀疏文件的空间释放后基本不进行垃圾回收的问题。因此往往会出现即使删除了文件内容，空间却无法回收，随着使用这个稀疏文件一直在不断增长。&lt;/p&gt;
&lt;p&gt;所以对于 CentOS/RHEL 的用户来说，在没有办法使用 &lt;code&gt;UnionFS&lt;/code&gt; 的情况下，一定要配置 &lt;code&gt;direct-lvm&lt;/code&gt; 给 &lt;code&gt;devicemapper&lt;/code&gt;，无论是为了性能、稳定性还是空间利用率。&lt;/p&gt;
&lt;h2 id="配置过程"&gt;配置过程&lt;/h2&gt;
&lt;h3 id="1直接修改daemonjson"&gt;1.直接修改daemon.json&lt;/h3&gt;
&lt;p&gt;官方文档里面有两种方法,第一种就是直接修改&lt;code&gt;/etc/docker/daemon.json&lt;/code&gt; 这个文档,然后重启docker即可.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;{
&amp;#34;storage-driver&amp;#34;: &amp;#34;devicemapper&amp;#34;,
&amp;#34;storage-opts&amp;#34;: [
&amp;#34;dm.directlvm_device=/dev/xdf&amp;#34;, #这里修改成主机存储谁被,可以整个硬盘,或者一个分区
&amp;#34;dm.thinp_percent=95&amp;#34;,
&amp;#34;dm.thinp_metapercent=1&amp;#34;,
&amp;#34;dm.thinp_autoextend_threshold=80&amp;#34;,
&amp;#34;dm.thinp_autoextend_percent=20&amp;#34;,
&amp;#34;dm.directlvm_device_force=false&amp;#34;
]
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;修改完了之后,重启docker即可&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo systemctl restart docker
docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.03.1-ce
Storage Driver: devicemapper #看这里
....
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;但是有些时候修改了配置,并不会生效.需要手动修改添加逻辑卷等.&lt;/p&gt;</description></item><item><title>docker常用命令</title><link>/2017/05/13/docker%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</link><pubDate>Sat, 13 May 2017 00:00:00 +0000</pubDate><guid>/2017/05/13/docker%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id="1基本概念"&gt;1.基本概念&lt;/h2&gt;
&lt;p&gt;Docker 包括三个基本概念&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;镜像（&lt;code&gt;Image&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;Docker 镜像是一个特殊的&lt;strong&gt;文件系统&lt;/strong&gt;，除了提供容器运行时所需的程序、库、资源、配置等文件外，还包含了一些为运行时准备的一些配置参数（如匿名卷、环境变量、用户等）。镜像&lt;strong&gt;不包含任何动态数据&lt;/strong&gt;，其内容在构建之后也&lt;strong&gt;不会改变&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;容器（&lt;code&gt;Container&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;仓库（&lt;code&gt;Repository&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;一个集中的存储、分发镜像的服务。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;理解了这三个概念，就理解了 Docker 的整个生命周期。&lt;/p&gt;
&lt;h2 id="2docker安装"&gt;2.docker安装&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://docs.docker.com/engine/installation/#supported-platforms"&gt;官方安装教程&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/NVIDIA/nvidia-docker/tree/v2.0.3"&gt;nvidia-docker安装&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://yq.aliyun.com/articles/110806?spm=a2c1q.8351553.0.0.9e3d4f2NpVgK"&gt;阿里云镜像源docker安装方式&lt;/a&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#ubuntu
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository &amp;#34;deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable&amp;#34;
sudo apt-get -y update
sudo apt-get -y install docker-ce
#CentOS
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
sudo yum makecache fast
sudo yum -y install docker-ce
sudo service docker start
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="3docker命令"&gt;3.docker命令&lt;/h2&gt;
&lt;h3 id="a镜像相关"&gt;a、镜像相关&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker image --help
Usage: docker image COMMAND
Commands:
ls List images
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rm Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
load Load an image from a tar archive or STDIN
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
build Build an image from a Dockerfile
Run &amp;#39;docker image COMMAND --help&amp;#39; for more information on a command.
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="1docker-images"&gt;1.&lt;code&gt;docker images &lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;列出主机上已存在镜像&lt;/p&gt;</description></item><item><title>CentOS安装Docker</title><link>/2016/03/13/centos%E5%AE%89%E8%A3%85docker/</link><pubDate>Sun, 13 Mar 2016 00:00:00 +0000</pubDate><guid>/2016/03/13/centos%E5%AE%89%E8%A3%85docker/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id="docker-安装"&gt;Docker 安装&lt;/h2&gt;
&lt;p&gt;docker 简单又实用,一起来学习吧.现在官方也给出了比较全面(各种系统各种版本)的安装方法.&lt;a href="https://docs.docker.com/install/"&gt;链接在此&lt;/a&gt;.下面简单记录一下centos下的安装.&lt;/p&gt;
&lt;h3 id="卸载旧版本"&gt;卸载旧版本&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="yum源安装"&gt;yum源安装&lt;/h3&gt;
&lt;p&gt;通过添加docker仓库,只要有网在哪里都可以下载.有版本更新也可以直接一条命令解决.&lt;/p&gt;
&lt;h4 id="安装依赖包"&gt;安装依赖包&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="添加docker仓库"&gt;添加docker仓库&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="一键安装"&gt;一键安装&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo yum install docker-ce
sudo usermod -aG docker your-user #普通用户要使用docker需要添加到docker组
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="启动docker"&gt;启动docker&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo systemctl start docker
docker version #查看版本
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="rpm包安装"&gt;rpm包安装&lt;/h3&gt;
&lt;p&gt;下载好的rpm安装快速,可离线安装.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo yum install /path/to/package.rpm
sudo usermod -aG docker your-user #普通用户要使用docker需要添加到docker组
sudo systemctl start docker
docker version #查看版本
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="脚本安装"&gt;脚本安装&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker your-user #普通用户要使用docker需要添加到docker组
sudo systemctl start docker
docker version #查看版本
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="镜像加速器"&gt;镜像加速器&lt;/h3&gt;
&lt;p&gt;在国内下载docker镜像很可能会很慢,甚至有的都不能下载.使用加速器将会提升在国内获取Docker官方镜像的速度.其实就是阿里等先把官方的镜像下载到自己的机房,定时更新然后做成一个仓库站点,供国内使用,所以要快很多.添加方法很简单,通过修改daemon配置文件&lt;code&gt;/etc/docker/daemon.json&lt;/code&gt;来使用加速器.&lt;/p&gt;</description></item></channel></rss>