zoukankan      html  css  js  c++  java
  • 容器化技术大杀器 Docker

    什么是 Docker


    Docker 是一个虚拟化容器引擎,完全使用沙箱隔离机制,较传统的 VM 虚拟机有很大优势。

    《Linux 安装 Docker》

    《Linux 安装 Docker》

    传统虚拟机(VM)和虚拟化容器(Docker)的区别:

    传统的 VM 虚拟机不能共享资源 , 比如在 VMWare 中安装了一个内存为 4GB 的 Linux 操作系统 , 意味着该Linux系统使用了宿主机中固定的 4GB 内存且不能与宿主机或其它虚拟系统共享该资源 , 可能会造成资源浪费或资源溢出。

    Docker 弥补了传统 VM 虚拟机的缺点 , 每个虚拟化操作系统可以互相共享资源 , 解决了资源溢出或者资源浪费等一系列问题。

    Docker 主要概念


    Docker 镜像(Image)

    操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image)就相当于是一个 root 文件系统。

    Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如环境变量、用户等)。

    Docker 容器(Container)

    Docker 镜像和 Docker 容器的关系,就像是面向对象程序设计中的类与对象,镜像是静态的定义。

    容器是镜像运行时的实体,可以被创建、启动、停止、删除、暂停等。

    容器内的进程是运行在一个隔离的环境里,使用起来就好像是在一个独立于宿主的系统下操作一样,这种特性使得容器封装的应用比直接在宿主运行更加安全。

    Docker 仓库(Registry)

    镜像构建完成之后,一行命令就可以在当前的宿主机上运行起来,但是如果要在其它服务器上使用这个镜像,就需要一个集中存储镜像的仓库 — 即 Docker 仓库。

    公有 Docker Registry:最常使用的 Registry 公开服务是官方的 Docker Hub,但在国内访问会比较慢,而国内的一些云服务商提供了针对 Docker Hub 的镜像服务,常见的有 阿里云DaoCloud 加速器,比直接从 Docker Hub 下载速度会提高很多。

    私有 Docker Registry:可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。

    安装 Docker


    使用脚本自动安装

    $ curl -fsSL get.docker.com -o get-docker.sh
    
    $ sudo sh get-docker.sh --mirror Aliyun
    

    执行这两行命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 安装在系统中。

    使用 APT 安装

    # 安装一些必要的系统工具
    $ sudo apt-get update
    $ sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
    
    # 安装 GPG 证书
    $ curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    
    # 写入软件源信息
    $ sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
    
    # 更新软件源
    $ sudo apt-get -y update
    
    # 安装 Docker CE
    $ sudo apt-get -y install docker-ce
    

    Docker 用户组


    安装之后,默认情况下,Docker 命令会使用 Unix socket 与 Docker 引擎通讯,而只有 Root 用户和 Docker 组的用户才可以访问 Docker 引擎的 Unix socket,一般 Linux 系统上不会直接使用 Root 用户。因此,更好地做法是将需要使用 Docker 的用户加入 Docker 用户组。

    # 建立 Docker 用户组
    $ sudo groupadd docker
    
    # 将用户加入 Docker 用户组
    $ sudo usermod -aG docker 用户名
    

    镜像加速器


    由于国内从 Docker Hub 下载镜像有时会非常缓慢,因此可以配置国内云服务商提供的镜像加速器:

    获取阿里云镜像加速器

    添加镜像加速器

    • 登录阿里云
    • 进入 容器镜像服务控制台 > 镜像加速器
    • 添加镜像加速器
    • 复制加速器地址,如下图
      file

    配置镜像加速器

    编辑 daemon.json 配置文件

    $ sudo nano /etc/docker/daemon.json
    

    添加以下代码

    {
      "registry-mirrors": [
        "镜像加速器地址"
      ]
    }
    

    重启 Docker 服务

    $ sudo systemctl daemon-reload
    
    $ sudo systemctl restart docker
    

    检查加速器是否生效

    $ docker info
    

    看到输出以下内容,说明镜像加速器配置成功

    Registry Mirrors:
      镜像加速器地址
    

    Docker 常用命令


    Docker 镜像命令

    # 列出镜像列表
    $ docker images
    $ docker image ls -a
    
    # 运行 Docker 镜像(守护态方式)
    $ docker run -d 镜像名
    
    # 删除指定 Docker 镜像
    $ docker image rm 镜像名
    
    # 删除 Docker 虚悬镜像
    $ docker image prune
    

    Docker 容器命令

    # 列出正在运行的容器
    $ docker ps -a
    
    # 列出所有容器(包括已停止容器)
    $ docker ps -l
    
    # 进入运行中的 Docker 容器
    $ docker exec -it 容器ID /bin/bash
    
    # 停止 Docker 容器
    $ docker stop 容器ID
    
    # 删除指定 Docker 容器
    $ docker rm -f 容器ID
    
    # 删除停止的 Docker 容器
    $ docker container prune
    
    # 查看 Docker 容器历史运行日志
    $ docker logs 容器名
    
    # 实时监听 Docker 容器运行日志
    $ docker logs -f 容器名
    

    Docker 数据卷命令

    # 创建 Docker 数据卷
    $ docker volume create 数据卷名
    
    # 列出所有 Docker 数据卷
    $ docker volume ls
    
    # 删除指定 Docker 数据卷
    $ docker volume rm 数据卷名
    
    # 删除未关联(失效) Docker 数据卷
    $ docker volume prune
    $ docker volume rm $(docker volume ls -qf dangling=true)
    

    Docker 文件操作命令

    # 从主机复制文件到 Docker 容器中
    $ sudo docker cp 主机内文件路径 容器ID:容器内文件存储路径
    
    # 从 Docker 容器中复制文件到主机中
    $ sudo docker cp 容器ID:容器内文件路径 主机内文件存储路径
    

    更多干货请移步:https://antoniopeng.com

  • 相关阅读:
    LowercaseRoutesMVC ASP.NET MVC routes to lowercase URLs
    Asp.net MVC Combres的简单用法
    原码, 反码, 补码 详解
    四种数据存储结构---顺序存储 链接存储 索引存储 散列存储
    快速排序时间复杂度为O(n×log(n))的证明
    进程与线程及其区别
    linux c语言定时器
    平衡二叉查找树的一些知识总结
    C++编程练习(17)----“二叉树非递归遍历的实现“
    C++编程练习(16)----“排序算法 之 快速排序“
  • 原文地址:https://www.cnblogs.com/antoniopeng/p/14374692.html
Copyright © 2011-2022 走看看