zoukankan      html  css  js  c++  java
  • linux的docker知识

    docker起源于2013年,目前新版的docker需要linux 7版本环境。

    docker的三个基础概念:镜像、容器、仓库。

    docker安装:

     yum install docker      #docker安装

     systemctl start docker.service   #docker启动

     docker              #docker命令的执行

     docker search  mysql -s 100  #查看mysql的镜像源,-s指显示STARS大于100的镜像源

    镜像获取:  

     镜像是一个模板,可以从镜像服务器上获取做好的镜像。docker使用docker pull命令来获取镜像。

     docker pull mysql       #获取一个mysql镜像

     docker images         #显示本地已有的镜像,有几个字段,分别是来自哪个仓库/镜像,镜像标志,镜像id,创建时间,镜像大小 

     docker run -t -i 镜像名称 /bin/bash  #使用获取的镜像,创建一个容器,在容器中运行bash应用,-t指运行之后产生一个命令行(terminal),-i让容器的标准输入保持打开

     docker ps           #ps查看运行的容器有哪些

    创建镜像:

     创建镜像有很多种方法,用户可以更新镜像,也可以利用本地文件系统创建镜像。

     a、docker pull training/sinatra    #先下载镜像

     b、docker run -t -i training/sinatra /bin/bash     #启动镜像

     c、gem install json         #在镜像中添加gem和json应用

     d、exit               #使用exit退出容器

     e、docker commit -m 'add gem json' -a 'Docker Container' 7b789b19572d my/sinatra:v2  #利用docker commit命令来提交更新后的副本,-m参数指定提交的说明描叙信息,-a参数指定维护的用户信息,后面是用来指定镜像的容器ID(d之前的容器ID),最后面是创建镜像的仓库名和tag信息。创建成功后,命令会返回这个镜像的ID信息。

     

     f、docker images        #查看刚才创建的镜像

     g、docker  run -t -i my/sinatra:v2 /bin/bash  #使用自己创建的镜像来启动容器

     

      方法二:使用Dockerfile创建镜像

      使用Dockerfile来创建镜像,使用docker commit虽然很容易扩展镜像,但不便于团队分享,我们可以使用docker build 来创建一个新的镜像。为此首先要创建一个Dockerfile文件,这个文件中包含如何创建镜像的指令。

      a、首先创建一个目录和Dockerfile

        mkdir sinatra&&cd sinatra&&touch Dockerfile

      b、Dockerfile中输入指令,每条指令都创建镜像的一层

      cat >>Dockerfile <<eof

      ---------------------------------------------

      #注解

      FROM centos

      MAINTAINER REGAN 11658999869@qq.com

      RUN yum -qqy install python

      ---------------------------------------------

      <<eof      #其中from告诉docker使用哪个镜像作为基础,接着是维护者的信息,run开头的指令会在创建中运行,例如安装一些软件包,这里使用yum安装python,需要定制参数-qqy,否则可能报错。

      docker build -t='/my/python:v1'.  #其中-t标记来添加tag,指定新的用户的信息。“.“是Dockerfile所在的路径(当前目录),也可以替换为一个具体的Dockerfile的路径。可以看到build进程在执行操作。它要做的第一件事情就是上传这个Dockerfile内容,因为所有的操作都要依据Dockerfile来进行。然后,Dockerfile中的指令被一条一条的执行。每一步都创建一个新的容器,在容器中执行指令并提交修改(就跟之前的docker commit一样)。当所有的指定都执行完毕之后,返回了最终的镜像id。所有的中间步骤所产生的容器都被删除和清理了。需要注意的是,一个镜像是不能操作127层,否则会报错。

      当然Dockerfile中还可以输入其他的命令,例如可以使用ADD命令复制本地文件到镜像中;用EXPOSE命令对外开放端口;使用CMD命令描述容器启动后运行的程序。

     

      docker  images命令查看容器的标签信息,如果觉得不好看,可以使用docker tag命令来更改标签的名字。

     

    本地导入镜像:

    使用docker import命令进行导入

    例如下载了一个rarlinux-x64-5.3.0.tar.gz镜像文件,使用下列命令导入

    cat rarlinux-x64-5.3.0.tar.gz|docker import  - rarlinux:5.3

     可以看到导入完成后,docker为我们生成了一个镜像的ID,使用docker images也可以看到我们刚才导入的镜像。注意镜像文件必须是tar.gz类型的文件。

     上传镜像:用户可以通过docker push命令,把自己创建的镜像上传到仓库中共享。

     docker push rarlinux    #注意,上传到公有库时,需要注意上传的镜像名称,前面要加上github的注册账户名/软件仓库名。

    镜像的保存、载入、删除

    使用docker save命令,保存镜像到本地

    docker save -o rarlinux.tar.gz rarlinux

    使用docker load命令,将本地保存的镜像再次载入到docker中。

     docker load --input rarlinux.tar.gz

    或者  docker load <rarlinux.tar.gz

    docker镜像过时了,需要删除,使用docker rmi image_id

    docker容器的创建、启动和停止

    容器是独立运行的一个或一组应用,及他们的运行环境。容器是docker的一个重要概念。

    docker容器的启动有2种方式,

      a、基于镜像新建容器并启动

        例如我们可以启动一个容器,打印出当前的日历表

        docker run centos cal

        我们还可以通过指定参数,启动一个bash交互终端。

        docker run -t -i centos /bin/bash

       

      b、将在终止状态的容器重新启动

        可以使用docker start命令,直接将一个已经终止的容器启动运行起来。

        docker start mysql  

        docker stop  containerID

    2、守护态运行

      很多时候,我们希望容器在后台以守护态运行,此时可以添加-d参数来实现(daemon)例如我们启动centos后台容器,每隔一秒打印当天的日历。

      docker  run  -d  centos  /bin/bash  -c  "while true;do echo hello docker;sleep 1;done"

      启动之后,我们使用docker ps查看容器的信息

      要查看启动的centos容器的输出,可以使用docker  logs  containerID

    3、终止容器

     使用docker  stop来终止一个运行中的容器。并且可以使用docker  ps  -a来看终止状态的容器

      docker stop  containerID  #终止一个正在运行的容器

      

    使用docker run命令来启动容器,docker在后台运行的标准操作包括

        1、检查本地是否存在指定的镜像,不存在则从公有仓库下载

        2、使用镜像创建并启动容器

        3、分配一个文件系统,并在只读的镜像层外面挂载一层可读可写层

        4、从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去

        5、从地址池分配一个ip地址给容器

        6、执行用户指定的应用程序

        7、执行完毕之后容器被终止

  • 相关阅读:
    使用contentProvider
    创建Sqlite数据库(一)
    AIDL实现进程间通信
    Messenger实现进程间通信(IPC)
    Serializable使用
    Parcelable使用(二)
    STAR法则
    Python系列-------基本语法
    前端随心记---------面试题集
    前端随心记---------惟客科技面试
  • 原文地址:https://www.cnblogs.com/xiaofeng666/p/12250169.html
Copyright © 2011-2022 走看看