Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法。更多的玩法还有大规模 web 应用、数据库部署、持续部署、集群、测试环境、面向服务的云计算、虚拟桌面 VDI 等等。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker 的基础是 Linux 容器(LXC)等技术。
主观的印象:Docker 使用 Go 语言编写,用 cgroup 实现资源隔离,容器技术采用 LXC. 提供了能够独立运行Unix进程的轻量级虚拟化解决方案。它提供了一种在安全、可重复的环境中自动部署软件的方式。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
有关docker 的一些基本知识(例如:docker中的镜像、容器、仓库等的概念及区别)在此就不一一列举。本文中只为大家列出有关docker的一些操作等,完全手动,本文是基于Docker搭建一个编译android 的环境。
本文所有环境,基于ubuntu14.04 LTS 上运行,注意是64位系统。
Ubuntu 14.04 版本系统中已经自带了 Docker 包,可以直接安装。
sudo apt-get update sudo apt-get install -y docker.io sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
如果使用操作系统自带包安装 Docker,目前安装的版本是比较旧的 0.9.1。 要安装更新的版本,可以通过使用 Docker 源的方式,本文中使用的是系统自带的,没有更新版本。
要安装最新的 Docker 版本,首先需要安装 apt-transport-https 支持,之后通过添加源来安装。
$ sudo apt-get install apt-transport-https $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 $ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" $ sudo apt-get update $ sudo apt-get install lxc-docker
可以使用 docker pull
命令来从仓库获取所需要的镜像。
下面的例子将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像。
$ sudo docker pull ubuntu:12.04 Pulling repository ubuntu ab8e2728644c: Pulling dependent layers 511136ea3c5a: Download complete 5f0ffaa9455e: Download complete a300658979be: Download complete 904483ae0c30: Download complete ffdaafd1ca50: Download complete d047ae21eeaf: Download complete
下载过程中,会输出获取镜像的每一层信息。
该命令实际上相当于:
$ sudo docker pull registry.hub.docker.com/ubuntu:12.04
命令
即从注册服务器registry.hub.docker.com
中的ubuntu
仓库来下载标记为12.04
的镜像。
此外还有一些其他的网站提供下载,本文中所用的是从 http://openvz.org/Download/templates/precreated 此网站中下载的,里面提供的有各个系统的文件。下载后 通过命令生成docker image,命令如下:
cat filename | docker import - commit //filename是你下载的文件名,commit是你docker镜像名
例如:cat filename | docker import - ubuntu:14.04
制作完成后可通过
sudo docker images 查看相关的信息
在此也可用docker images查看,无须sudo ,不过要适当的做一些以下操作(这些设置依据你个人的喜好,如果你已习惯了sudo的话就直接跳过吧~~):
创建一个名为docker
组,然后将用户加入这个组内。当docker守护进程启动时,它会把Unix的读写权限赋予docker组。这样,当你作为docker组内用户使用docker客户端时,你就无须使用sudo
了,相关命令如下:
# Add the docker group if it doesn't already exist. sudo groupadd docker # Add the connected user "${USER}" to the docker group. # Change the user name to match your preferred user. # You may have to logout and log back in again for # this to take effect. sudo gpasswd -a ${USER} docker # Restart the docker daemon. sudo service docker restart
之后就可以直接用docker images了, 如果还是不行就注销后再登录就OK了~
docker容器制作完成后就可以启动了,启动命令如下:
docker run -it ubuntu:14.04 /bin/bash // -i -t 两个参数是显示输入输出的信息的
你也可以用以下命令把host宿主机中的文件挂在到其中:
docker run -it -v /home:/media ubuntu:14.04 /bin/bash // 前者/home是host宿主机中的目录 后者/media是docker容器中你要挂在的地方
进去之后你会发现你所拥有的权限是超级用户,此时不能使用shell脚本配置编译环境。本文中添加一个用户不仅仅是因为这个原因,还有一个重要的原因就是超级用户拥有这至高的权限,如果无意间对一些系统文件进行了误操作,将导致很严重的后果,所以:
adduser build //添加一个build用户
此时切换到build用户时执行sudo apt-get update时会提示 “ build is not in the sudoers file. This incident will be reported.”
再切换到超级用户 (执行exit命令或者ctrl+d即可 ),转换到/etc下执行:
cd /etc ; visudo
在文件中找到
root ALL=(ALL:ALL) ALL 这样一行 在其下添加如下:
build ALL=(ALL:ALL) ALL //build为你所建的用户名
保存退出即可,这样切换到用户是就可以进行相关的操作了。
在sudo apt-get install update以及sudo apt-get install upgrade的时候如果出现Sub-process /usr/bin/dpkg returned an error code (1)的错误,相关的解决办法在http://blog.csdn.net/xiaobaiing/article/details/45717211 点击此链接即可查看~~
配置好环境后可以通过以下命令保存:
sudo docker commit ******** ubuntuv1:14.04 //把正在运行的保存成镜像文件,备份
//********是你目前想要保存的容器ID,可以通过sudo docker ps -a 查看 ubuntuv1:14.04是你保存后的镜像名
sudo docker save -o ubuntuv2:14.04.tar ******** //将目前的镜像压缩成文件的形式,供其他人拷贝使用或备份
//ubuntuv2:14.04.tar 是你压缩后的文件名 ,******** 是你需要保存的镜像的ID ,在此也可使用镜像名(通过docker images查看)
移除操作
sudo docker stop container_ID ; sudo docker rm container_ID //此命令是移除正在执行中的容器 container_ID可通过docker ps -a 查看
前者命令是单个移除操作,如果想一次移除多个可用以下命令:
sudo docker stop $(docker ps -a -q) ; sudo docker rm $(docker ps -a -q)
如果想移除镜像文件,可使用以下命令(前提是要移除的镜像文件不在执行队列中,可通过docker ps -a 查看,如果在其中请先执行以上的移除容器的操作):
sudo docker rmi Images_ID // Images_ID 可通过docker images 查看
如果要彻底删除镜像文件的话,直接rm ****.tar就OK了!
更多相关的操作,后续会为大家更新,请大家继续关注~~~