Docker的安装及使用入门



因测试环境目前都是ubuntu 12.04.2 LTS 的版本,为了方便,采用的是用虚拟机安装12.04.2的桌面版来进行这个docker的安装和使用。



##########################################

要理解 Docker 内部构建,需要理解以下三种部件:

Docker 镜像 - Docker images          #Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。

Docker 容器 - Docker containers     #Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。

Docker 仓库 - Docker registeries     #Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

一句话描述就是:从仓库拉镜像,从镜像实例化容器,容器就是运行的环境。

##########################################


一、Docker的安装


准备工作: 升级Ubuntu的内核版本(内核查看命令uname -r)


Docker 官网上要求Docker需要在64位版本的Ubuntu上安装,并且还要保证 Ubuntu 内核的最小版本不低于 3.10。

1、查看版本内核

$ uname -r       #查看到ubuntu 12.04.2 内核版本是3.5.0-23-generic

2、升级版本内核,我们直接升级到3.13版本

$ sudo apt-get update         #升级包管理器 

$ sudo apt-get dist-upgrade         #执行升级Package命令

$ sudo apt-get install linux-generic-lts-trusty      #升级内核3.13必需和可选的依赖包

3、 重启

$ sudo reboot

4、重新查看内核版本,确认升级成功,

$ uname -r      #查看到内核版本是 3.13.0-106-generic



安装步骤:

1、$ sudo su     #为便于后续操作,直接进入root权限操作

2、$ apt-get install curl          # 安装curl (如果已有可以跳过这步,干净系统是没有的)

3、$ curl -fsSL https://get.docker.com/ | sh        # 安装docker,安装完会显示Docker版本

4、$ docker version     # 查看 docker的版本

5、$ usermod -aG docker root      # 将当前用户root添加到docker的用户组,也可以把自己的账户名(例如usermod -aG docker tommy )添加到docker用户组

6、$ reboot    # 重启系统,docker安装完成


二、docker常用的命令及使用方式


1、查找镜像

$ docker search ubuntu:12.04    #搜索registry中的镜像

2、下载镜像

$ docker pull ubuntu:12.04    #该命令相当于docker pull registry.hub.  docker.com/ubuntu:12.04 命令,即从注册服务器registry.hub.  docker.com中的ubuntu仓库下载标记为12.04的镜像

2.1(指定仓库下载:docker pull dl.dockerpool.com:5000/ubuntu:12.04 )

3、查看本地镜像

$ docker images

4、启动容器并进入bash (执行命令之后,这个时候当前窗口就是在容器里了)

docker run -it ubuntu:12.04 /bin/bash   #ubuntu:12.04=> name:tag   ,   ( -t 让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开)

5、查看运行中的容器(需要另开终端执行下面这些命令)docker ps -l 查看最近一个容器,docker ps -a 查看所有容器

docker ps

6、查看容器的详细信息

$ docker inspect <CONTAINER ID>    (容器id,一般取前几位就可以了)

7、移除容器 ( 删除所有容器: docker rm $(docker ps -a -q) 

$ docker rm <CONTAINER ID>

8、移除镜像  (移除所有镜像: docker rmi $(docker ps -a -q) 

$ docker rmi <IMAGE ID> (移除镜像前需要移除依赖于这个镜像的所有容器)

9、docker的启动和停止

$ docker start / stop

10、容器重命名

$ docker rename ubuntu:12.04  test_rename

11、使用attach进入已启动的容器(但是要注意,attach到容器上的所有窗口的输入输出会同步)

$ docker attach <CONTAINER ID>


三、持久化容器与镜像(容器与镜像制作)


1、 通过容器生成新的镜像

运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。不过,你使用docker commit 命令可以把一个正在运行的容器变成一个新的镜像。

docker commit <CONTAINER ID>  [repo:tag] # 将一个container固化为一个新的image,后面的repo:tag可选。

{    例子:

$ apt-get update

$ apt-get install -y git ack-grep vim curl wget tmux build-essential python-software-properties     #先在容器47963c22d8e0安装一些东西,然后退出容器,或者另开一个终端执行下面的命令把容器生成新的镜像

$ apt-get install python-setuptools   #顺带装一下

$ easy_install pip   #顺带装一下

docker commit 47963c22d8e0 tommy/ubuntu:12.04      #生成新的镜像tommy/ubuntu:12.04
这样就生成了一个新的image }

2、导出容器 (Export命令用于持久化容器)


$ docker export <CONTAINER ID>   >   /tmp/export.tar 

3、 保存镜像(Save命令用于持久化镜像)


docker save <IMAGE ID> > /tmp/save.tar

4、导入容器  (import命令用于导入容器)

docker rm <CONTAINER ID>     #例子:先删除container 2161509ff65e

cat /tmp/export.tar | docker import - export:latest      #导入export.tar文件

5、导入镜像   (load 命令用于导入镜像)


$ docker rmi <IMAGE ID>      #删除image daa11948e23d,$ docker rmi daa11948e23d

docker load < /tmp/save.tar     #导入save.tar文件

docker tag <IMAGE ID>  load:tag    #对image打tag

6、 export-import与save-load的区别


导出后再导入(export-import)的镜像会丢失所有的历史,而保存后再加载(save-load)的镜像没有丢失历史和层(layer)。这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回滚。(可以执行docker tag 来回滚之前的层)。



7、访问容器中的服务

7.1  启动一个容器 , 并在容器中启动一个简易web服务

$   python -m SimpleHTTPServer       #容器里,启动一个简易web服务,默认端口8000

7.2  获取容器IP

$  docker inspect <CONTAINER ID> | grep IPAddress     #这个命令在宿主机执行,得到一个"IPAdress":"172.17.0.2",这个就是宿主机要访问的容器的ip 

7.3  在宿主机IE浏览器访问 http://172.17.0.2:8000  即可访问到容器中启动的服务





8、 一些其他命令

docker logs <CONTAINER ID> #查看docker实例运行日志,确保正常运行

docker inspect <CONTAINER ID> #docker inspect <image|container> 查看imagecontainer的底层信息

docker build <path> 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image

docker build -t repo[:tag] 同上,可以指定repo和可选的tag

docker build - < <dockerfile> 使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image

docker port <container> <container port> 查看本地哪个端口映射到container的指定端口,其实用docker ps 也可以看到



四、一些使用技巧


docker文件存放目录 => Docker实际上把所有东西都放到/var/lib/docker路径下了


五、一张图总结docker 常用命令