一 基本原理
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。Docker是用go语言编写的。
Docker与传统的虚拟化技术如KVM或Xen最重要的区别在于,Docker没有Gutest OS的概念,而是使用Docker Engine来加载应用,这样就可以节省很多的系统资源同时便于管理。
Docker最重要的两个概念是镜像(p_w_picpath)和容器(container),有点类似虚拟机的快照,可以通过镜像来复制多个应用。每个镜像有一个唯一的ID和可阅读的名字来标识。
可以从镜像中创建容器,类似于根据虚拟机的快照来创建新的虚拟机。Docker的镜像和容器比快照和虚拟机更轻量,启动和管理更方便,因为不会涉及到Guest OS的管理和启动。
Docker开发人员推荐使用一个容器一个进程的方式来运行容器。
Docker的设计目的是用来运行一个应用,而不是一个虚拟机,Docker提供了用于分离应用和数据的工具,这样可以快速更新容器中的代码而不会影响数据。 Docker的数据卷可以使我们在不影响数据的情况下对容器进行修改,删除,销毁,重建等操作。
Docker的容器是短暂的和一次性的。
链接是Docker另一个重要的概念。容器启动时,默认分配一个私有IP地址,其他容器可以使用这个IP和当前这个容器通信,这些容器组成一个局域网。可以采用技术手段限制容器间通信。
Docker使用cgroups来限制容器间隔离。union文件系统用于保存镜像并使容器变得短暂。
二 安装使用
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
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/
转载于:https://blog.51cto.com/john88wang/1661120