炫技 (Nov.16) ——奇妙的Docker之旅(上)

0
Want create site? Find Free WordPress Themes and plugins.

Docker这个词,直译过来就是“容器”的意思,为什么我们要了解它?当然不是因为这个东西最近很火,而是它非常实用(而且很“极客”)——尤其对于我们这种草根开发者来说。那么docker到底是什么呢?

我觉得简单来说,Docker就是一个应用程序执行容器,类似虚拟机的概念。但是与虚拟化技术的不同点在于下面几点:

  1. 虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行。
  2. 虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis、一个memcached。
  3. 传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低。
  4. 传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。
  5. Dockerfile可以基于已经构建好的容器镜像,创建新容器。Dockerfile可以通过社区分享和下载,有利于该技术的推广。

docker可以让你“丢弃没有用的99.9%的虚拟机垃圾,剩下一个小巧简洁的胶囊式容器,里面含有你的应用程序”。怎么用说白了,你在docker控制台上新建一个容器,选择你想要的镜像(比如你想要部署nginx),一键部署。然后控制台给你一个IP(或域名),给你一个端口(也可以自定义),然后刷刷地就运行起来并可以访问了。

当然,docker作为一个管理应用程序的程序,你可以把它安装在你自己的服务器上。目前docker可以支持linux和windows的平台。

windows安装docker:https://docs.docker.com/docker-for-windows/

你可以尝试在你的win电脑上安装docker,做个测试~

linux安装docker:

一般的服务器都是linux的。可以说,linux才是最适合docker的运行平台。这里居正就简略地说明一下。

Docker安装

首先,Docker官方声称最好是运行在Linux内核3.8以上,所以要先进行内核升级

# install the backported kernel
sudo apt-get update
sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring

# reboot
sudo reboot

添加Docker仓库的key:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

添加镜像,这里直接用俄罗斯的Yandex

sudo sh -c "echo deb http://mirror.yandex.ru/mirrors/docker/ docker main > /etc/apt/sources.list.d/docker.list"
sudo apt-get update

安装Docker

sudo apt-get install lxc-docker

一般上面的步骤不会有任何问题。

Docker镜像下载

Docker运行至少需要一个ubuntu的基础镜像,这个镜像会在你初次尝试执行时自动下载,不过从国内直接用基本上就别想了,需要使用代理。这里用Docker中文社区提供的代理。出处1,出处2

修改/etc/default/docker文件,取消注释http_proxy的部分:

# If you need Docker to use an HTTP proxy, it can also be specified here.
export http_proxy=http://192.241.209.203:8384/  

经过笔者测试,上面这个代理也不是很稳定,可能用的人比较多吧。

可用的代理地址(持续关注中)

http://192.241.209.203:8384

然后,你就可以执行下面的命令,测试执行了,由于代理不是很稳定,可能需要多尝试几次(淡定):

sudo docker run -i -t ubuntu /bin/bash

如果你有心在你的服务器上使用docker,你可以看看这篇文章:https://segmentfault.com/a/1190000000448808     不过我们今天的重点不是这个~

先来上一张docker的架构图:

咋一看很乱,这里有一张表来一一解释:

Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板。
Docker 容器(Container) 容器是独立运行的一个或一组应用。
Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。
Docker 主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker 仓库(Registry) Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。

Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

那么运行环境我们已经搭建好了。部署一个应用的方式有两种,其一是自己编写dockerfile,从github上clone下来源码然后安装。其二是从仓库把那些公共的镜像pull下来运行。显然如果我们要运行一些常见的应用,比如nginx,都可以用现成的镜像。目前docker hub是大家公认的镜像托管平台——几乎每个docker的提供商都支持部署docker hub上的镜像。

拉取nginx官方镜像:

docker pull nginx

 

部署:

docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d nginx

命令说明:

  • -p 80:80:将容器的80端口映射到主机的80端口
  • –name mynginx:将容器命名为mynginx
  • -v $PWD/www:/www:将主机中当前目录下的www挂载到容器的/www
  • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机中当前目录下的nginx.conf挂载到容器的/etc/nginx/nginx.conf
  • -v $PWD/logs:/wwwlogs:将主机中当前目录下的logs挂载到容器的/wwwlogs

 

为了化繁为简,这里以daocloud的图形化操作为例:

(PS:openshift便是个标准的免费容器实例,不过我们这里还是以中文环境的坑爹daocloud为例,至少淀粉们看起来好一点儿)

在镜像市场搜索nginx

 

点击nginx的官方镜像,部署。

 

配置运行环境(daocloud中1x和2x的容器是免费的,但是端口只支持HTTP协议)

 

然后就可以看到部署中的界面。

 

一盏茶的工夫,就部署完毕了。是不是比在你的VPS上用bash安装nginx快多了?

 

使用daocloud提供的访问地址访问——还不到一分钟,一个nginx应用就呈现在了我们眼前,是不是很神奇呢?

当然,这样部署在本地你还可以用文件管理工具来操作网站内容,而在daocloud上不行——因为这个镜像只是个单纯的nginx,只是个library的用途,根本没有给我们管理控制台。所以,在部署应用的时候,一定要检查此镜像的用途。所以现在我们重新部署个wordpress试试(过程大同小异):

由于wordpress需要mysql,所以我们还得给它添加一个mysql的服务。这里需要特别注明的是,我们刚刚创建的是nginx容器,大家可以把它比作一只碗(容器),但是光有碗没用啊,而wordpress则是碗里面的饭(源代码)。对于这碗饭,你必须用筷子来扒吧~那么mysql就相当于筷子(附属的服务)。

选择基础服务(免费的),创建一个实例。

 

 

一会儿后,各项参数(用户名、密码等等)就已经给出来了。我们把mysql这个服务绑定到刚刚的wordpress上

 

OK,访问daocloud给我们的地址,就进入了熟悉的wordpress安装界面,接下来只要把各种mysql信息填进去就可以安装了。下面的内容不用我多说了吧~

 

好的,奇妙的docker之旅还有下期。下一期我会给大家带来有关openshift这个神奇大docker的各种玩法,以及一些黑科技。我们就下期再见咯~

Did you find apk for android? You can find new Free Android Games and apps.

关于作者

居正

大道至简

发表评论