一. 概述

1. 背景

        传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让运维团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况Docker的出现使得Docker得以打破过去「程序即应用」的观念。通过镜像(images)将作业系统核心除外,将应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台间的无缝接轨运作。

2. 定义

        Docker是基于Go语言实现的云开源项目。Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

        Docker解决了运行环境和配置问题,容器方便做持续集成并有助于整体发布的容器虛拟化技术。

3. 对比

        比较了 Docker 和传统虚拟化方式的不同之处:

        传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。

        Docker容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

4. 优点

      1. 更快速的应用交付和部署
      2. 更便捷的升级和扩缩容
      3. 更简单的系统运维
      4. 更高效的计算资源利用

5. 组成

        Docker由镜像(image)、容器(container)、仓库(repository)组成。

       镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。

        容器(container)是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

        仓库(Repository)是集中存放镜像文件的场所。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等

二. 安装并配置阿里云镜像加速

1. 前提

        Docker必须部署在Linux内核的系统上。要求系统为64位、Linux系统内核版本为 3.8以上,这里选用Centos7.x,且保证网络健康

        查看内核uname -r, 要求3.8以上

docker使用vfs存储驱动器_ubuntu

2. yum安装gcc相关

        yum -y install gcc

docker使用vfs存储驱动器_容器_02


        yum -y install gcc-c++

docker使用vfs存储驱动器_docker使用vfs存储驱动器_03

3. 安装软件包

        yum install -y yum-utils

docker使用vfs存储驱动器_容器_04

 4. 设置stable镜像仓库

        设置为阿里云

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

docker使用vfs存储驱动器_容器_05

5. 更新yum软件包索引

       yum makecache fast 

docker使用vfs存储驱动器_docker_06

6. 安装DOCKER CE

        yum -y install docker-ce docker-ce-cli containerd.io 

docker使用vfs存储驱动器_docker使用vfs存储驱动器_07

7. 启动docker

         systemctl start docker

docker使用vfs存储驱动器_Docker_08

8. 测试 

        docker run hello-world (这是本地已存在hello-world镜像,第一次执行本地无镜像会去仓库拉取镜像)

docker使用vfs存储驱动器_Docker_09

 以上,安装成功

9. 阿里云镜像加速

注册一个阿里云账户,找到阿里云容器镜像服务,通过自己的加速器地址,按照如下指令配置加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["自己的加速器地址"] } EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

docker使用vfs存储驱动器_docker_10

三. Docker常用指令

1. 帮助启动类命令

    启动docker: systemctl start docker
    停止docker: systemctl stop docker
    重启docker: systemctl restart docker

    查看docker状态: systemctl status docker

    启动时,有绿色字样:active(running)

docker使用vfs存储驱动器_Docker_11

        未启动:inactive(dead)

docker使用vfs存储驱动器_容器_12


    开机启动: systemctl enable docker
    查看docker概要信息: docker info
    查看docker总体帮助文档: docker --help
    查看docker命令帮助文档: docker 具体命令 --help

2. 镜像命令

         docker images                   列出本地主机上的镜像

docker使用vfs存储驱动器_docker_13


       docker search 某个XXX镜像名字     在仓库中查找某个镜像

docker使用vfs存储驱动器_ubuntu_14

 
        docker pull 某个XXX镜像名字[:TAG]                 下载镜像(可指定版本)

docker使用vfs存储驱动器_容器_15

docker使用vfs存储驱动器_Docker_16


    docker system df                 查看镜像/容器/数据卷所占的空间

docker使用vfs存储驱动器_ubuntu_17


    docker rmi 某个XXX镜像名字ID                  删除镜像

docker使用vfs存储驱动器_ubuntu_18


        删除单个:docker rmi  -f 镜像ID
        删除多个:docker rmi -f 镜像名1:TAG 镜像名2:TAG 
        删除全部:docker rmi -f $(docker images -qa)

3. 容器命令

        有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)

        docker pull ubuntu,演示用ubuntu演示

docker使用vfs存储驱动器_docker_19


        docker run [OPTIONS] IMAGE [COMMAND] [ARG...]       新建+启动容器

        OPTIONS:-i:以交互模式运行容器,通常与 -t 同时使用;-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;也即启动交互式容器(前台有伪终端,等待交互);-P: 随机端口映射,大写P;-p: 指定端口映射,小写p;
        docker run -it ubuntu /bin/bash  使用镜像ubuntu:latest以交互模式启动一个容器,在容器内执行/bin/bash命令;可在容器内执行liunx指令,eixt退出

docker使用vfs存储驱动器_Docker_20

docker使用vfs存储驱动器_Docker_21


        docker ps         列出当前所有正在运行的容器

docker使用vfs存储驱动器_ubuntu_22


    退出容器
        两种退出方式
            exit
                run进去容器,exit退出,容器停止
            ctrl+p+q
                run进去容器,ctrl+p+q退出,容器不停止

    启动已停止运行的容器:docker start 容器ID或者容器名
    重启容器:docker restart 容器ID或者容器名
    停止容器:docker stop 容器ID或者容器名
    强制停止容器:docker kill 容器ID或容器名
    删除已停止的容器:docker rm 容器ID
            一次性删除多个容器实例
                docker rm -f $(docker ps -a -q)
                docker ps -a -q | xargs docker rm
    查看容器日志:docker logs 容器ID
    查看容器内运行的进程:docker top 容器ID
    查看容器内部细节:docker inspect 容器ID   

4. 常用指令总结

attach    Attach to a running container                 # 当前 shell 下 attach 连接指定运行镜像
build     Build an image from a Dockerfile              # 通过 Dockerfile 定制镜像
commit    Create a new image from a container changes   # 提交当前容器为新的镜像
cp        Copy files/folders from the containers filesystem to the host path   #从容器中拷贝指定文件或者目录到宿主机中
create    Create a new container                        # 创建一个新的容器,同 run,但不启动容器
diff      Inspect changes on a container's filesystem   # 查看 docker 容器变化
events    Get real time events from the server          # 从 docker 服务获取容器实时事件
exec      Run a command in an existing container        # 在已存在的容器上运行命令
export    Stream the contents of a container as a tar archive   # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history   Show the history of an image                  # 展示一个镜像形成历史
images    List images                                   # 列出系统当前镜像
import    Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info      Display system-wide information               # 显示系统相关信息
inspect   Return low-level information on a container   # 查看容器详细信息
kill      Kill a running container                      # kill 指定 docker 容器
load      Load an image from a tar archive              # 从一个 tar 包中加载一个镜像[对应 save]
login     Register or Login to the docker registry server    # 注册或者登陆一个 docker 源服务器
logout    Log out from a Docker registry server          # 从当前 Docker registry 退出
logs      Fetch the logs of a container                 # 输出当前容器日志信息
port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT    # 查看映射端口对应的容器内部源端口
pause     Pause all processes within a container        # 暂停容器
ps        List containers                               # 列出容器列表
pull      Pull an image or a repository from the docker registry server   # 从docker镜像源服务器拉取指定镜像或者库镜像
push      Push an image or a repository to the docker registry server    # 推送指定镜像或者库镜像至docker源服务器
restart   Restart a running container                   # 重启运行的容器
rm        Remove one or more containers                 # 移除一个或者多个容器
rmi       Remove one or more images       # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run       Run a command in a new container              # 创建一个新的容器并运行一个命令
save      Save an image to a tar archive                # 保存一个镜像为一个 tar 包[对应 load]
search    Search for an image on the Docker Hub         # 在 docker hub 中搜索镜像
start     Start a stopped containers                    # 启动容器
stop      Stop a running containers                     # 停止容器
tag       Tag an image into a repository                # 给源中镜像打标签
top       Lookup the running processes of a container   # 查看容器中运行的进程信息
unpause   Unpause a paused container                    # 取消暂停容器
version   Show the docker version information           # 查看 docker 版本号
wait      Block until a container stops, then print its exit code   # 截取容器停止时的退出状态值