Docker学习笔记

前言

 

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位系统。

安装Docker

通过系统自带包安装

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源安装最新版本

要安装最新的 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了!


更多相关的操作,后续会为大家更新,请大家继续关注~~~

你可能感兴趣的:(linux,程序员,管理,虚拟化)