分享十五,CentOS系统下docker的安装配置及使用详解

Posted by

       
自从加入公司云计算部门,接触的新技术越来越多了,而且客户需求也原来越多样性,做我一名老IT,也必须跟上节奏,接下来一段时间我先尝试去了解docker基本功能,然后深入去挖掘。

       
自从加入公司云计算部门,接触的新技术越来越多了,而且客户需求也原来越多样性,做我一名老IT,也必须跟上节奏,接下来一段时间我先尝试去了解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 容器镜像。

         一、什么是docker?

         一、什么是docker?

2 docker特性

        Docker
是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的
Linux
机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

        Docker
是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的
Linux
机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

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

一个完整的Docker有以下几个部分组成:

一个完整的Docker有以下几个部分组成:

3 两个基础概念images与container

  1. dockerClient客户端

  2. Docker Daemon守护进程

  3. Docker Image镜像

  4. DockerContainer容器

  1. dockerClient客户端

  2. Docker Daemon守护进程

  3. Docker Image镜像

  4. DockerContainer容器

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

     二、如何安装docker

     二、如何安装docker

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

   
docker支持在主流的操作系统平台上使用,包含Ubuntu、Centos、Windows以及MacOS系统等。当然在linux系统平台上是原生支持,使用体验是最好的。本分享中就以centos为例进行安装

   
docker支持在主流的操作系统平台上使用,包含Ubuntu、Centos、Windows以及MacOS系统等。当然在linux系统平台上是原生支持,使用体验是最好的。本分享中就以centos为例进行安装

4 docker安装与启动

    docker支持centos6以及后面的版本

    docker支持centos6以及后面的版本

    安装docker

   $yum install –y docker

   $yum install –y docker

[root@localhost /]# yum -y install docker-io

   三、镜像

   三、镜像

    更改配置文件

     1.获取镜像

     1.获取镜像

[root@localhost /]# vi /etc/sysconfig/docker

docker pull NAME[:TAG]    比如:docker pull Ubuntu

docker pull NAME[:TAG]    比如:docker pull Ubuntu

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

    2.查看镜像信息

    2.查看镜像信息

    启动docker服务

[root@localhost ~]# docker images;
REPOSITORY          TAG                 IMAGE ID           
CREATED             SIZE
docker.io/ubuntu    latest              00fd29ccc6f1        32 hours
ago        110.5 MB
[root@localhost ~]# docker inspect 00fd29ccc6f1

[root@localhost ~]# docker images;
REPOSITORY          TAG                 IMAGE ID           
CREATED             SIZE
docker.io/ubuntu    latest              00fd29ccc6f1        32 hours
ago        110.5 MB
[root@localhost ~]# docker inspect 00fd29ccc6f1

[root@localhost /]# service docker start
Starting cgconfig service:                                 [  OK  ]
Starting docker:                                               [  OK  ]

[
    {
        “Id”:
“sha256:00fd29ccc6f167fa991580690a00e844664cb2381c74cd14d539e36ca014f043”,
        “RepoTags”: [
            “docker.io/ubuntu:latest”

[
    {
        “Id”:
“sha256:00fd29ccc6f167fa991580690a00e844664cb2381c74cd14d539e36ca014f043”,
        “RepoTags”: [
            “docker.io/ubuntu:latest”

    将docker加入开机启动
[root@localhost /]# chkconfig docker on

   3.搜索镜像(搜索远端仓库中共享的镜像,默认搜索docker
HUB官方仓库中的镜像)

   3.搜索镜像(搜索远端仓库中共享的镜像,默认搜索docker
HUB官方仓库中的镜像)

    基本信息查看

docker search mysql
INDEX      
NAME                                                            
DESCRIPTION                                     STARS     OFFICIAL  
AUTOMATED
docker.io  
docker.io/mysql                                                  MySQL
is a widely used, open-source relati…   5412      [OK]      
docker.io  
docker.io/mariadb                                                MariaDB
is a community-developed fork of M…   1676      [OK]      
docker.io  
docker.io/mysql/mysql-server                                    
Optimized MySQL Server Docker images. Crea…   373                 
[OK]
docker.io  
docker.io/percona                                                Percona
Server is a fork of the MySQL rela…   309       [OK]      
docker.io  
docker.io/hypriot/rpi-mysql                                     
RPi-compatible Docker Image with Mysql          74                  
docker.io  
docker.io/zabbix/zabbix-server-mysql                             Zabbix
Server with MySQL database support       66                   [OK]
docker.io  
docker.io/centurylink/mysql                                      Image
containing

docker search mysql
INDEX      
NAME                                                            
DESCRIPTION                                     STARS     OFFICIAL  
AUTOMATED
docker.io  
docker.io/mysql                                                  MySQL
is a widely used, open-source relati…   5412      [OK]      
docker.io  
docker.io/mariadb                                                MariaDB
is a community-developed fork of M…   1676      [OK]      
docker.io  
docker.io/mysql/mysql-server                                    
Optimized MySQL Server Docker images. Crea…   373                 
[OK]
docker.io  
docker.io/percona                                                Percona
Server is a fork of the MySQL rela…   309       [OK]      
docker.io  
docker.io/hypriot/rpi-mysql                                     
RPi-compatible Docker Image with Mysql          74                  
docker.io  
docker.io/zabbix/zabbix-server-mysql                             Zabbix
Server with MySQL database support       66                   [OK]
docker.io  
docker.io/centurylink/mysql                                      Image
containing

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

4.删除镜像

4.删除镜像

[root@localhost /]# 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 rmi image(image可以为标签或者ID)

docker rmi image(image可以为标签或者ID)

    docker info:查看系统(docker)层面信息,包括管理的images,
containers数等
[root@localhost /]# 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

docker rmi Ubuntu:latest

docker rmi Ubuntu:latest

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

dicker rmi –f ubuntu  强行删除,不建议这样操作

dicker rmi –f ubuntu  强行删除,不建议这样操作

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

一般建议先删除依赖该镜像的所有容器,再来删除镜像。

一般建议先删除依赖该镜像的所有容器,再来删除镜像。

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

docker ps -a查看本机上存在的容器。

docker ps -a查看本机上存在的容器。

[root@localhost /]# docker search ubuntu12.10
NAME                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mirolin/ubuntu12.10                                                         0
marcgibbons/ubuntu12.10                                                     0
mirolin/ubuntu12.10_redis                                                   0
chug/ubuntu12.10×32         Ubuntu Quantal Quetzal 12.10 32bit  base i…   0
chug/ubuntu12.10×64         Ubuntu Quantal Quetzal 12.10 64bit  base i…   0

5.创建镜像

5.创建镜像

    下载镜像

基于已有的镜像的容器创建:

基于已有的镜像的容器创建:

    docker pull  :从docker registry
server中下拉image

[root@localhost ~]# docker run -ti ubuntu /bin/bash

[root@localhost ~]# docker run -ti ubuntu /bin/bash

[root@localhost /]# docker pull chug/ubuntu12.10×64

touch test

touch test

    查看镜像

exit

exit

    docker images: 列出images

docker commit –m “Added a new file” –a “docker Newbee” 8bd2274ada22 
test  9ecdbadc

docker commit –m “Added a new file” –a “docker Newbee” 8bd2274ada22 
test  9ecdbadc

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

基于本地模板导入

基于本地模板导入

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

cat ubuntu –14.04-x86_64-minimal.tar.gz |docker import – ubuntu:14.04

cat ubuntu –14.04-x86_64-minimal.tar.gz |docker import – ubuntu:14.04

    docker rmi  :删除一个或多个image

 

 

[root@localhost /]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
chug/ubuntu12.10×64   latest              0b96c14dafcd        4 months ago        270.3 MB
[root@localhost /]# docker images -a
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
chug/ubuntu12.10×64   latest              0b96c14dafcd        4 months ago        270.3 MB
                              31edfed3bb88        4 months ago        175.8 MB
[root@localhost /]# 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.10×64:latest
[root@localhost /]# docker rmi  ….

6.存出和载入镜像

6.存出和载入镜像

     使用镜像创建容器

存出镜像

存出镜像

[root@localhost /]# docker run chug/ubuntu12.10×64  /bin/echo hello world
hello world

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID           
CREATED             SIZE
docker.io/ubuntu    latest              00fd29ccc6f1        2 days
ago          110.5 MB
docker.io/httpd     latest              7239615c0645        5 days
ago          177.3 MB
docker.io/mysql     latest              7d83a47ab2d2        5 days
ago   

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID           
CREATED             SIZE
docker.io/ubuntu    latest              00fd29ccc6f1        2 days
ago          110.5 MB
docker.io/httpd     latest              7239615c0645        5 days
ago          177.3 MB
docker.io/mysql     latest              7d83a47ab2d2        5 days
ago   

    交互式运行
[root@localhost /]# docker run -i -t chug/ubuntu12.10×64  /bin/bash
root@2161509ff65e:/#

[root@localhost ~]# docker save -o ubuntu_test.tar ubuntu
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID           
CREATED             SIZE
docker.io/ubuntu    latest              00fd29ccc6f1        2 days
ago          110.5 MB
docker.io/httpd     latest              7239615c0645        5 days
ago          177.3 MB
docker.io/mysql     latest              7d83a47ab2d2        5 days
ago          408.2 MB
[root@localhost ~]# ls
anaconda-ks.cfg  ubuntu_test.tar

[root@localhost ~]# docker save -o ubuntu_test.tar ubuntu
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID           
CREATED             SIZE
docker.io/ubuntu    latest              00fd29ccc6f1        2 days
ago          110.5 MB
docker.io/httpd     latest              7239615c0645        5 days
ago          177.3 MB
docker.io/mysql     latest              7d83a47ab2d2        5 days
ago          408.2 MB
[root@localhost ~]# ls
anaconda-ks.cfg  ubuntu_test.tar

    查看容器

载入镜像

载入镜像

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

docker load < ubuntu_test.tar

docker load < ubuntu_test.tar

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

四、容器

四、容器

    再次启动容器

简单地说,容器是镜像的一个运行实例,所不同的是,它带有额外的可写文件层。

简单地说,容器是镜像的一个运行实例,所不同的是,它带有额外的可写文件层。

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

创建容器:

创建容器:

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

新建容器:

新建容器:

    删除容器

[root@localhost ~]# docker create -it ubuntu:latest
743f20816538a52a686cf61d6a30db6fdb609c0da2d6a844e645b334b9bb3252

[root@localhost ~]# docker create -it ubuntu:latest
743f20816538a52a686cf61d6a30db6fdb609c0da2d6a844e645b334b9bb3252

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

docker start

docker start

6 持久化容器与镜像

新建并启动容器

新建并启动容器

    6.1 通过容器生成新的镜像

docker run ubuntu  /bin/echo “Hello world’

docker run ubuntu  /bin/echo “Hello world’

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

docker ps: 查看当前运行的容器

docker ps: 查看当前运行的容器

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

docker ps -a:查看所有容器,包括停止的

docker ps -a:查看所有容器,包括停止的

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

docker ps -l :查看最新创建的容器,只列出最后创建的。

docker ps -l :查看最新创建的容器,只列出最后创建的。

    6.2 持久化容器

docker ps -n=2:-n=x选项,会列出最后创建的x个容器。

docker ps -n=2:-n=x选项,会列出最后创建的x个容器。

    export命令用于持久化容器

容器名:docker start docker_run,或者ID:docker start 43e3fef2266c

容器名:docker start docker_run,或者ID:docker start 43e3fef2266c

    docker export >/tmp/export.tar

–restart(自动重启):默认情况下容器是不重启的,–restart标志会检查容器的退出码来决定容器是否重启容器。

–restart(自动重启):默认情况下容器是不重启的,–restart标志会检查容器的退出码来决定容器是否重启容器。

图片 2

docker run --restart=always --name docker_restart -d centos /bin/sh -c "while true;do echo hello world; sleep;done":

docker run --restart=always --name docker_restart -d centos /bin/sh -c "while true;do echo hello world; sleep;done":

    6.3 持久化镜像

--restart=always:不管容器的返回码是什么,都会重启容器。

--restart=always:不管容器的返回码是什么,都会重启容器。

    Save命令用于持久化镜像

--restart=on-failure:5:当容器的返回值是非0时才会重启容器。5是可选的重启次数

--restart=on-failure:5:当容器的返回值是非0时才会重启容器。5是可选的重启次数

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

容器终止

容器终止

图片 3

docker stop [NAME]/[CONTAINER ID]:将容器退出。

docker stop [NAME]/[CONTAINER ID]:将容器退出。

    6.4 导入持久化container

docker kill [NAME]/[CONTAINER ID]:强制停止一个容器。

docker kill [NAME]/[CONTAINER ID]:强制停止一个容器。

    删除container 2161509ff65e

删除容器

删除容器

图片 4

docker rm [NAME]/[CONTAINER ID]

docker rm [NAME]/[CONTAINER ID]

    导入export.tar文件

容器终止后,在需要的时候可以重新启动,确定不需要了,可以进行删除操作。

 

导入和导出容器
容器终止后,在需要的时候可以重新启动,确定不需要了,可以进行删除操作。

 

导入和导出容器

[root@localhost /]# cat /tmp/export.tar | docker import – export:latest
af19a55ff0745fb0a68655392d6d7653c29460d22d916814208bbb9626183aaa
[root@localhost /]# 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.10×64     latest              0b96c14dafcd        4 months ago        270.3 MB

[root@localhost ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND               
CREATED             STATUS                     PORTS              
NAMES
dd7eef06ccba        ubuntu              “/bin/echo “Hello w”   12
minutes ago      Exited (0) 4 minutes ago                      
silly_meitner
[root@localhost ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND               
CREATED             STATUS                     PORTS              
NAMES
dd7eef06ccba        ubuntu              “/bin/echo “Hello w”   12
minutes ago      Exited (0) 4 minutes ago                      
silly_meitner
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                 
CREATED             STATUS                      PORTS              
NAMES
dd7eef06ccba        ubuntu              “/bin/echo “Hello w”     14
minutes ago      Exited (0) 7 minutes ago                       
silly_meitner
743f20816538        ubuntu:latest       “/bin/bash”              17
minutes ago      Created                                        
nostalgic_stonebraker
8bd2274ada22        ubuntu              “/bin/bash”              31
minutes ago      Exited (0) 31 minutes ago                      
sad_mccarthy
7786523990bf        ubuntu              “/bin/bash”              30
hours ago        Exited (0) 30 hours ago                        
awesome_goldstine
175c8cf0149e        ubuntu              “echo ‘hello! I am he”   30
hours ago        Exited (0) 30 hours ago                        
fervent_kowalevski
[root@localhost ~]# docker export dd7eef06ccba > test.tar

[root@localhost ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND               
CREATED             STATUS                     PORTS              
NAMES
dd7eef06ccba        ubuntu              “/bin/echo “Hello w”   12
minutes ago      Exited (0) 4 minutes ago                      
silly_meitner
[root@localhost ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND               
CREATED             STATUS                     PORTS              
NAMES
dd7eef06ccba        ubuntu              “/bin/echo “Hello w”   12
minutes ago      Exited (0) 4 minutes ago                      
silly_meitner
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                 
CREATED             STATUS                      PORTS              
NAMES
dd7eef06ccba        ubuntu              “/bin/echo “Hello w”     14
minutes ago      Exited (0) 7 minutes ago                       
silly_meitner
743f20816538        ubuntu:latest       “/bin/bash”              17
minutes ago      Created                                        
nostalgic_stonebraker
8bd2274ada22        ubuntu              “/bin/bash”              31
minutes ago      Exited (0) 31 minutes ago                      
sad_mccarthy
7786523990bf        ubuntu              “/bin/bash”              30
hours ago        Exited (0) 30 hours ago                        
awesome_goldstine
175c8cf0149e        ubuntu              “echo ‘hello! I am he”   30
hours ago        Exited (0) 30 hours ago                        
fervent_kowalevski
[root@localhost ~]# docker export dd7eef06ccba > test.tar

    6.5 导入持久化image

 

 

    删除image daa11948e23d

cat test.tar |docker import –test/ubuntu

cat test.tar |docker import –test/ubuntu

图片 5

 

 

    导入save.tar文件

五、仓库

五、仓库

[root@localhost /]# docker load < /tmp/save.tar

docker 官方维护了一个公共仓库  
,大约15000多个镜像

docker 官方维护了一个公共仓库  
,大约15000多个镜像

图片 6
    对image打tag
[root@localhost /]# docker tag daa11948e23d load:tag

六、数据管理

六、数据管理

图片 7

用户在使用docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行相应的备份,甚至想把多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。容器中管理数据主要有两种方式:

用户在使用docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行相应的备份,甚至想把多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。容器中管理数据主要有两种方式:

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

  • 数据卷(Data Volumes)
  • 数据卷容器(Data Volume Containers)
  • 数据卷(Data Volumes)
  • 数据卷容器(Data Volume Containers)

图片 8

在容器内创建一个数据卷

docker run -it –rm –name web -v /src/webapp:/opt/webapp
training/webapp python app.py
#将宿主机中的/src/webapp目录挂载到容器中的/opt/webapp中

在容器内创建一个数据卷

docker run -it –rm –name web -v /src/webapp:/opt/webapp
training/webapp python app.py
#将宿主机中的/src/webapp目录挂载到容器中的/opt/webapp中

    6.7 一些其它命令

数据容器
  • 首先,创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata

docker run –name jpzhu_centos -v /jpzhu_file –rm -it centos
/bin/bash
#创建一个数据容器并且挂载其中/jpzhu_file文件作为其它容器共享的数据卷

  • 接着,可以在其它的容器中使用–volumes-from
    来挂载dbdata中的/jpzhu_file
数据容器
  • 首先,创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata

docker run –name jpzhu_centos -v /jpzhu_file –rm -it centos
/bin/bash
#创建一个数据容器并且挂载其中/jpzhu_file文件作为其它容器共享的数据卷

  • 接着,可以在其它的容器中使用–volumes-from
    来挂载dbdata中的/jpzhu_file

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

利用数据卷容器迁移数据

备份

$ docker run –name worker -v ${pwd}:/backup –volumes-from dbdata -d
centos tar cvf /backup/backup.tar /dbdata

恢复

docker run –volumes –from dbdata2 –v(pwd):/backup busybox tar xvf /backup/backuptar

 

 
利用数据卷容器迁移数据

备份

$ docker run –name worker -v ${pwd}:/backup –volumes-from dbdata -d
centos tar cvf /backup/backup.tar /dbdata

恢复

docker run –volumes –from dbdata2 –v(pwd):/backup busybox tar xvf /backup/backuptar

 

 

    docker build 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image
    docker build -t repo[:tag] 同上,可以指定repo和可选的tag
    docker build – < 使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image
    docker port 查看本地哪个端口映射到container的指定端口,其实用docker
ps 也可以看到

7 一些使用技巧

    7.1 docker文件存放目录

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

[root@localhost 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

****************************************************************************************

转载请注明原文地址:

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注