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

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

 

posted @ 2017-07-14 14:46  不抛弃,不放弃  阅读(314)  评论(0编辑  收藏  举报