IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    备份,迁移和克隆docker镜像

    小荷发表于 2017-05-21 15:31:55
    love 0

    继《Oracle支持在docker上跑oracle数据库了》和《在MAC上安装docker并部署oracle12.2》 之后,我们再来看看如何将docker镜像进行备份,迁移和克隆。

    (一)备份:
    我们用docker ps看有几个container,注意如果加-a参数,则没有running的container也会显示出来。

    LoveHousedeiMac:idocker lovehouse$ docker ps -a
    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                     PORTS               NAMES
    c9f09116cc83        oracle/database:12.2.0.1-ee   "/bin/sh -c 'exec ..."   23 hours ago        Exited (137) 4 hours ago                       oracle
    LoveHousedeiMac:idocker lovehouse$

    我们先将该container commit成镜像:
    先检查一下已经存在的image:

    LoveHousedeiMac:idocker lovehouse$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    oracle/database     12.2.0.1-ee         4f9df5f46a19        23 hours ago        14.8 GB
    oraclelinux         7-slim              442ebf722584        4 weeks ago         114 MB
    LoveHousedeiMac:idocker lovehouse$

    停下container,并进行commit:

    LoveHousedeiMac:idocker lovehouse$ docker stop oracle
    oracle
    LoveHousedeiMac:idocker lovehouse$                 
    LoveHousedeiMac:idocker lovehouse$ docker commit -p c9f09116cc83 container-backup
    sha256:f58f6143fca7d2e001ce810b2d13b8adac9d64e4cc9f50477f0108bb246db3c0
    LoveHousedeiMac:idocker lovehouse$

    检查现有的image:

    LoveHousedeiMac:idocker lovehouse$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    container-backup    latest              f58f6143fca7        4 seconds ago       15.3 GB
    oracle/database     12.2.0.1-ee         4f9df5f46a19        23 hours ago        14.8 GB
    oraclelinux         7-slim              442ebf722584        4 weeks ago         114 MB
    LoveHousedeiMac:idocker lovehouse$

    将container-backup 这个image做成tar文件:

    LoveHousedeiMac:idocker lovehouse$ ls
    docker-images-master
    LoveHousedeiMac:idocker lovehouse$ docker save -o ./container-backup.tar container-backup
    LoveHousedeiMac:idocker lovehouse$  
    LoveHousedeiMac:idocker lovehouse$ ls -l
    total 29910416
    -rw-------   1 lovehouse  staff  15314129920 May 21 21:48 container-backup.tar
    drwxr-xr-x@ 19 lovehouse  staff          646 May 20 20:04 docker-images-master
    LoveHousedeiMac:idocker lovehouse$

    我们将container-backup.tar备份或者迁移至别的主机,或者路径。实现了docker container的迁移。

    注意,由于之前我们建立database采用了分离式的持久化,即数据文件不是在container,是在/Users/[username]/oradata下,所以我们也要备份一份这个文件。

    cd /Users/lovehouse
    tar cvf oradata.tar oradata

    (二)还原或克隆:
    我们这里将备份的东西,load进去,并且成为oracle_2

    先将数据文件还原,且文件夹命名成oradata_2

    LoveHousedeiMac:~ lovehouse$ pwd
    /Users/lovehouse
    LoveHousedeiMac:~ lovehouse$ ls -l
    total 7356176
    drwxr-xr-x   4 lovehouse  staff         136 May 21 21:48 iDocker
    drwxr-xr-x@  6 lovehouse  staff         204 May 21 22:21 oradata
    drwxr-xr-x@  6 lovehouse  staff         204 May 21 22:21 oradata_2
    LoveHousedeiMac:~ lovehouse$

    将备份的tar包 load进去

    LoveHousedeiMac:~ lovehouse$ cd idocker   
    LoveHousedeiMac:idocker lovehouse$ ls
    container-backup.tar    docker-images-master
    LoveHousedeiMac:idocker lovehouse$   
    LoveHousedeiMac:idocker lovehouse$  docker load -i ./container-backup.tar
    94fd1a061ee3: Loading layer [==================================================>] 433.9 MB/433.9 MB
    Loaded image: container-backup:latest
    LoveHousedeiMac:idocker lovehouse$  
    LoveHousedeiMac:idocker lovehouse$ 
    LoveHousedeiMac:idocker lovehouse$ 
    LoveHousedeiMac:idocker lovehouse$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    container-backup    latest              f58f6143fca7        About an hour ago   15.3 GB
    oracle/database     12.2.0.1-ee         4f9df5f46a19        25 hours ago        14.8 GB
    oraclelinux         7-slim              442ebf722584        4 weeks ago         114 MB
    LoveHousedeiMac:idocker lovehouse$

    运行docker run创建container,注意端口要修改一下,以免占用原来的oracle这个container的端口。如果不修改,那么第二个container启动的时候会报错:port is already allocated

    LoveHousedeiMac:idocker lovehouse$ docker run --name oracle_2 -p 1522:1521 -p 5501:5500 -v /Users/lovehouse/oradata_2:/opt/oracle/oradata container-backup:latest
    
    LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 21-MAY-2017 15:21:22
    
    Copyright (c) 1991, 2016, Oracle.  All rights reserved.
    
    Starting /opt/oracle/product/12.2.0.1/dbhome_1/bin/tnslsnr: please wait...
    
    TNSLSNR for Linux: Version 12.2.0.1.0 - Production
    System parameter file is /opt/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.ora
    Log messages written to /opt/oracle/diag/tnslsnr/e12ff2cf32f2/listener/alert/log.xml
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
    
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
    Start Date                21-MAY-2017 15:21:26
    Uptime                    0 days 0 hr. 0 min. 2 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /opt/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.ora
    Listener Log File         /opt/oracle/diag/tnslsnr/e12ff2cf32f2/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
    The listener supports no services
    The command completed successfully
    
    SQL*Plus: Release 12.2.0.1.0 Production on Sun May 21 15:21:26 2017
    
    Copyright (c) 1982, 2016, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL> ORACLE instance started.
    
    Total System Global Area 1610612736 bytes
    Fixed Size                  8793304 bytes
    Variable Size             520094504 bytes
    Database Buffers         1073741824 bytes
    Redo Buffers                7983104 bytes
    Database mounted.
    Database opened.
    SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
    #########################
    DATABASE IS READY TO USE!
    #########################
    The following output is now a tail of the alert.log:
    Shared IO Pool defaulting to 64MB. Trying to get it from Buffer Cache for process 83.
    ===========================================================
    Dumping current patch information
    ===========================================================
    No patches have been applied
    ===========================================================
    Starting background process CJQ0
    2017-05-21T15:21:43.968340+00:00
    CJQ0 started with pid=40, OS id=295 
    Completed: ALTER DATABASE OPEN
    2017-05-21T15:21:44.275108+00:00
    db_recovery_file_dest_size of 12780 MB is 0.00% used. This is a
    user-specified limit on the amount of space that will be used by this
    database for recovery-related files, and does not reflect the amount of
    space available in the underlying filesystem or ASM diskgroup.
    2017-05-21T15:21:47.119178+00:00
    Setting Resource Manager plan SCHEDULER[0x4AC9]:DEFAULT_MAINTENANCE_PLAN via scheduler window
    Setting Resource Manager CDB plan DEFAULT_MAINTENANCE_PLAN via parameter
    ORCLPDB1(3):Setting Resource Manager plan SCHEDULER[0x4AC3]:DEFAULT_MAINTENANCE_PLAN via scheduler window
    ORCLPDB1(3):Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter

    至此,2个docker container已经同时跑起来。container-backup:latest这个container是利用第一个克隆出来的,并且做了端口映射,将1522映射到内部的1521,将5501映射到内部的5500。

    LoveHousedeiMac:idocker lovehouse$ docker ps
    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                            NAMES
    e12ff2cf32f2        container-backup:latest       "/bin/sh -c 'exec ..."   3 minutes ago       Up 2 minutes        0.0.0.0:1522->1521/tcp, 0.0.0.0:5501->5500/tcp   oracle_2
    c9f09116cc83        oracle/database:12.2.0.1-ee   "/bin/sh -c 'exec ..."   24 hours ago        Up 6 minutes        0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp   oracle
    LoveHousedeiMac:idocker lovehouse$ 
    LoveHousedeiMac:idocker lovehouse$



沪ICP备19023445号-2号
友情链接