一、简介
Docker是一个由GO语言写的程序运行的“容器”,简单理解就是一个轻量级的虚拟化技术。Docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于资源要求过高而无法解决的问题。Docker能处理的事情包括:
Ø 隔离应用依赖
Ø 创建应用镜像并进行复制
Ø 创建容易分发的即启即用的应用
Ø 允许实例简单、快速地扩展
Ø 测试应用并随后销毁它们
二、术语
镜像:Docker的镜像类似虚拟机的快照,但是更轻量。镜像拥有唯一ID,以及一个名字和标签对,它可以命名为ubuntu:latest、ubuntu:precise、django:1.6、django: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是我们连接容器的名字,alias是link的别名,在Web容器中,我们通过link命名的别名即可访问到连接的容器:
$ mysql -hdb -uroot -p123
7、容器迁移
程序放在docker里面迁移起来很是方便,若是以传统的迁移方式,需要重新部署环境。放在docker里面的话,只是需要将容器备份封装后,迁移到别的服务器就可以了。
如迁移一个ubuntu容器,先将容器commit为镜像:
$ docker commit ubuntu docker_ubuntu:backup
然后将镜像save为tar文件:
$ 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入门实战:
常用docker命令:http://blog.csdn.net/wsscy2004/article/details/25878363
docker详细的基础用法:http://www.linuxeye.com/Linux/2019.html
1 comment
写的很详细,赞