zoukankan      html  css  js  c++  java
  • Docker容器(分享十五)

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

             一、什么是docker?

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

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

    1. dockerClient客户端

    2. Docker Daemon守护进程

    3. Docker Image镜像

    4. DockerContainer容器

         二、如何安装docker

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

        docker支持centos6以及后面的版本

       $yum install –y docker

       三、镜像

         1.获取镜像

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

        2.查看镜像信息

    [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

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

       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

    4.删除镜像

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

    docker rmi Ubuntu:latest

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

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

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

    5.创建镜像

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

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

    touch test

    exit

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

    基于本地模板导入

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

    6.存出和载入镜像

    存出镜像

    [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 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 load < ubuntu_test.tar

    四、容器

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

    创建容器:

    新建容器:

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

    docker start

    新建并启动容器

    docker run ubuntu  /bin/echo “Hello world’

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

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

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

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

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

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

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

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

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

    容器终止

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

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

    删除容器

    docker rm [NAME]/[CONTAINER ID]

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

    [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

     

    cat test.tar |docker import –test/ubuntu

     

    五、仓库

    docker 官方维护了一个公共仓库 http://hub.docker.com  ,大约15000多个镜像

    六、数据管理

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

    • 数据卷(Data Volumes)
    • 数据卷容器(Data Volume Containers)
    在容器内创建一个数据卷

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

    数据容器
    • 首先,创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata
    docker run --name jpzhu_centos -v /jpzhu_file --rm -it centos /bin/bash #创建一个数据容器并且挂载其中/jpzhu_file文件作为其它容器共享的数据卷
    • 接着,可以在其它的容器中使用–volumes-from 来挂载dbdata中的/jpzhu_file
    利用数据卷容器迁移数据

    备份

    $ 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
     
     
  • 相关阅读:
    centos创建本地yum仓库
    CentOSyum操作
    配置mysql5.5主从服务器(转)
    如何做好网站开发项目需求分析(转)
    我在寻求工作治理的方法(转)
    Centos下_MysqL5.7在使用mysqldump命令备份数据库报错:mysqldump: [Warning] Using a password on the command line interface can be insecure.
    Redis限制在规定时间范围内登陆错误次数限制
    Yaf框架的配置
    在Centos环境下安装兼容Apache2.4高版本SVN服务
    yaf框架加载全局公共函数
  • 原文地址:https://www.cnblogs.com/zywu-king/p/8053261.html
Copyright © 2011-2022 走看看