一、简介

Docker是一个由GO语言写的程序运行的“容器”,简单理解就是一个轻量级的虚拟化技术。Docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于资源要求过高而无法解决的问题。Docker能处理的事情包括:

Ø 隔离应用依赖

Ø 创建应用镜像并进行复制

Ø 创建容易分发的即启即用的应用

Ø 允许实例简单、快速地扩展

Ø 测试应用并随后销毁它们

 

二、术语

镜像:Docker的镜像类似虚拟机的快照,但是更轻量。镜像拥有唯一ID,以及一个名字和标签对,它可以命名为ubuntu:latestubuntu:precisedjango:1.6django:1.7等等。

 

容器:用户可以在镜像中创建容器,这等同于从快照中恢复出一个虚拟机,不过更轻量,应用是由容器运行的。容器与虚拟机一样,是互相隔离的。它们也拥有唯一的ID和名字。

 

三、安装

1、在CentOS中安装:

1)环境限制

以下版本的CentOS 支持 Docker

CentOS 7 (64-bit)

CentOS 6.5 (64-bit) or later

请注意,由于 Docker 的局限性,Docker 只能运行在64位的系统中。

内核支持:

Docker仅支持CentOS发行版本的内核,并且需要内核版本高于或等于2.6.32-431。

2)安装过程

CentOS-6 中,一个系统自带的可执行的应用程序与 docker 包名字发生冲突,所以我们重新命名 docker RPM包名字为 docker-io

CentOS-6 中 安装 docker-io 之前需要先卸载 docker 包。

$ sudo yum -y remove docker

下一步,安装 docker-io 包来为我们的主机安装 Docker

$ sudo yum install docker-io

 

2、在Ubuntu中安装

1)环境限制

Docker 支持以下的 Ubuntu 版本

Ubuntu Trusty 14.04 (LTS) (64-bit)

Ubuntu Precise 12.04 (LTS) (64-bit)

Ubuntu Raring 13.04 and Saucy 13.10 (64 bit)

内核支持:

内核版本不低于3.10

2)安装过程

获取最新版本的Docker安装包

$ sudo wget -qO- https://get.docker.com/ | sh

系统会提示你输入sudo密码,输入完成之后,就会下载脚本并且安装Docker及依赖包。


安装成功后需要启动服务:

$ sudo systemctl enable docker

$ sudo systemctl start docker

$ sudo systemctl daemon-reload
       $ sudo service docker restart

$ sudo docker info

 

四、实测

1、获取镜像

       先在官方仓库中查找一个镜像,比如查找名为ubuntu的镜像:

       $ sudo docker search ubuntu

可以使用docker pull命令来从仓库获取所需要的镜像。例如,获取一个Ubuntu 12.04的镜像:

$ sudo docker pull ubuntu:12.04

该命令实际上相当于:

$ sudo docker pull registry.hub.docker.com/ubuntu:12.04

即从注册服务器registry.hub.docker.com中的ubuntu仓库来下载标记为12.04的镜像。有时候官方仓库注册服务器下载较慢,可以从其他仓库下载。

 

2、本地镜像管理

查看本地所有镜像:

$ docker images

删除指定的镜像:

$ docker rmi <REPOSITORY>

删除所有镜像:

$ docker rmi $(docker images | grep none | awk '{print $3}' | sort -r)

 

3、创建容器

创建一个容器是需要基于之前已经pull到本地的镜像的,所需要的命令为docker run,例如启动一个Ubuntu 12.04的容器:

$ sudo docker run -tdi --name test ubuntu:12.04

其中参数-t为开启一个交互终端进程,-i为绑定输入管道,-d为后台运行容器,--name为容器命名。

命令执行成功后可使用以下命令查看正在运行中的容器:

$ sudo docker ps

记录下容器ID后使用下面的命令进入控制台:

$ sudo docker attach <CONTAINER ID>

退出attach而不停止容器的组合键:Ctrl+P+Q

 

3、容器状态操作

启动容器:

$ sudo docker start <CONTAINER ID>

停止容器:

$ sudo docker stop <CONTAINER ID>

重启容器:

$ sudo docker restart <CONTAINER ID>

 

4、删除容器

查看所有的容器:

$ sudo docker ps -a

删除指定容器:

$ sudo docker rm <CONTAINER ID>

删除所有容器:

$ sudo docker rm $(docker ps -a -q)

 

5、端口映射

在默认情况下,容器可以访问到外部网络,但是外部网络无法主动访问到容器,若有这类需求,可以考虑目标地址转换的方式来实现。

在容器启动时,可使用-p命令来做端口映射:

$ sudo docker run -d -p 0.0.0.0:33301:22 centos6-ssh

但是,此命令的行为实际上是在宿主机的iptables上配置了一个DNAT,使用命令即可查看:

$ sudo iptables -L -t nat

因此,可以通过直接在iptables上配置DNAT的方式来映射端口:

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 172.17.0.1:80

 

6、容器互联

通过link方式创建容器,我们可以使用被link容器的别名进行访问,从而解除应用对IP的依赖。这种方式的缺点是只能解决单机容器间的互联。多机情况下,容器的互联需要其他的方式,比如端口映射。

比如将一个Web容器和一个MySQL容器进行互联,先创建一个MySQL容器:

$ docker run --name mysqlserver -e MYSQL_ROOT_PASSWORD=123 -d mysql

再创建一个Web容器与MySQL容器互联:

$ docker run -tdi --name web --link mysqlserver:db centos

其中--link参数的原型为--link name:alias,name是我们连接容器的名字,aliaslink的别名,在Web容器中,我们通过link命名的别名即可访问到连接的容器:

$ mysql -hdb -uroot -p123

 

7、容器迁移

程序放在docker里面迁移起来很是方便,若是以传统的迁移方式,需要重新部署环境。放在docker里面的话,只是需要将容器备份封装后,迁移到别的服务器就可以了。

如迁移一个ubuntu容器,先将容器commit为镜像:

$ docker commit ubuntu docker_ubuntu:backup

然后将镜像savetar文件:

$ docker save -o docker_ubuntu.tar docker_ubuntu:backup

接着将这个tar文件迁移到其它主机后通过load导入镜像:

$ docker load --input docker_ubuntu.tar

最后启动容器:

$ docker run -tid --name ubuntu docker_ubuntu:backup


8、其它一些常用命令

输出指定容器的详细信息:

$ sudo docker inspect <CONTAINER ID>

在创建容器时设置主机名hostname:

$ sudo docker run -tdi --name test --hostname test_name centos

向docker容器中copy文件:

$ docker cp /www/runoob 容器ID:/www/

从docker容器中copy出文件:

$ docker cp  容器ID:/www /tmp/

 

9、修改docker镜像存储位置

       查看当前镜像存储路径:

        sudo docker info | grep "Docker Root Dir"

       修改方法如下:
       在 Ubuntu/Debian 系统下:
       编辑 /etc/default/docker 文件, 添加-g 参数的设置, 如下:
       DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
       在 Fedora/Centos 系统下:

       编辑 /etc/sysconfig/docker 文件, 添加OPTIONS参数, 如下:
       OPTIONS="--graph=/root/data/docker" 
       重启 Docker 服务, 问题就解决了.


10、修改docker镜像源

        针对Docker客户端版本大于1.10的用户
        可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

        https://cr.console.aliyun.com/?spm=5176.100239.blogcont29941.12.eyc9rO#/accelerator

参考:

Docker中文指南:http://www.widuu.com/docker/index.html

Docker从入门到实践http://udn.yyuap.com/doc/docker_practice/index.html

Docker入门实战:

http://yuedu.baidu.com/ebook/d817967416fc700abb68fca1?fr=aladdin&key=docker%E5%85%A5%E9%97%A8%E5%AE%9E%E6%88%98&f=read

常用docker命令http://blog.csdn.net/wsscy2004/article/details/25878363

docker详细的基础用法:http://www.linuxeye.com/Linux/2019.html