Docker新手入门:基本用法

Docker新手入门:基本用法


1.Docker简介

1.1 第一本Docker书

工作中不断碰到Docker,今天终于算是正式开始学习了。在挑选系统学习Docker以及虚拟化技术的书籍时还碰到了不少麻烦,主要就是没有特别经典的书!Docker的《第一版Docker书》和《Docker技术入门与实战》普遍评价不高,而《Docker开发实践》和《Dockeru源码分析》又是2015年最近才出的,评价不是很多。综合看了下,最终还是选择了《Docker开发实践》,以下都主要以这本书作为学习资料。

1.2 Docker是什么?

《Docker开发实践》中讲了个故事:20世纪60年代以前的海运,货物都放置在一起,很容易挤压受损。同时,不同的运输方式之间的转运也很麻烦,例如从码头和火车汽车转运卸货时。不同货物和不同交通工具之间的组合是一个巨大的二维矩阵。海运界最后达成了一致,制定了国际标准集装箱来解决这个棘手的问题。所有货物都打包进集装箱互相隔离,所有交通工具都通过集装箱转运,极大地提供了运输的安全性和效率。

在软件开发中我们也经常碰到同样的问题,使用了各种各样技术框架的应用程序,从前端静态网站到后端数据库,从PHP到Java,以及多种多样的部署环境,从测试服务器到线上环境,从虚拟机到公有云等等。Docker,正是这个集装箱,而Docker的logo也的确是个集装箱。

1.3 Docker与容器和虚拟机

很自然地我们会问,Docker跟虚拟机有什么区别啊?这个问题可以拆成两部分。因为Docker并不是什么完全独创的技术,而是属于很早便有了的容器技术,所以第一个问题就是容器与虚拟机的区别?同属于容器技术,Docker的兄弟姐妹还有Solaris Zones、BSD jails、LXC等。但Docker现在这么火,自然有它的独到之处,所以第二个问题就是Docker与其他容器的区别?

关于第一个问题比较简单,容器是一种轻量级的虚拟技术。它不像虚拟机那样具有一套完整的CPU、内存和磁盘,对操作系统有绝对的权限。容器和宿主主机共享内核,所有容器共享操作系统,在一台物理机上可以运行成百上千的容器。第二个问题稍麻烦一些,与LXC相比,Docker对配置进行了抽象,使应用在任何平台上的运行环境都一致。同时提供了版本控制、镜像托管等类似Git的现代化设施和生态圈。

总体来看,Docker的应用场景有:

  • 加速本地开发:快速搭建好开发环境和运行环境。
  • 自动打包和部署应用。
  • 创建轻量级的私有Paas环境。
  • 自动化测试和持续集成。
  • 创建安全沙盒。

2.Docker安装与32位问题

2.1 安装Docker

Docker对Linux环境有两个要求,一是64位系统,二是内核在3.8以上。而我使用的是Linux Mint 17的32位版,所以下载了源码包准备编译安装。正愁找不到编译安装的资料时,发现Ubuntu软件库提供了已经编译好的Docker 32位版,真是太好了!再看一下我的内核版本是3.13,也符合要求,于是直接用apt安装。

cdai@dell ~ $ uname -a
Linux dell 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:30:01 UTC 2014 i686 i686 i686 GNU/Linux

cdai@dell ~ $ apt-cache search docker
docker.io - Linux container runtime
kdocker - lets you dock any application into the system tray
vim-syntax-docker - Docker container engine - Vim highlighting syntax files

cdai@dell ~ $ sudo apt-get install docker.io
cdai@dell ~ $ docker -v
Docker version 1.0.1, build 990021a

2.2 32位版镜像

尽管Docker能用了,但是官方Docker Hub中的镜像都是为64位系统准备的,下载这些镜像后创建启动容器时会报”finalize namespace drop capabilities operation not permitted”的错误。所以我们可以用官方提供的Dockerfile构建出32位版本的镜像,才能在32位系统上使用。(镜像构建的具体讲解请参见第3.4节)

以构建32位版的Ubuntu为例,执行官方GitHub上提供的Shell脚本即可。经过漫长的等待后,就能看到32位的Ubuntu镜像已经成功安装到我们本地了,官方的脚本果然还是挺靠谱的。

cdai ~ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
32bit/ubuntu        14.04               c062cc00654e        About a minute ago   295.3 MB

注意:这里为了在我的老本子上学习研究Docker而做了workaround,真正应用时当然还是一定要在64位机器上使用Docker的。


3.入门实战

3.1 核心概念

在开始使用Docker之前,首先要了解Docker中的概念和它们之间的关系,否则直接上手可能会搞得一头雾水。Docker中最重要的三个概念就是:镜像、容器、库。

  • 镜像:是一个包含了应用程序和其运行时依赖环境的只读文件。
  • 容器:它是构建容器的模板,通过一个镜像我们可以构造出很多相互独立但运行环境一样的容器。
  • :Docker提供了Hub来保存公有或私有的镜像,也允许第三方搭建。

下面就是典型的Docker工作流,从这张图中能清晰地理解这三个重要概念之间的关系。本节接下来就根据这个Workflow逐一介绍常用的操作。

docker-workflow

3.2 搜索下载镜像

首先用docker search [keyword]命令查看Docker Hub上都有哪些镜像可以下载,search后可以用通配符表示关键字:

cdai ~ $ docker search ubuntu
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                         Ubuntu is a Debian-based Linux operating s...   2179      [OK]       
ubuntu-upstart                 Upstart is an event-based replacement for ...   31        [OK]       
torusware/speedus-ubuntu       Always updated official Ubuntu docker imag...   25                   [OK]
tleyden5iwx/ubuntu-cuda        Ubuntu 14.04 with CUDA drivers pre-installed    17                   [OK]
ubuntu-debootstrap             debootstrap --variant=minbase --components...   12        [OK]       
neurodebian                    NeuroDebian provides neuroscience research...   11        [OK]       
    ...

接下来用docker pull [repository/url:tag]命令下载镜像。因为从官方Docker Hub下载非常慢,所以这里从国内的镜像站http://dockerpool.com/下载,速度非常快。(注:后面会讲到用docker run命令创建容器,其实如果镜像不存在Docker会自动去下载,这里为了学习pull

  • 12
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值