本文主要介绍 CentOS 系统安装 Docker 的流程。

前提条件

OS 要求

CentOS7:

The centos-extras repository must be enabled. This repository is enabled by default, but if you have disabled it, you need to re-enable it.

The overlay2 storage driver is recommended

卸载旧的版本

较旧版本的 Docker 被称为 dockerdocker-engine。如果已安装这些,请卸载它们以及相关的依赖项:

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

/var/lib/docker 目录下保存着镜像、容器、卷、网络。官方文档安装的 docker-ce 包,内部源中只有 docker-engine包,docker-ce 是最新的社区版本的包名。

安装 Docker CE

使用源安装

设置源

1.安装依赖的包,yum tils 提供了 yum-config-manager 套件, device-mapper-persistent-datalvm2devicemapper 存储驱动所依赖的包。

$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

2.使用如下命令设置 stable 源:

$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

国内可选择清华大学源-Docker Community Edition 镜像使用帮助

安装 Docker CE

1.安装最新版本的 Docker CE:

$ sudo yum install docker-ce

2.要安装特定版本的 Docker CE,可在 repo 中列出可用版本,然后选择并安装:

$ yum list docker-ce --showduplicates | sort -r

Docker 安装之后, docker 组就被创建了,但没有用户加到这个群组中。

3.启动 Docekr:

$ sudo systemctl start docker

4.可以通过运行 hello-world 镜像来验证 docker 的安装成功:

sudo docker run hello-world`

这个命令下载一个测试镜像,在容器中运行它。当容器运行时,它会打印一条信息并退出。

从 RPM 包安装

如果无法使用 Docker的源来安装 Docker,则可以下载适用于您的发行版的 .rpm 文件并手动安装。每次要升级 Docker 时都需要下载新文件。

  1. https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 下载 rpm 包
  2. 安装 Docker CE:$ sudo yum install /path/to/package.rpm

升级 Docker CE

使用 yum -y upgrade docker-ce 升级版本。

卸载

  1. 卸载 Docker 包:$ sudo yum remove docker-ce
  2. 主机上的镜像、容器、卷或自定义配置文件不会自动删除。为了删除这些文件,可以运行如下命令:$ sudo rm -rf /var/lib/docker

你必须手动删除任何已编辑的配置文件

注意点

  1. 如果非 root 用户想要使用 Docker,你应该将该用户添加到 docker 组中:sudo usermod -aG docker your-user
  2. 安装 Docker CE 之后,它在基于 DEB 的发行版上会自动启动。在基于 RPM 的发行版上,需要使用相应的 systemctlservice 命令手动启动它

使用 systemd 控制 Docker

使用 systemd 控制 Docker

手动启动

大多数 Linux 发行版使用 systemctl 启动服务,如果没有,就用 service命令:

  • systemctl:$ sudo systemctl start docker
  • service:$ sudo service docker start

系统自启

If you want Docker to start at boot, see

如果你想要实现开启自启 docker,可以看看这篇文章 Configure Docker to start on boot

systemctl list-unit-files|grep docker # 查看 Docker 服务状态

配置 Docker daemon 选项

推荐的方法是使用平台独立的 daemon.json 文件,默认位于 /etc/docker/ 中。详细配置项,查看官宣-Daemon configuration file,有一份中文的备注说明:docker daemon(dockerd)配置文件daemon.json

你可以使用 daemon.json 配置几乎所有守护程序配置选项。下面的例子配置了两个选项。你不能使用 daemon.json 机制配置的一个选项是 HTTP proxy

Runtime directory and storage driver

你可能想要通过移动镜像、容器和卷到独立分区来控制磁盘空间。

为了实现这个,可以在 daemon.json 中做如下配置:

{
"data-root": "/mnt/docker-data",
"storage-driver": "overlay"
}

HTTP/HTTPS proxy

Docker 守护进程使用 HTTP_PROXY, HTTPS_PROXYNO_PROXY 环境变量在它的启动环境中来配置 HTTP 和 HTTPS 代理。你不能使用 daemon.json 文件来配置这些环境变量。

如果你使用的是 HTTP 或 HTTPS 代理服务器,例如在公司设置中,则需要将此配置添加到 Docker systemd 服务文件中。

1.为 docker 服务创建一个 systemd 目录:

$ sudo mkdir -p /etc/systemd/system/docker.service.d

2.创建一个文件 /etc/systemd/system/docker.service.d/http-proxy.conf,加入 HTTP_PROXY 环境变量:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"

或者,如果你使用 HTTPS 代理服务,创建一个文件 /etc/systemd/system/docker.service.d/https-proxy.conf,加入 HTTPS_PROXY 环境变量:

[Service]
Environment="HTTPS_PROXY=https://proxy.example.com:443/"

3.如果你拥有内部的 Docker registries 服务或者要使用国内的镜像加速器-daocloud.io,你需要通过指定 NO_PROXY 环境变量来不通过代理访问它们:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com,daocloud.io"

这样,你访问 NO_PROXY 中的网址时,就不会走代理,速度会比较快。

Or, if you are behind an HTTPS proxy server:

[Service]
Environment="HTTPS_PROXY=https://proxy.example.com:443/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"

一个实际配置的栗子:

mkdir -p /etc/systemd/system/docker.service.d/ # 先保证有这个目录
cat <<'EOF'>/etc/systemd/system/docker.service.d/http-proxy.conf # 这里一定要记得让内部镜像仓地址不要走代理,否则无法访问我们私有的镜像仓
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:3128/"
Environment="HTTPS_PROXY=http://127.0.0.1:3128/"
Environment="NO_PROXY=localhost,127.0.0.0/8,.domain.com"
EOF

4.Flush changes:

$ sudo systemctl daemon-reload

5.重启 Docker:

$ sudo systemctl restart docker

6.验证配置项已经被加载:

$ systemctl show --property=Environment docker
Environment=HTTP_PROXY=http://proxy.example.com:80/

如果你采用的 HTTPS 代理:

$ systemctl show --property=Environment docker
Environment=HTTPS_PROXY=https://proxy.example.com:443/

手动创建 systemd 单元文件

当你手动安装 Docker 时,如果你想要用 systemd 管理 Docker,可以安装两个单元文件 servicesocket,参考 moby/contrib/init/systemd/,下载文件至 /etc/systemd/system

配置使用 docker 镜像仓库

选择一:ustc的镜像

新版的 Docker 使用 /etc/docker/daemon.json(Linux) 配置 Daemon:

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

选择二:Docker 中国官方镜像加速

{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

Docker 拖取镜像默认走的是 HTTPS 协议(443端口),一般私有仓库都没有合法的 HTTPS 证书,通过通过配置私有仓库为非安全仓库:

{
"insecure-registries" : ["hub.h.com"]
}

insecure-registries 就是配置的非安全仓库的地址。

测试配置的结果:

busybox是一个集成了一百多个最常用linux命令和工具的软件,同时它也是一个最小的Linux系统,它提供了该系统的主要功能,例如grep、find、mount以及telnet等但不包含一些与GNU相关的功能和选项

docker pull busybox

Docker 存储驱动

Linux kernel 4.0以后才支持的overlay2(Linux kernel 3.18以后才支持的叫overlayFS)。同时请确保docker的服务端版本不低于1.12,否则无法支持。uname -sr 可以查看系统内核版本。

Docker 1.12.6/v17.03 文档中 CentOS7 系统下安装时,明确说明,用于生产时,必须使用 devicemapper 驱动的 direct-lvm 模式,需要我们提前准备好块设备,以提供更好的稳定性和性能。默认使用 devicemapper 驱动的 loop-lvm 模式,因为安装简单,只适用于测试环境。从 docker info 信息可以看出,loop-lvm 模式最大可用空间只有107GB。生产环境下必须使用 devicemapper 驱动的 direct-lvm 模式,使用块设备,速度更快并且能更有效地使用系统资源。

Docker v17.06 及以后的版本中,关于 OverlayFS 存储驱动,尽量使用 overlay2 而不要使用 overlay,官方的说明是 overlay 可以使用但不建议。使用 overlay2 时 Linux 系统内核要求4.0以上,或者 CentOS7 的内核在 3.10.0-693 以上。Docker-CE v17.06 及以上,在使用 overlay2 驱动时,还需要设置额外的参数,以禁止检测内核为4.0版本。

#查看当前存储驱动
docker info|grep -i storage
#停止Docker
service docker stop
#清空数据,如果有啥需要的请自己备份
rm -rf /var/lib/docker/*
#修改配置文件
vi /etc/docker/daemon.json
#如果没有这个文件或没有内容,就直接把下面的粘贴进去
#不然就只添加那一条
#如果不是在最后一行加请自行在末尾添加逗号
{
"storage-driver": "overlay2"
}
#如果是CentOS7或者RedHat7内核在3.10.0-693以下的,设置额外的参数:
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
#当然,也可以通过给docker修改启动参数的方式来
# 1.修改/etc/init.d/docker
# 这个直接在 dockerd 后面加参数就行,不过其实和下面的差不多
# 2.修改/etc/sysconfig/docker
# 改成类似 other_args="-s overlay2"
# 3.修改/usr/lib/systemd/system/docker.service
# 改成类似 ExecStart=/usr/bin/dockerd -s overlay2 #启动docker
service docker start

通常在生产构建机器上,一般系统盘大小都不大,都会挂载一个较大容量的数据盘,比如 data 目录。那么,为了避免日后 Docker 的根目录 /var/lib/mock过大,撑爆系统盘,我们需要想办法修改一下 Docker 的根目录,主要有两种办法:

1.先备份 /var/lib/docker的内容,然后在创建/data/docker的软连接: ln -s /data/docker /var/lib/docker

2.修改 daemon.json 配置:

{
# before before 17.06-ce
"graph": "/data/docker",
# docker after 17.06-ce
"data-root":"/data/docker",
}

参考

Dockuer Hub 镜像:

存储驱动:

最后

欢迎访问原文:

Linux--CentOS 安装 Docker 教程的更多相关文章

  1. Linux centos 安装Docker

    安装docker需要centos7 内核3.1以上 基本上centos7以上的都支持, 然后先更新到最新 sudo yum update 然后直接安装 sudo yum install docker ...

  2. linux centos安装教程

    linux centos安装教程1 CentOS-7-x86_64-DVD-1511.iso 这个是dvd版本 2 CentOS-7-x86_64-Minimal-1511.iso 这个迷你版 是没有 ...

  3. 阿里云Linux CentOS 7 Docker部署使用gogs搭建自己的git服务器

    一.前言 Git是目前优秀和流行的源代码管理工具.而GitHub是一个面向开源及私有软件项目的托管云平台,但开源免费,私有收费.而公司出于商业化等目的需要搭建自己的源代码托管服务器.通过网上了解Gog ...

  4. 手把手教centos安装docker

    目录 版本说明 官网安装教程 安装docker 现在网络上安装教程满天飞,很大一部分是别人的总结,可以说是成果,却没有介绍如何去实现这个成果方法.这篇就结合官网教程来聊聊如何在centos上安装doc ...

  5. linux centos安装编译phantomjs 2.0的方法

    phantomjs 2.0最新版的官方不提供编译好的文件下载,只能自己编译,有教程但是过于简单,特别是服务器上要安装N多的支持.折腾到现在终于装好了并且能正常运行了,截图mark一下: linux c ...

  6. centos安装docker容器

    centos安装docker容器 系统环境需求 docker要运行在centos7系统中,系统为64位机器上,内核最小版本在3.10以上 如果系统为centos6,后面有附带的安装方法 uname - ...

  7. 【实战】Docker 入门实战一:ubuntu 和 centos 安装Docker

    Docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布 ...

  8. ubuntu和centos安装docker

    一. UBUNTU系统上 1. 卸载旧版本(新系统不用执行) sudo apt-get remove docker docker-engine docker.io     2. 安装docker st ...

  9. CentOS安装docker ce的三种方式

    参考文章: CentOS安装docker ce的三种方式: 1.环境 CentOS Linux release 7.6.1810 (Core) 2.卸载旧版本 sudo yum remove dock ...

随机推荐

  1. Angular 执行 css3 简单的动画

    <div class="content"> 内容区域 <button (click)="showAside()">弹出侧边栏</b ...

  2. [Java复习] 多线程 并发 JUC 补充

    线程安全问题? 当多个线程共享同一个全局变量,做写的操作时,可能会受到其他线程的干扰.读不会发生线程安全问题. --  Java内存模型. 非静态同步方法使用什么锁? this锁 静态同步方法使用什么 ...

  3. Unix/Linux系统下获得时间戳函数

    在Unix/Linux系统下,使用gettimeofday函数来获得当前系统的时间戳,精度可达到微秒(microsecond,即μs)级别. 通过结构体timeval来存放当前时间戳的信息: #ifn ...

  4. osg::Camera example

    #ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include<iostream> #include <osgV ...

  5. cookie和session-csrf防护-中间件

    cookie概念: 是由服务器生成,保存在浏览器端的一小段文本信息. cookie特点: 1) cookie是以键值对进行存储的. 2) 浏览器访问网站时,会将本地保存的跟网站相关的所有cookie发 ...

  6. thymeleaf中分类信息使用不同的样式

    需求: 相关class类名:S224_on_point url:/notification/list url:/notification/list?type=2 thymeleaf代码如下: < ...

  7. Linux hostname介绍

    以下操作均时基于 Centos 6.8 操作. 一.现象 在平时工作中,当需要修改主机名时,我们一般会这样操作: 第一步,通过 hostname 命令临时修改主机名. hostname kwang-t ...

  8. .net mvc网站集成adfs(ws-fed协议)

    网站地址(本地开发测试):https://localhost:9000 第一步,adfs配置 配置要声明颁发策略(adfs要发送给网站的声明) 选择刚添加的依赖方信任,编辑颁发策略 配置完成 第二步, ...

  9. php open_basedir的使用与性能分析

    php open_basedir的使用与性能分析 使用方法 <pre>/*限制打开的目录*/ini_set('open_basedir', __DIR__.'/');</pre> ...

  10. 如何使用Curator监听zookeeper事件变化

    掌握zookeeper事件监听机制,非常重要,可以说是跨入了进阶的门槛,只有掌握了如何监听某个节点或路径,我们才能在节点变化后,做一些我们想做的事,包括: 1,配置文件同步 2,主从切换 3,分布式队 ...