Docker-容器-基础

本文最后更新于:2021年5月28日 中午

环境

  • Centos7 腾讯云服务器

官方文档

https://docs.docker.com/install/linux/docker-ce/centos/

Docker的优点

快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

  • 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
  • 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
  • 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
  • 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

Docker 架构

Docker 包括三个基本概念:

  • 镜像(Image)
    Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container)
    镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository)
    仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

Docker 面向对象
容器 对象
镜像

概念 说明
Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器(Container) 容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker Registry Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

安装

Docker CE 即社区免费版
Docker EE 即企业版,强调安全,但需付费使用
此处为Docker CE

安装的前提条件

CentOS7 发行版 64位
内核版本3.10以上

1
uname -r  # 查询内核版本

过程

  1. 卸载旧版本
    1
    2
    3
    4
    5
    6
    7
    8
    sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
  2. 安装必要的包
    1
    2
    3
    sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
  3. 设置可靠的存储库
    1
    2
    3
    sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  4. 安装Docker-ce
    1
    yum install -y docker-ce
  5. 启动Docker-ce
    1
    systemctl start docker
  6. 测试运行 hello-world
    1
    docker run hello-world
    由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行,看到以上界面说明Docker已经成功安装

将docker修改为国内镜像源

国内pull很慢, 需要更换镜像源
可选的国内加速地址有不少,你应该稍微测试一下能不能用,毕竟这东西不时出问题

镜像信息 内容
Docker中国区官方镜像 https://registry.docker-cn.com
网易 http://hub-mirror.c.163.com
ustc https://docker.mirrors.ustc.edu.cn
中国科技大学 https://docker.mirrors.ustc.edu.cn
阿里云容器 https://cr.console.aliyun.com/
首页点击“创建我的容器镜像” 得到一个专属的镜像加速地址
  1. 打开/创建配置文件
    没有这个文件就创建
    1
    vim /etc/docker/daemon.json
  2. 修改配置文件
    填入镜像地址配置,保存退出
    1
    2
    3
    {
    "registry-mirrors": ["https://registry.docker-cn.com"]
    }
  3. 重新加载配置
    1
    systemctl daemon-reload
  4. 重启Docker服务
    1
    sudo service docker restart

    常用操作

    拉取镜像

    1
    docker pull <镜像名>

    容器启动

    1
    docker run <参数> <镜像名>

    常用参数

参数 简写 意义
–detach -d 在后台运行容器,并且打印容器id
–interactive -i 即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用
–tty -t 分配一个伪tty,一般与 -i 连用

-i -t -d 可以简写为-itd

查看容器运行情况

1
docker ps <参数>

可填入-a以查看所有的容器

其他操作

卸载Docker-ce

1
2
3
4
5
6
7
8
9
10
11
yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
rm -rf /var/lib/docker

查看Docker版本

1
docker --version

问题

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

1
2
systemctl daemon-reload
systemctl restart docker.service

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!