一 基本原理


Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。Docker是用go语言编写的。




wKioL1V6QnDRG8rhAAKCvs4sXIE904.jpg


Docker与传统的虚拟化技术如KVM或Xen最重要的区别在于,Docker没有Gutest OS的概念,而是使用Docker Engine来加载应用,这样就可以节省很多的系统资源同时便于管理。

Docker最重要的两个概念是镜像(p_w_picpath)和容器(container),有点类似虚拟机的快照,可以通过镜像来复制多个应用。每个镜像有一个唯一的ID和可阅读的名字来标识。

可以从镜像中创建容器,类似于根据虚拟机的快照来创建新的虚拟机。Docker的镜像和容器比快照和虚拟机更轻量,启动和管理更方便,因为不会涉及到Guest OS的管理和启动。




d817967416fc700abb68fca1?m=53edf76e3be44




d817967416fc700abb68fca1?m=53edf76e3be44



Docker开发人员推荐使用一个容器一个进程的方式来运行容器。

Docker的设计目的是用来运行一个应用,而不是一个虚拟机,Docker提供了用于分离应用和数据的工具,这样可以快速更新容器中的代码而不会影响数据。 Docker的数据卷可以使我们在不影响数据的情况下对容器进行修改,删除,销毁,重建等操作。

Docker的容器是短暂的和一次性的。




链接是Docker另一个重要的概念。容器启动时,默认分配一个私有IP地址,其他容器可以使用这个IP和当前这个容器通信,这些容器组成一个局域网。可以采用技术手段限制容器间通信。


d817967416fc700abb68fca1?m=53edf76e3be44



Docker使用cgroups来限制容器间隔离。union文件系统用于保存镜像并使容器变得短暂。


d817967416fc700abb68fca1?m=53edf76e3be44



二 安装使用

Docker目前支持CentOS 6.5和CentOS 7.需要内核版本是2.6.32-431以上。

本文使用CentOS 6.5

CentOS 6.5上面有一个软件与docker名字冲突,需要先卸载掉

yum -y remove docker

yum -y install docker-io


启动docker后台服务

service docker start


设置开机启动

chkconfig docker on


从官网拉取最新的centos镜像

docker pull centos


列出镜像

docker p_w_picpaths centos


测试p_w_picpath

# docker run --rm -it centos /bin/bash
[root@044e4c7983a7 /]# pwd
/
[root@044e4c7983a7 /]# df -
df: '-': No such file or directory
[root@044e4c7983a7 /]# df -h
Filesystem                                                                                          Size  Used Avail Use% Mounted on
/dev/mapper/docker-253:0-34471939-044e4c7983a71762c47cd205cc4f46b2b3a71a3b67c9fe4363bad45a60f2d85b  9.8G  254M  9.0G   3% /
tmpfs                                                                                               7.8G     0  7.8G   0% /dev
shm                                                                                                  64M     0   64M   0% /dev/shm
/dev/mapper/vg_fileserver-lvopt                                                                     910G  108G  757G  13% /etc/hosts
tmpfs                                                                                               7.8G     0  7.8G   0% /proc/kcore



在后台运行一个docker容器

# docker run -d centos ping 8.8.8.8
5ae14dfb1a82887218ef3af5fa0b04d73427e0bc1e65e1b7304a194db03e8a67
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5ae14dfb1a82        centos:7            "ping 8.8.8.8"      54 seconds ago      Up 53 seconds                           elegant_jones


# docker exec -it elegant_jones /bin/bash
[root@5ae14dfb1a82 /]# ps 
  PID TTY          TIME CMD
    7 ?        00:00:00 bash
   23 ?        00:00:00 ps
[root@5ae14dfb1a82 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 05:48 ?        00:00:00 ping 8.8.8.8
root         7     0  0 05:51 ?        00:00:00 /bin/bash
root        24     7  0 05:51 ?        00:00:00 ps -ef
[root@5ae14dfb1a82 /]# exit
exit




d817967416fc700abb68fca1?m=53edf76e3be44



docker info 显示系统信息

# docker info
Containers: 1
Images: 3
Storage Driver: devicemapper
 Pool Name: docker-253:0-34471939-pool
 Pool Blocksize: 65.54 kB
 Backing Filesystem: extfs
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 590.5 MB
 Data Space Total: 107.4 GB
 Metadata Space Used: 1.036 MB
 Metadata Space Total: 2.147 GB
 Udev Sync Supported: true
 Data loop file: /opt/docker/devicemapper/devicemapper/data
 Metadata loop file: /opt/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.89-RHEL6 (2014-09-01)
Execution Driver: native-0.2
Kernel Version: 2.6.32-504.16.2.el6.x86_64
Operating System: <unknown>
CPUs: 2
Total Memory: 15.47 GiB
Name: jidong-fileserver
ID: RWCS:FUZS:VSCU:BTIY:SEI2:WH6F:CP26:STBN:HDRN:R2MN:4YQQ:OL3G



# docker pull busybox
Pulling repository busybox
8c2e06607696: Download complete 
cf2616975b4a: Download complete 
6ce2e90b0bc7: Download complete 
Status: Downloaded newer p_w_picpath for busybox:latest

# docker p_w_picpaths
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              7                   fd44297e2ddb        7 weeks ago         215.7 MB
centos              centos7             fd44297e2ddb        7 weeks ago         215.7 MB
centos              latest              fd44297e2ddb        7 weeks ago         215.7 MB
busybox             buildroot-2014.02   8c2e06607696        7 weeks ago         2.43 MB
busybox             latest              8c2e06607696        7 weeks ago         2.43 MB


运行容器

# docker run busybox /bin/echo Hello Docker
Hello Docker


docker logs获取一个容器的日志信息

 sample_job=$(docker run -d busybox /bin/sh -c "while true;do echo Docker;sleep 1;done")
[root@jidong-fileserver ~]# docker logs $sample_job
Docker
Docker
Docker
Docker
Docker
Docker
Docker


docker stop 向一个运行中的容器发送SIGTERM然后SIGKILL信号来停掉该容器

# docker stop $sample_job
8e7dc708aef53c34ef3134a23b2f935c6456b690b313c27754c34227f802fa2a
[root@jidong-fileserver ~]#


docker restart 重新启动一个容器

# docker restart $sample_job
8e7dc708aef53c34ef3134a23b2f935c6456b690b313c27754c34227f802fa2a



如果要完全移除一个容器,需要先将其停掉然后再移除

# docker stop $sample_job 
8e7dc708aef53c34ef3134a23b2f935c6456b690b313c27754c34227f802fa2a
# docker rm $sample_job 
8e7dc708aef53c34ef3134a23b2f935c6456b690b313c27754c34227f802fa2a


docker commit  保存容器的状态为镜像

# docker commit $sample_job job1
b6c03d06b17091ef20cbd33357be8eb1e3c2364bc57f0a168d7003d647701530


Docker的镜像是存储在Docker Registy中的


docker search 搜索镜像

# docker search redis
NAME                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redis                        Redis is an open source key-value store th...   816       [OK]       
tutum/redis                  Redis Docker p_w_picpath p_w_picpath – listens in po...     27                   [OK]
torusware/speedus-redis      Always updated official Redis docker p_w_picpath...   24                   [OK]
sameersbn/redis                                                              10                   [OK]
orchardup/redis              https://github.com/orchardup/docker-redis       5                    [OK]
clue/redis-benchmark         A minimal docker p_w_picpath to ease running the...   2                    [OK]
webhippie/redis              Docker p_w_picpaths for redis                         1                    [OK]
kampka/redis                 A Redis p_w_picpath build from source on top of ...   1                    [OK]
williamyeh/redis             Redis p_w_picpath for Docker                          1                    [OK]
wasabeef/redis               Install latest redis-server                     1                    [OK]
devdb/redis                  Redis 2.8.19                                    1                    [OK]
nicescale/redis              Redis services in NiceScale Platform, you ...   1                    [OK]
envygeeks/redis              Redis (latest) p_w_picpath.                           0                    [OK]
zchee/redis                  Redis 3.0.0 Testing and Unstable version D...   0                    [OK]
clue/php-redis-server        The php-redis-server is a pure PHP impleme...   0                    [OK]
frodenas/redis               A Docker Image for Redis                        0                    [OK]
thomaswelton/redis                                                           0                    [OK]
neolao/php-5.6.3-fpm-redis   Docker PHP 5.6.3 FPM with phpredis extension    0                    [OK]
smartprocure/redis                                                           0                    [OK]
wodby/redis                                                                  0                    [OK]
hpess/redis                                                                  0                    [OK]
ruo91/redis                  Redis - current stable                          0                    [OK]
bloomboard/redis                                                             0                    [OK]
zokeber/redis                Redis Dockerfile in CentOS 7                    0                    [OK]


dokcer history  查看镜像的历史版本

# docker history 0f3059144681
IMAGE               CREATED             CREATED BY                                      SIZE
0f3059144681        7 days ago          /bin/sh -c #(nop) CMD ["redis-server"]          0 B
de77586468a2        7 days ago          /bin/sh -c #(nop) EXPOSE 6379/tcp               0 B
361283d1af1a        7 days ago          /bin/sh -c #(nop) ENTRYPOINT ["/entrypoint.sh   0 B
05a396cb49e2        7 days ago          /bin/sh -c #(nop) COPY file:c4bbead0efd18835c   109 B
a1811b7b024f        7 days ago          /bin/sh -c #(nop) WORKDIR /data                 0 B
fb83dcd979bd        7 days ago          /bin/sh -c #(nop) VOLUME [/data]                0 B
2c010358721d        7 days ago          /bin/sh -c mkdir /data && chown redis:redis /   0 B
41eb1212d9f4        7 days ago          /bin/sh -c buildDeps='gcc libc6-dev make';      s                   9.382 MB
b5edc072cfec        7 days ago          /bin/sh -c #(nop) ENV REDIS_DOWNLOAD_SHA1=a38   0 B
b508080bc4db        7 days ago          /bin/sh -c #(nop) ENV REDIS_DOWNLOAD_URL=http   0 B
e3c38490a53a        7 days ago          /bin/sh -c #(nop) ENV REDIS_VERSION=3.0.2       0 B
499b313c4d4e        2 weeks ago         /bin/sh -c curl -o /usr/local/bin/gosu -SL "h   2.141 MB
ec7f3a6b5dc6        2 weeks ago         /bin/sh -c gpg --keyserver pool.sks-keyserver   98.87 kB
37f07aacbfe5        2 weeks ago         /bin/sh -c apt-get update                       && apt-get install   14.11 MB
5ba9a5b9710f        2 weeks ago         /bin/sh -c groupadd -r redis && useradd -r -g   328.3 kB
b96d1548a24e        3 weeks ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B
7a3e804ed6c0        3 weeks ago         /bin/sh -c #(nop) ADD file:fa0568bdb510d92bbc   84.95 MB












参考文档:

http://yuedu.baidu.com/ebook/d817967416fc700abb68fca1?fr=aladdin&key=docker&f=read

http://yuedu.baidu.com/ebook/d817967416fc700abb68fca1?fr=aladdin&key=docker&f=read

https://www.docker.com/whatisdocker/

http://baike.baidu.com/link?url=RDe8VK82jaxdiZOJ73fxMcpN3BEnictqa0e38GJoOa7PTtKVt7dHhYS44Zm7TJqAeNfpn7PUXH6cPU79WwTlbK