• Docker学习


    Docker 基本知识

    Docker 是什么

    Docker 是一个轻量级的容器技术,类似于虚拟机技术(xen、kvm、vmware、virtualbox)。不过 Docker 是直接运行在当前操作系统 Linux 上的,而不是运行在虚拟机中,但是也实现了虚拟机技术的资源隔离,

    性能自然远远高于虚拟机:

    Docker 支持将软件编译成一个镜像 image,然后在镜像中做好对软件的各种配置,然后就可以发布这个镜像;使用者可以运行这个镜像,而运行中的镜像称为容器 container。容器的启动是非常快的,一般都是以秒为单位(这有点像安装 go 版的系统:系统装好了之后,软件什么的都有了,虽然完全不是一种东西,但是思路却是类似的)。

    目前各大主流云计算平台都支持 Docker 容器技术,包括阿里云、百度云、Cloud Foundry(Spring 的一家公司,目前最成熟也最稳定)、HeroKu、DigitalOcean、OpenShift(JBoss 的)、Apache Stratos、Apache MesOS(批处理平台,支持搭建基于 Docker 的云平台)、Deis(开源 PaaS 平台);连微软也已经在 Win 10、Win Server 2016 以及其云平台 Azure 上支持 Docker,而且对 Docker 寄予厚望。看来 Docker 确有大统云计算的趋势,而且相比前几年,很多确实都已经做到了实现。

    这里的云平台一般指的是 PaaS(Platform as a Service,平台即服务):平台提供了存储、数据库、网络、负载均衡、自动扩展等功能,只需要将你的程序交给云平台即可。程序也可以是用不同的语言开发的,而使用的 Docker 的云平台就是使用 Docker 的资源隔离技术来隔离以上的功能,以及不同程序。

    目前各种软件大部分都有人将其封装成 Docker 镜像,我们只需要下载 Docker 镜像,然后运行即可快速获得已做好配置、可运行的软件 —— 使用 Docker 后,不再需要手动下载、安装、配置软件了。

    另外,需要特别指出的是:Docker 并不是为了开发测试方便而提供的小工具(如果是这样,那也不可能这么火了),而是能真正用于实际生产环境的一种极好的部署方式。

    Docker 的安装

    Docker 是直接运行在 Linux 中的,其运行原理是基于 Linux 的,所以 Docker 只能运行在 Linux 下。不要紧张,这只能说明在真正的生产环境下,基于 Docker 的程序部署只能在 Linux 上,但是在开发测试的时候,不太需要好高的性能,所以 Docker 依然是可以在 Windows、MacOS 下玩的,原理很简单,启动一个 VirtualBox 的虚拟机(现在 Windows 采用的是 Hyper-V),在虚拟机中运行 Docker。

    Linux 下安装:

    CentOS 安装命令:

    sudo yum update
    sudo yum install docker

    Ubuntu 安装:

    sudo apt-get update
    sudo apt-get docker.io

    Windows 下:

    现在 Docker 已支持到 Windows 10,可以只安装 Docker(可以不用 Docker Toolbox 或者 Boot2Docker),然后 Switch to Linux containers 就可以运行 UNIX(linux)命令,当然也支持 Docker 命令:

    演示Switch之后的区别(先是 Windows containers,然后是 Linux containers 的效果):

    Docker 常用命令及参数

    (1)Docker 镜像命令

    1、Docker 镜像检索:

    基于Docker,镜像是可以自己编译的。以前 Docker 的镜像都放在 Docker Hub 上,地址是 https://hub.docker.com/,可以在这里检索 Docker 的镜像。不过:

    现在这些东西,都可以在 Docker Store 找,地址是 https://store.docker.com/ 。

    除了上述方式,还可以用命令检索:

    docker search 镜像名

    如docker search redis:

    2、镜像下载:

    docker pull 检索的镜像名:tag       (一般使用stars数最高的;不加版本号tag,则默认下载最新的)

    3、列出本地已下载的镜像 —— 镜像列表:

    docker images

    如下,REPOSITORY 是镜像名,TAG 是版本(latest 最新版),IMAGE ID 是镜像的唯一标识,CREATED 是镜像已创建时间,SIZE 是镜像大小:

    4、删除镜像(已停止镜像):

    docker rmi IMAGE-ID / REPOSITORY
    

    (2)Docker 容器命令

    1、新建并运行容器:

    docker run --name container-name -d image-name    //创建运行名为container-name的容器,-d参数表示detached,即容器的创建在后台执行,不影响当前命令行(无需等待);命令返回容器的ID

    2、容器列表:

    docker ps    //查看正在运行中的容器
    docker ps -a    //查看所有容器

    CONTAINER ID 是创建时返回的ID,IMAGE 是该容器使用的镜像,COMMAND 是容器启动时调用的命令,CREATED 是容器已创建时间,STATUS 是容器当前状态,PORTS 是容器运行时所使用的端口号(redis 默认使用 6379 端口),NAMES 是创建容器时定义的名称。

    3、启动容器:

    docker start container-name / container-id

    4、停止容器:

    docker stop container-name / container-id

    5、端口映射:

    容器其实也是一个功能完备的 Linux 操作系统,而 Docker 所在机器(本机)以及其局域网,是不能访问容器中软件所使用的端口的,因此需要将容器中的端口映射到本机的端口上,这样本机才能访问该软件。Docker 的端口映射是通过一个 -p 参数实现的。如下,以 Redis 为例,Redis 的默认端口是 6379,将容器的 6379 端口映射到本机的 6378 端口:

    docker run -d -p 8378:6379 --name port-redis redis

    结果如下:

    而 Windows 下的 Docker 实际上是运行在 Hyper-V 虚拟机中的,即刚才映射的本机是 Windows 下的 Hyper-V 虚拟机,为此需要将 Hyper-V 的虚拟端口再映射到真实机器,使得程序可以访问(当然如果是 Linux 部署 Docker,比如在生产环境 Docker 必然是运行在 Linux 上,那么此时则不会存在这种问题)。

    6、删除容器:

    docker rm container-id    //可以接受多个 id 参数

    7、容器日志:

    docker logs container-name / container-id

    下面的演示将使用 Oracle XE 作为数据库,Redis 作为缓存和 NoSQL 数据库的演示,MongoDB 也是 NoSQL,ActiveMQ、RabbitMQ 和带有管理界面的 RabbitMQ 进行异步消息演示。所以事先下载,以备后用:

    docker pull wnameless/oracle-xe-11g
    docker pull redis
    docker pull mongo
    docker pull cloudesire/activemq
    dcoker pull rabbitmq
    docker pull rabbit:3-management

    下载完毕之后,查看镜像列表:

  • 相关阅读:
    c#设计模式(1)——单例模式
    Javascript变量
    悲观锁和乐观锁
    NestJs 环境 配置
    分布式查询
    Git hub 忽略 文件 、文件夹
    ES6 基础 二
    ES6 基础 一
    invalid credential, access_token is invalid or not latest hint(微信 上传图片返回 error)
    nodejs 入门一(环境及插件)
  • 原文地址:https://www.cnblogs.com/quanxi/p/7170269.html
Copyright © 2020-2023  润新知