Docker 简介

1 简介

官方网址

1.1 虚拟机 VS Docker

相比较虚拟机,Docker 需要更少的系统资源, 比较适用于大批量的重复构建实例。

虚拟机架构

Docker 架构

2 Image

举个可能不太恰当的例子, Docker Image 有点类似 VM 里面说的Image。 Image 的文件形式是 tarball, 可以被Docker Load 起来并且运行。

2.1) Docker Hub

Docker Hub

探索官方 Image 仓库

有很多软件供应商,提供官方的Docker Image 下载, 他们都可以在Docker Hub里面找到。 作为开发者, 可以直接从这些官方的Image上进行后续的开发。这些仓库有个很好的功能, 他们列出了软件/系统的主要版本,开发者可以方便的找到自己需要的版本。

Ubuntu 官方Image

MySQL 官方Image

Tomcat 官方Image

2.2) 私有Image, 私有Image 仓库

除了官方Image,在实际使用的时候, 其实更多的是使用私有Image。 私有Image需要自己构建。Docker Image 是一种层级的结构, 上一层的Image 可以从下一层构建。 作为开发者, 私有Image一般是本地机器上的。

2.2.1) 列出本地 Image

$ sudo docker images
REPOSITORY       TAG      IMAGE ID      CREATED      VIRTUAL SIZE
ubuntu           12.04    74fe38d11401  4 weeks ago  209.6 MB
ubuntu           precise  74fe38d11401  4 weeks ago  209.6 MB
ubuntu           14.04    99ec81b80c55  4 weeks ago  266 MB
ubuntu           latest   99ec81b80c55  4 weeks ago  266 MB
ubuntu           trusty   99ec81b80c55  4 weeks ago  266 MB
...

2.2.2) 利用Docker File 构建 Image

Docker File

一个简单的Docker File 例子

# This is a comment
FROM ubuntu:14.04

MAINTAINER Docker Newbee <newbee@docker.com>
RUN apt-get -y update
RUN apt-get -y install ruby ruby-dev
RUN gem install sinatra

# put my local web site in myApp folder to /var/www
ADD myApp /var/www

# expose httpd port
EXPOSE 80

# the command to run
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

参考1: Docker File指令

参考2: Best practices for writing Dockerfiles

2.2.3) Docker Build

利用 Docker build , 累构建Image, docker build 会自动从本地目录下,搜索Dockerfile。

docker build -t example.docker.image

另外还可以使用 docker commit 命令, 来把当前对docker 做的改动保存起来。

sudo docker commit 4a9045xxxxxx    jamturxx/apache2

Docker build output

$ sudo docker build -t="ouruser/sinatra:v2" .
Uploading context  2.56 kB
Uploading context
Step 0 : FROM ubuntu:14.04
 ---> 99ec81b80c55
Step 1 : MAINTAINER Kate Smith <ksmith@example.com>
 ---> Running in 7c5664a8a0c1
 ---> 2fa8ca4e2a13
Removing intermediate container 7c5664a8a0c1
Step 2 : RUN apt-get -qq update
 ---> Running in b07cc3fb4256
 ---> 50d21070ec0c
Removing intermediate container b07cc3fb4256
Step 3 : RUN apt-get -qqy install ruby ruby-dev
 ---> Running in a5b038dd127e
Selecting previously unselected package libasan0:amd64.
(Reading database ... 11518 files and directories currently installed.)
Preparing to unpack .../libasan0_4.8.2-19ubuntu1_amd64.deb ...
Setting up ruby (1:1.9.3.4) ...
Setting up ruby1.9.1 (1.9.3.484-2ubuntu1) ...
Processing triggers for libc-bin (2.19-0ubuntu6) ...
 ---> 2acb20f17878
Removing intermediate container a5b038dd127e
Step 4 : RUN gem install sinatra
 ---> Running in 5e9d0065c1f7
. . .
Successfully installed rack-protection-1.5.3
Successfully installed sinatra-1.4.5
4 gems installed
 ---> 324104cde6ad
Removing intermediate container 5e9d0065c1f7
Successfully built 324104cde6ad

Build Catching

再次build docker image, docker 会检查每一步build 完成以后的签名, 如果没有发生变化, 则不会重新build 该步骤, 直接使用 cache。 如果不希望使用catch 可以使用 –no-cache 参数,强制重新构建。

Step 1 : FROM ubuntu:12.04
 ---> eb965dfb09d2
Step 2 : MAINTAINER Pavan Gupta <pavan.gupta@gmail.com>
 ---> Using cache
 ---> 4354ccf9dcd8
Step 3 : RUN apt-get update
 ---> Using cache
 ---> bcbca2fcf204
Step 4 : RUN apt-get install -y openjdk-7-jdk
 ---> Using cache
 ---> 103f1a261d44

利用 docker commit 来build image
一般不建议利用 docker commit 来构建 image, 因为没有Docker file 作为一个文档, 可重复性比较差。 但是, commit 有一个优点, 由于当前运行的image 是用docker run 启动的, 而docker run 的功能比 docker build 多很多, 所以有些功能只有在run 的时候才能开启, 尤其是网络功能。

例如:

Docker apt-get update fails

2.2.4) Run Image

$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'
Hello world

以Daemon 的方式运行 Docker, “-d”
自动端口映射 “-P”

$ sudo docker run -d -P -t example.docker.image

制定端口映射 “-p”

docker run -d -p 80:80 my_image

Docker run reference

2.2.5) Container

在看文档的时候, 会遇到Container 的概念。 一般可以把它理解成运行起来以后的 Image实例。

2.2.6) 其他Docker Command Line 命令

一些常用命令

  • ps 查看运行中的Container
  • stop 停止运行中的Container
  • exec 运行一个Container 内部程序
    常用 “docker exec -it CONTAINER_ID bash” 来启动一个bash,
    登录运行中的docker 内部
  • inspect 查看Container 的详细信息
  • save 把本地仓库中的Docker Image 导出成 tarball 文件
  • load 把一个tarball 文件load 到本地仓库中去

Use the Docker command Line

参考文档

1. Containers vs. virtual machines: How to tell which is the right choice for your enterprise

2. 《Docker —— 從入門到實踐­》正體中文版

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值