zoukankan      html  css  js  c++  java
  • Docker学习之3——容器

    容器(Container

    容器介绍: docker是通过容器来运行业务的,就像运行一个kvm虚拟机是一样的。容器其实就是从镜像创建的一个实例。 我们可以对容器进行增删改查,容器之间也是相互隔离的。和虚拟机最大的区别就是一个是虚拟的一个是隔离的。
    缺点:不会像虚拟机那样隔离的那么彻底,我们可以将容器理解为简化版的linux,有进程运行在里面。

    #创建容器
    Usage:  docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
    #新建并启动容器
    [root@controller ~]# docker run -t -i ubuntu:14.04 /bin/bash       
    root@55456b431849:/# 
    -t    分配一个伪终端
    -i    标准输入保持打开
    -d    守护进程运行
    root@55456b431849:/# ls          
    bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
    boot  etc  lib   media  opt  root  sbin  sys  usr
    root@55456b431849:/# pwd
    /
    root@55456b431849:/# cat /etc/issue
    Ubuntu 14.04.5 LTS 
     l
    root@55456b431849:/# exit 
    exit
    
    #终止容器
    Usage:  docker stop [OPTIONS] CONTAINER [CONTAINER...]
    #查看处于终止状态的容器
    [root@controller ~]# docker ps -a -q
    f69ef742b752
    be465c0dc442
    55456b431849
    #启动终止状态的容器
    [root@controller ~]# docker start f69ef742b752
    
    #进入容器
    Usage:  docker attach [OPTIONS] CONTAINER
    [root@controller ~]# docker run -idt ubuntu
    [root@controller ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    cc9870d0853f        ubuntu              "/bin/bash"         22 seconds ago      Up 21 seconds                           small_albattani
    [root@controller ~]# docker attach small_albattani
    root@cc9870d0853f:/# 
    
    Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    #一般情况下使用nsenter工具进入容器,安装工具
    [root@controller ~]# yum install -y util-linux
    [root@controller ~]# docker run --name dockercentos -tid centos
    9f228b6525d5a753fbda39b4a339ae3f8de5f26d6d85a56c006488f771b4f45b
    [root@controller ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    9f228b6525d5        centos              "/bin/bash"         10 seconds ago      Up 7 seconds                            dockercentos
    [root@controller ~]# docker inspect -f "{{ .State.Pid }}"  dockercentos
    85616
    [root@controller ~]# nsenter -t 85616 -m -u -i -n -p     
    [root@9f228b6525d5 /]# 
    
    docker inspect -f {{.State.Pid}}容器名或者容器id
    #每一个容器都有.State.Pid,所以这个命令除了容器的id需要我们根据docker ps -a去查找,其他的全部为固定的格式
    nsenter --target上面查到的进程id --mount --uts --ipc --net --pid #输入该命令便进入到容器中
    
    解释nsenter指令中进程id之后的参数的含义:
    
            * –mount参数是进去到mount namespace中
            * –uts参数是进入到uts namespace中
            * –ipc参数是进入到System V IPC namaspace中
            * –net参数是进入到network namespace中
            * –pid参数是进入到pid namespace中
            * –user参数是进入到user namespace中
    
    我们可以写个脚本:
    [root@controller ~]# cat IN_Docker.sh 
    #!/bin/sh
    if [ $# -ne 1 ]
            then
            echo $"usage:bash $0{dockername}"
            exit 1
    fi
    docker_in(){
    NAME_ID=$1
    PID=$(docker inspect -f "{{ .State.Pid }}" $NAME_ID)
    nsenter -t $PID -m -u -i -n -p
    }
    docker_in $1
    #运用
    [root@controller ~]# sh IN_Docker.sh dockercentos
    [root@9f228b6525d5 /]# 
    
    #删除容器
    
    docker rm -f 【NAMES】
    [root@controller ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
    9f228b6525d5        centos              "/bin/bash"              18 minutes ago      Up 18 minutes                                   dockercentos
    c5439518dcbe        ubuntu:14.04        "/bin/bash"              20 hours ago        Exited (0) 20 hours ago                         elegant_noyce
    2bb8a93f5d34        ubuntu              "echo 'hello I am ubu"   23 hours ago        Exited (0) 19 hours ago                         gigantic_heyrovsky
    [root@controller ~]# docker rm -f elegant_noyce
    elegant_noyce
    [root@controller ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
    9f228b6525d5        centos              "/bin/bash"              19 minutes ago      Up 19 minutes                                   dockercentos
    2bb8a93f5d34        ubuntu              "echo 'hello I am ubu"   23 hours ago        Exited (0) 19 hours ago                         gigantic_heyrovsky
    
    #导出容器
    [root@controller ~]# docker export dockercentos >test_dockercentos.tar
    [root@controller ~]# ls
    192.168.128.172     cd1.iso                         httpd.conf     pike.install.sh  test_dockercentos.tar            web.yml
    #导入容器
    [root@controller ~]# cat test_dockercentos.tar |docker import - docker/cents7.4
    

     小结:

      容器是直接提供应用服务的组件,实现快速启动停止和高效服务性能的基础,生产环境中可以在容器前端引入HaProxy代理容器访问,实现高可用。

  • 相关阅读:
    【乱侃】How do they look them ?
    【softeware】Messy code,some bug of Youdao notebook in EN win7
    【随谈】designing the login page of our project
    【web】Ad in security code, making good use of resource
    SQL数据库内存设置篇
    关系数据库的查询优化策略
    利用SQL未公开的存储过程实现分页
    sql语句总结
    sql中使用cmd命令注销登录用户
    SQLServer 分页存储过程
  • 原文地址:https://www.cnblogs.com/Dev0ps/p/7874082.html
Copyright © 2011-2022 走看看