zoukankan      html  css  js  c++  java
  • Docker应用之容器

    容器是独立运行的一个或一组应用,以及他们的运行态环境

    1、启动容器(基于镜像新建一个容器并启动或将终止状态的容器重新启动)

    run后面添加--name参数可以指定容器的名称,否则系统默认会给名称;使用docker rename 原容器名称 新名称   来修改容器名称

    1)、新建一个容器并启动

    下面命令执行完命令后,容器立即终止

     docker run ubuntu:14.04 /bin/echo 'Hello World'

    下面命令进入一个交互型容器

    docker run -t -i ubuntu:14.04 /bin/bash

    其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开

    在交互模式下,用户可以通过所创建的终端来输入命令,如

    当利用docker run 来创建容器时,Docker在后台运行的标准操作包括

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

      利用镜像创建并启动一个容器

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

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

      从地址池配置一个IP地址给容器

      执行用户指定的应用程序

      执行完毕后容器被终止

    2)、使用docker start [容器或ID]命令启动一个终止的容器,这个还没有研究

    容器的核心是执行的应用程序,所需要的资源都是应用程序所必需的,没有其他无用的资源;在伪终端中可以使用ps或top命令查看进程信息(进程、进程)

    可见容器中只运行了指定的应用,这就是货真价实的轻量级虚拟化

    2、守护态运行,注意如果启动后的命令执行完,进程便关闭,-d只是后台运行,运行完就关闭

    如果不想让容器进程关闭,需要一直使用该进程,

    如下面例子,启动容器命令是docker run -d ubuntu:14.04,执行的命令是/bin/sh -c "while true;do echo hello world;sleep 1;done"

    命令中有while true语句,所以容器进程不会关闭,也就是下面查看logs就一直有hello world

    通过添加-d 参数来实现Docker容器在后台以守护态(Daemonized)形式运行

    docker run -d ubuntu:14.04 /bin/sh -c "while true;do echo hello world;sleep 1;done"

    后面的-c 是shell命令,执行后面的shell语句

    docker ps命令查看运行的容器

    使用docker logs 加上运行容器的名称,查看输出信息

    3、终止运行的容器,应用终结时,容器会终止,使用exit或Ctrl+d退出终端时,容器也会终止,使用docker stop命令也可以终止运行的容器

    docker ps -a 命令查看所有容器

    docker stop [容器名称或容器ID] 命令来终止运行的容器

    docker start [容器名称或容器ID] 命令可以启动已终止的容器(启动方式依据该容器创建时候方式)

    docker restart [容器名称或容器ID] 命令先终止后启动容器

    4、进入容器(docker attach命令或nsenter工具等)

    1)、docker attach命令,在多窗口同时attach到同一个容器的时候,所有窗口都会同步显示,当某个窗口因命令阻塞时,其他窗口也无法执行操作了

    2)、nsenter命令

    安装

    cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
    ./configure --without-ncurses
    make nsenter && cp nsenter /usr/local/bin

    其中有可能在configure时候会出现如下错误,那就需要安装所需插件

    使用

    nsenter可以访问另一个进程的名字空间,nsenter要正常工作需要root权限

     下面只举一个完整例子(获取PID方式还可以通过docker top [容器名或ID])

    $ sudo docker run -idt ubuntu
    243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550
    $ sudo docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    243c32535da7        ubuntu:latest       "/bin/bash"         18 seconds ago      Up 17 seconds                           nostalgic_hypatia
    $ PID=$(docker-pid 243c32535da7)
    10981
    $ sudo nsenter --target 10981 --mount --uts --ipc --net --pid
    root@243c32535da7:/#

    还可以使用docker-enter [容器名称或ID] shell命令 ,在容器内执行命令

    5、导入导出容器(区别于镜像的存储与载入,导入导出容器是操作容器快照;容器快照文件将丢弃所有历史记录和元数据信息,而镜像存储文件将保存完整记录,体积也大)

    1)、导出容器快照到本地,命令如下,docker export [容器名称或ID]

    docker export 5839832 >ubuntu.tar

    2)使用docker import 从容器快照导入为镜像,命令如下

    cat ubuntu.tar | docker import - test/ubuntu:v1.0

    docker import ubuntu.tar  test/ubuntu:v1.1

    也可以通过指定URL或某个目录来导入,如

    docker import http://example.com/exampleimage.tgz example/imagerepo

    注意:docker load 通过导入镜像存储文件到本地镜像库,也可以通过docker import 导入一个容器快照到本地镜像库;区别在于镜像存储文件包含完整记录,容器快照丢弃了所有历史记录和元数据

    6、删除容器

    删除一个终止的容器,命令如下,docker rm [容器名称或ID]

    docker rm 3ba302

    如果强制删除一个正在运行的容器,要加参数 -f

    docker rm -f 3ba302

     7、退出容器并关闭容器进程

    使用ctrl+d或exit命令

    8、退出容器但不关闭进程

    1)、使用ctrl+p,q或ctrl+p,ctrl+q

    2)、再开启一个当前运行容器的伪终端,那个容器一定是在运行中,然后执行退出后使用ctrl+d或exit,就会退出当前这个容器的使用exec启动的终端

    如果再次attach容器后使用ctrl+d或exit就会退出容器,关闭进程了,这种方法只能说是变相的实现

    docker exec是在系统中对正在运行的容器进行命令操作,可参考菜鸟教程

    docker exec -it [CONTAINER_NAME or CONTAINER_ID] /bin/bash

  • 相关阅读:
    links
    Thread Demo
    AngularJs 入门
    同步的数据过大,导致shareplex超时,并自动kill掉了同步会话
    shareplex三点同步配置
    (转)嵌入式学习准备---linux c 文件锁
    shareplex的安装&&起停服务(添加新用户)
    JDK的安装
    LVM的添加与删除
    linux__升级java版本
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/7147467.html
Copyright © 2011-2022 走看看