Skip to content

Docker安装

参考:https://docs.docker.com/engine/install/centos/

sudo开头的命令表示要root用户或者管理员用户才能操作

一、环境准备

  • linux内核版本::docker官方要求至少3.8以上,建议3.10以上

  • 建议关闭防火墙:systemctl stop firewalld.service

  • 关闭linux系统安全:

     vi /etc/selinux/config
     #关闭系统安全验证
     SELINUX=disabled
  • 下载阿里云docker社区版 yum源

    # 进入路径
    cd /etc/yum.repos.d/
    #下载源-阿里国内源
    wget https://download.docker.com/linux/centos/docker-ce.repo
    # 国外源

wget https://download.docker.com/linux/centos/docker-ce.repo


或者

#安装必要的一些系统工具 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-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo


## 二、安装之前卸载docker

如果之前装有老版本的docker,通过命令卸载

```bash
sudo yum -y remove docker
sudo yum -y remove docker-common
sudo yum -y remove docker-selinux
sudo yum -y docker docker-engine

三、安装docker-CE

  1. 查看docker安装包
yum list | grep docker
#列出所有包
yum list docker-ce --showduplicates | sort -r
  1. 找到上面列出的镜像,下载docker社区版。具体镜像名称以实际为准
yum install -y docker-ce.x86_64
#如果没有上面的镜像,直接不指定版本安装
yum install -y docker-ce
#如果不安装社区版
yum install docker-io -y
  1. 在生产环境当中,可能需要执行想要安装的版本,此时可使用以下命令里查询出当前可用的docker版本

    yum list docker-ce.x86_64 --showduplicates | sort -r
    列出版本以后,可使用以下命令安装想要的版本,.x86_64舍弃
    sudo yum install docker-ce-<version>
    yum install docker-ce-24.0.2-1.el7
  2. 修改镜像仓库

    vim /etc/docker/daemon.json
    #改为下面内容,然后重启docker
    {
      "debug": true,
      "experimental": true,
      "registry-mirrors": [
        "https://pb5bklzr.mirror.aliyuncs.com",
        "https://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
      ]
    }

四、配置阿里云镜像加速

docker默认的镜像是从国外拉取的,可能会出现跨区域的网络波动导致下载镜像的速度很慢等原因。

打开阿里云控制台,搜索容器,选择容器加速器选项:复制配置的链接地址

vi /etc/docker/daemon.json

这里可以设置容器日志的大小,控制容器日志的量,如果想要json格式可以增加

由于阿里云的镜像早就不更新docker hub的镜像了,这里使用的是国内反代的镜像地址

json
{
    "registry-mirrors": ["https://docker.mirrors.sjtug.sjtu.edu.cn"],
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "200m",
        "max-file": "3"
    }
}
bash
systemctl daemon-reload && systemctl restart docker

五、配置代理

参考:https://docs.docker.com/engine/daemon/proxy/

在配置文件增加以下代理的内容

json
{
  "proxies": {
    "http-proxy": "http://proxy.example.com:3128",
    "https-proxy": "https://proxy.example.com:3129",
    "no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"
  }
}

六、启动docker

sql
#更新xfsprogs
yum -y update xfsprogs
systemctl start docker
#上面命令启动报错,用以下命令:
sudo  systemctl daemon-reload
sudo  systemctl restart docker.service
#设置开机自启
systemctl enable docker

七、验证安装正确

docker version

yaml
Client:
 Version:    17.12.1-ce
 API version:    1.35
 Go version:    go1.9.4
 Git commit:    7390fc6
 Built:    Tue Feb 27 22:15:20 2018
 OS/Arch:    linux/amd64

Server:
 Engine:
  Version:    17.12.1-ce
  API version:    1.35 (minimum version 1.12)
  Go version:    go1.9.4
  Git commit:    7390fc6
  Built:    Tue Feb 27 22:17:54 2018
  OS/Arch:    linux/amd64
  Experimental:    false

或者

bash
sudo docker run hello-world

然后docker将下载测试镜像,并使用该镜像启动一个容器。看到类似以下输出表示成功

然后docker将下载测试镜像,并使用该镜像启动一个容器。看到类似以下输出表示成功

yaml
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifests/latest: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fhello-world%3Apull&service=registry.docker.io: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.

八、虚拟机安装了docker可能启动有问题,关闭并且禁止NetworkManager服务,修改配置文件

bash
systemctl stop NetworkManager
systemctl disable NetworkManager

ip addr查看网卡的mac地址,复制
修改网卡的配置:/etc/sysconfig/network-script/ifcfg-ens
BOOTPROTO=dhcp
HWADDR=mac地址

九、卸载docker

1、删除docker软件包

bash
sudo yum remove docker-ce

2、若需删除docker存储的文件,例如镜像、容器、卷等信息,执行:

sudo rm -rf /var/lib/docker

十、docker升级

  1. 首先,使用以下命令之一确认当前Docker CE的版本:

    docker version                   # 查看docker的版本信息
    docker version | grep -i version # 查看docker的版本号
  2. 然后,您可以使用以下命令升级新版的Docker CE。假设您要安装的版本是 docker-ce-<VERSION>

    yum list docker-ce.x86_64 --showduplicates | sort -r
    #升级;相当于重新卸载安装 sudo yum remove docker-ce docker-ce-cli && yum install -y docker-ce-<VERSION> docker-ce-cli-<VERSION>
    yum upgrade -y docker-ce-<VERSION> docker-ce-cli-<VERSION>
    systemctl daemon-reload && systemctl restart docker

请将<VERSION>替换为您要升级到的版本号。

  1. 安装完成后,您可以使用以下命令验证Docker CE的版本是否已更新:

    docker version                   # 查看docker的版本信息
    docker version | grep -i version # 查看docker的版本号

十一、容器通信问题--虚拟机

Centos默认设置/proc/sys/net/ipv4/ip_forward 为 0,这从底层阻断了Docker所有网络。一般虚拟机默认是阻断的

解决办法:

vi /usr/lib/sysctl.d/00-system.conf

添加如下代码:

properties
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1

重启network服务

bash
systemctl restart network

十二、开启远程管理

Docker 默认不开启管理端口 2375就必须先对 docker.service 文件修改。

nano /usr/lib/systemd/system/docker.service

找到以下句子

ExecStart=/usr/sbin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS

在中间添加 tcp://0.0.0.0:2375 -H,如下:

ExecStart=/usr/sbin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS

加载并重启

bash
systemctl daemon-reload && systemctl restart docker