CentOS系统下docker的安装配置及使用介绍

1 docker简介

Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器。它原本是dotCloud 启动的一个业余项目,并在前些时候开源了。它吸引了大量的关注和讨论,导致 dotCloud 把它重命名到 DockerInc。它最初是用 Go 语言编写的,它就相当于是加在 LXC(LinuX Containers,linux容器)上的管道,允许开发者在更高层次的概念上工作。
    Docker 扩展了 Linux 容器(Linux Containers),或着说LXC,通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境。Docker 利用了 LXC, cgroups 和 Linux自己的内核。和传统的虚拟机不同的是,一个 Docker容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。

    Docker类似虚拟机的概念,但是与虚拟化技术的不同点在于下面几点:

1.虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行。

2.虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis、一个memcached。

3.传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低。

4.传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。

5.Dockerfile可以基于已经构建好的容器镜像,创建新容器。Dockerfile可以通过社区分享和下载,有利于该技术的推广。

Docker会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种 Linux服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。

Docker也是一个云计算平台,它利用Linux的LXC、AUFU、Go语言、cgroup实现了资源的独立,可以很轻松的实现文件、资源、网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离。
    Docker 由下面这些组成:
    1. Docker 服务器守护程序(server daemon),用于管理所有的容器。
    2. Docker 命令行客户端,用于控制服务器守护程序。
    3. Docker 镜像:查找和浏览 docker 容器镜像。

2 docker特性

文件系统隔离:每个进程容器运行在完全独立的根文件系统里。
    资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。
    网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。
    写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。
   日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
   变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
   交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

3 两个基础概念images与container

Container和Image在Docker的世界里,Image是指一个只读的层(Layer),这里的层是AUFS里的概念,最直观的方式就是看一下docker官方给出的图:


   Docker使用了一种叫AUFS的文件系统,这种文件系统可以让你一层一层地叠加修改你的文件,最底下的文件系统是只读的,如果需要修改文件,AUFS会增加一个可写的层(Layer),这样有很多好处,例如不同的Container可以共享底层的只读文件系统(同一个Kernel),使得你可以跑N多个Container而不至于你的硬盘被挤爆了!这个只读的层就是Image!而如你所看到的,一个可写的层就是Container。
   那Image和Container的区别是什么?很简单,他们的区别仅仅是一个是只读的层,一个是可写的层,你可以使用dockercommit命令,将你的Container变成一个Image,也就是提交你所运行的Container的修改内容,变成一个新的只读的Image,这非常类似于gitcommit命令。

4 docker安装与启动

    安装docker

[[email protected] /]# yum -y install docker-io

    更改配置文件

[[email protected] /]# vi /etc/sysconfig/docker

other-args列更改为:other_args="--exec-driver=lxc--selinux-enabled"

    启动docker服务

[[email protected] /]# service docker start
Starting cgconfig service:                                 [  OK  ]
Starting docker:                                               [  OK  ]

    将docker加入开机启动
[[email protected] /]# chkconfig docker on

    基本信息查看

    dockerversion:查看docker的版本号,包括客户端、服务端、依赖的Go等

[[email protected] /]# docker version
Client version: 1.0.0
Client API version: 1.12
Go version (client): go1.2.2
Git commit (client): 63fe64c/1.0.0
Server version: 1.0.0
Server API version: 1.12
Go version (server): go1.2.2
Git commit (server): 63fe64c/1.0.0

    docker info:查看系统(docker)层面信息,包括管理的images, containers数等
[[email protected] /]# docker info
Containers: 16
Images: 40
Storage Driver: devicemapper
 Pool Name: docker-253:0-1183580-pool
 Data file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
 Data Space Used: 2180.4 Mb
 Data Space Total: 102400.0 Mb
 Metadata Space Used: 3.4 Mb
 Metadata Space Total: 2048.0 Mb
Execution Driver: lxc-0.9.0
Kernel Version: 2.6.32-431.el6.x86_64

5 镜像的获取与容器的使用

镜像可以看作是包含有某些软件的容器系统,比如ubuntu就是一个官方的基础镜像,很多镜像都是基于这个镜像“衍生”,该镜像包含基本的ubuntu系统。再比如,hipache是一个官方的镜像容器,运行后可以支持http和websocket的代理服务,而这个镜像本身又基于ubuntu。

    搜索镜像
    docker search <image>:在docker index中搜索image

[[email protected] /]# docker search ubuntu12.10
NAME                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mirolin/ubuntu12.10                                                         0
marcgibbons/ubuntu12.10                                                     0
mirolin/ubuntu12.10_redis                                                   0
chug/ubuntu12.10x32         Ubuntu Quantal Quetzal 12.10 32bit  base i...   0
chug/ubuntu12.10x64         Ubuntu Quantal Quetzal 12.10 64bit  base i...   0

    下载镜像

docker pull <image> :从docker registry server中下拉image

[[email protected] /]# docker pull chug/ubuntu12.10x64

    查看镜像

docker images: 列出images

docker images -a :列出所有的images(包含历史)

docker images --tree :显示镜像的所有层(layer)

docker rmi  <image ID>:删除一个或多个image

[[email protected] /]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
chug/ubuntu12.10x64   latest              0b96c14dafcd        4 months ago        270.3 MB
[[email protected] /]# docker images -a
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
chug/ubuntu12.10x64   latest              0b96c14dafcd        4 months ago        270.3 MB
<none>                <none>              31edfed3bb88        4 months ago        175.8 MB
[[email protected] /]# docker images --tree
Warning: '--tree' is deprecated, it will be removed soon. See usage.
└─31edfed3bb88 Virtual Size: 175.8 MB
  └─0b96c14dafcd Virtual Size: 270.3 MB Tags: chug/ubuntu12.10x64:latest
[[email protected] /]# docker rmi <image ID> ....

     使用镜像创建容器

[[email protected] /]# docker run chug/ubuntu12.10x64  /bin/echo hello world
hello world

交互式运行
[[email protected] /]# docker run -i -t chug/ubuntu12.10x64  /bin/bash
[email protected]:/#

    查看容器

docker ps :列出当前所有正在运行的container
    docker ps -l :列出最近一次启动的container
    docker ps -a :列出所有的container(包含历史,即运行过的container)
    docker ps -q :列出最近一次运行的container ID

[[email protected] /]# docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS              PORTS               NAMES
ccf3de663dc9        chug/ubuntu12.10x64:latest   /bin/bash           22 hours ago        Up 22 hours                             sharp_hypatia
[[email protected] /]# docker ps -l
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS                     PORTS               NAMES
f145f184647b        chug/ubuntu12.10x64:latest   /bin/bash           6 seconds ago       Exited (0) 3 seconds ago                       compassionate_galileo
[[email protected] /]# docker ps -a
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS                        PORTS               NAMES
f145f184647b        chug/ubuntu12.10x64:latest   /bin/bash           30 seconds ago      Exited (0) 26 seconds ago                         compassionate_galileo
f4624b42fe7e        chug/ubuntu12.10x64:latest   /bin/bash           2 minutes ago       Exited (0) 2 minutes ago                          sharp_wilson
ccf3de663dc9        chug/ubuntu12.10x64:latest   /bin/bash           22 hours ago        Up 22 hours                                       sharp_hypatia
9cbaa79b9703        chug/ubuntu12.10x64:latest   /bin/bash           22 hours ago        Exited (127) 36 minutes ago                       berserk_mcclintock
2161509ff65e        chug/ubuntu12.10x64:latest   /bin/bash           22 hours ago        Exited (0) 22 hours ago                           backstabbing_mclean
[[email protected] /]# docker ps -q
ccf3de663dc9

    再次启动容器

docker start/stop/restart<container> :开启/停止/重启container
    docker start [container_id] :再次运行某个container(包括历史container)
    docker attach [container_id]:连接一个正在运行的container实例(即实例必须为start状态,可以多个窗口同时attach一个container实例)
    docker start -i <container>:启动一个container并进入交互模式(相当于先start,在attach)

docker run -i -t <image> /bin/bash:使用image创建container并进入交互模式, login shell是/bin/bash
    docker run -i -t -p <host_port:contain_port>:映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port映射到一个动态端口。
   注:使用start是启动已经创建过得container,使用run则通过image开启一个新的container。

    删除容器

docker rm <container...>:删除一个或多个container
    docker rm `docker ps -a -q` :删除所有的container
    docker ps -a -q | xargs docker rm :同上,删除所有的container

6 持久化容器与镜像

    6.1 通过容器生成新的镜像

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

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

[[email protected] /]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
chug/ubuntu12.10x64   latest              0b96c14dafcd        4 months ago        270.3 MB
[[email protected] /]# docker commit d0fd23b8d3ac chug/ubuntu12.10x64_2
daa11948e23d970c18ad89c9e5d8972157fb6f0733f4742db04219b9bb6d063b
[[email protected] /]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
chug/ubuntu12.10x64_2   latest              daa11948e23d        6 seconds ago       270.3 MB
chug/ubuntu12.10x64     latest              0b96c14dafcd        4 months ago        270.3 MB

    6.2 持久化容器

export命令用于持久化容器

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

    6.3 持久化镜像

Save命令用于持久化镜像

docker save 镜像ID > /tmp/save.tar

    6.4 导入持久化container

删除container 2161509ff65e

导入export.tar文件

[[email protected] /]# cat /tmp/export.tar | docker import - export:latest
af19a55ff0745fb0a68655392d6d7653c29460d22d916814208bbb9626183aaa
[[email protected] /]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
export                  latest              af19a55ff074        34 seconds ago      270.3 MB
chug/ubuntu12.10x64_2   latest              daa11948e23d        20 minutes ago      270.3 MB
chug/ubuntu12.10x64     latest              0b96c14dafcd        4 months ago        270.3 MB

    6.5 导入持久化image

删除image daa11948e23d

导入save.tar文件

[[email protected] /]# docker load < /tmp/save.tar


    对image打tag
[[email protected] /]# docker tag daa11948e23d load:tag

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

6.7 一些其它命令

docker logs $CONTAINER_ID#查看docker实例运行日志,确保正常运行
    docker inspect $CONTAINER_ID #docker inspect<image|container> 查看image或container的底层信息

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 也可以看到

7 一些使用技巧

    7.1 docker文件存放目录

Docker实际上把所有东西都放到/var/lib/docker路径下了。

[[email protected] docker]# ls -F
containers/  devicemapper/  execdriver/  graph/  init/  linkgraph.db  repositories-devicemapper  volumes/

containers目录当然就是存放容器(container)了,graph目录存放镜像,文件层(filesystemlayer)存放在graph/imageid/layer路径下,这样我们就可以看看文件层里到底有哪些东西,利用这种层级结构可以清楚的看到文件层是如何一层一层叠加起来的。

    7.2  查看root密码

docker容器启动时的root用户的密码是随机分配的。所以,通过这种方式就可以得到容器的root用户的密码了。

docker logs 5817938c3f6e 2>&1 | grep 'User: ' | tail -n1
(0)

相关推荐

  • Centos 6.5中安装docker的步骤(简洁版)

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app).几乎没有性能开销,可以很容易地在机器和数据中心中运行.最重要的是,他们不依赖于任何语言.框架包括系统. 一.安装epel源 复制代码 代码如下: wget http://mirrors.yun-idc.com/epel/6/x86_64/epel-releas

  • CentOS7 安装docker 解决启动不了的问题

    CentOS7安装docker 启动不了,在工作当中遇到这个问题,当时急的不清,网上资料又不多,不过经过自己的捣鼓终于解决了 这个问题! [root@test ~]# yum update [root@test ~]# yum install docker [root@test ~]# service docker start Redirecting to /bin/systemctl start docker.service Job for docker.service failed beca

  • Docker 教程之CentOS安装 Docker

    CentOS 系列安装 Docker Docker 支持 CentOS6 及以后的版本. CentOS6 对于 CentOS6,可以使用 EPEL 库安装 Docker,命令如下 $ sudo yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm $ sudo yum install docker-io CentOS7 CentOS7 系统 CentOS-Extras 库中已带 Docker,

  • 阿里云CentOS 6.5 安装Docker详细步骤

    因为阿里云的CentOS 6.5版本默认内核kernel版本是2.6的,比较低.安装docker的后,运行不了. 步骤: 1.使用命令更新: yum update 2.安装Docker.这里忽略500字.... 3.使用命令查看IP: ifconfig 将看到有类似的结果: eth0 Link encap:Ethernet HWaddr 00:16:3E:00:6B:5D inet addr:10.169.127.193 Bcast:10.169.127.255 Mask:255.255.248

  • docker centos7 安装ssh具体步骤

     docker centos7 安装ssh具体步骤,这里记录下,也行能帮助到正在读文章的朋友. 一. 从docker hub 下载centos 官方镜像 hr:centos7 hr$ docker pull centos:7 下载完后,查看本地资源库: hr:centos7 hr$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos 7 ce20c473cd8a 7 weeks ago 172.3 MB 运行容器 h

  • Centos下安装docker教程

    通过yum安装 需要root或者能sudo的权限 yum包更新到最新 $ sudo yum update 添加Docker yum源 $ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=h

  • CentOS 7.2 下安装 Docker 1.12.3 版的详细方法

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 1.强大的官方文档 https://docs.docker.com/engine/installation/linux/centos/ 2.按步骤来,先更新yum源,这里用163的源 yum install -y wget cd /etc/yum.repos.d wget http://mi

  • 在CentOS 7上安装Docker环境的方法与注意事项

    官网文档:https://docs.docker.com/engine/installation/linux/centos/ ,本文大部分是照搬官方文档写的,如果你英文还不错,那么就直接移步官方文档吧,如果你英文实在是不行,那就勉强看一下本人这生涩的翻译~ 以下操作均在root用户下完成 docker的安装要求64位系统且内核版本大于3.10.所以如果是centos的话,必须安装CentOS7.0或以上版本. 我们这里使用的是CentOS7.2 mininul. uname -r 3.10.0-

  • Docker CentOS7的系统上安装部署以及基础教程

    说明: 本文介绍如何在CentOS7的系统上安装部署Docker环境,本文参考Docker官方文档如下链接: https://docs.docker.com/engine/installation/centos/ CentOS7的系统上安装部署Docker环境 1 CentOS7安装(略) 2 升级系统 yum update 升级完成后需要重启下系统. 3 添加docker yum源 执行如下命令: cat >/etc/yum.repos.d/docker.repo name=Docker Re

  • CentOS 7安装Docker服务详细过程

    Docker 简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. Docker 官网:http://www.docker.com/ Docker 官方文档:https://docs.docker.com/ Docker Github 地址:https://github.com/docker/docker Docker 仓库:https:

随机推荐