zoukankan      html  css  js  c++  java
  • Docker容器的简单使用

    1. docker的使用

    1> 创建容器

      创建并启动容器: docker run -it -name 容器名 镜像: 版本  /bin/sh(bash)

      创建并不启动容器:docker create -it 镜像:版本

      -t:分配一个伪终端

      -i:让容器的标准输入持续打开

      用/bin/bash(sh)环境显示

    2> 查看容器

      查看运行的容器:docker ps

      查看所有的容器:docker ps -a

    3> 启动/停止/重启容器

      格式:docker start/stop/restart  name/ID

    4> 运行一个容器

      格式:docker run -it -name 容器名 镜像: 版本  /bin/sh

    5> 退出一个容器

      Ctrl+D或者exit:退出,并且容器也停止、退出

      Ctrl+Q+P:退出容器,并保持容器的up状态

    6> 以后台守护进程的形态运行容器

      用-d参数实现。后台守护进程,而不是进入交互界面

    [root@alph ~]# docker run -it centos:6
    [root@59e925dd9229 /]# exit
    exit
    [root@alph ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
    59e925dd9229        centos:6            "/bin/bash"         18 seconds ago      Exited (0) 8 seconds ago                       amazing_mcclintock
    [root@alph ~]# docker run -itd centos:6
    212603201c70a9f6e353d99ec396dec15e0a93cf194c3ae9ac281404537f2a69
    [root@alph ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    212603201c70        centos:6            "/bin/bash"         8 seconds ago       Up 8 seconds                            clever_hypatia

      然后再利用exec命令进入容器,此时退出容器后容器还是运行的状态。

    [root@alph ~]# docker exec -it 212603201c70 /bin/sh
    sh-4.1# exit
    exit
    [root@alph ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    212603201c70        centos:6            "/bin/bash"         5 minutes ago       Up 5 minutes                            clever_hypatia

    因此,若要容器持续是up的状态,运行容器时加-d即可。

     

    7> 删除容器

      格式:docker rm opinion name/id

    opinion

      -f  强制删除处于运行中的容器

      -l  删除链接,保留容器

      -v 删除挂载的数据卷

    8> 进入容器

      docker attach:直接进入容器,启用命令终端,不会启用新的进程

      docker exec:进入容器,在容器中打开新的终端,并且可以启动新的进程

    先在后台运行个容器
    [root@alph ~]# docker run -d centos:6 /bin/bash -c "while true; do sleep 1;echo I_am_docker;done"              #-c表示执行命令
    f8ed47920be073a4f1740cb2a50d9ce929b9bee8a242680f6efa1d567631f232
     
    先用attach命令进容器查看
    [root@alph ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    f8ed47920be0        centos:6            "/bin/bash -c 'while…"   50 seconds ago      Up 49 seconds                           dreamy_darwin
    [root@alph ~]# docker attach f8ed47920be0
    I_am_docker
    I_am_docker
    I_am_docker
    .......                                     #一直在隔一秒打印
    
    
    再用exec命令进入容器
    [root@alph ~]# docker exec -it f8ed47920be0 /bin/sh
    sh-4.1#                                     #新建一个终端
    sh-4.1#
    sh-4.1#
    sh-4.1#
    [root@alph ~]# docker stop  f8ed47920be0
    f8ed47920be0

    9> 导入和导出容器

    导出容器:导出一个已经创建的容器到文件,不管容器是否运行

            格式:docker export ID > *.tar

    将容器导入系统成为镜像

            格式:cat *.tar | docker import - 镜像名

       导入和导出容器命令不常用,常用的是导入和导出镜像的命令 docker save- o / load -i

    10> 查看容器的日志

      格式:docker logs -f name/id

    11> 暂停容器

      格式:docker pause name/id

    12> 取消暂停继续运行容器

      格式:docker unpause name/id

    命令

    功能

    create

    创建容器

    run

    运行容器

    pause

    暂停容器

    unpause

    取消暂停继续运行容器

    stop

    发送 SIGTERM 停止容器 

    kill

    发送 SIGKILL 快速停止容器 

    start

    启动容器

    restart

    重启容器

    attach

    attach 到容器启动进程的终端

    exec

    在容器中启动新进程,通常使用 "-it" 参数 

    logs

    显示容器启动进程的控制台输出,用 "-f" 持续打印 

    rm

    从磁盘中删除容器

    2. docker镜像仓库

      仓库(repos-registory)分为公共仓库和私有仓库。

      DockerHub的官方仓库:https://hub.docker.com

      DockerPool社区仓库:https://dl.dockerpool.com

      Dockern Pool (http://dockerpool.com)是国内专业的Docker社区,目前也提供了官方镜像的下载管理服务。

     1> 创建私有仓库

    启动registry

    [root@alph ~]# docker run -d -p 5000:5000 -v /var/lib/registry:/var/lib/registry --restart=always --name registry registry:2
    ba0c8ab2161308130fb69f9e1b2b25f4669514bcd1245dc5d6e15dc40a75f74c    #-p表示指定端口映射,-v表示一个目录映射,一直保持重启指定容器名字为registry,指定镜像:id
    [root@alph ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    ba0c8ab21613        registry:2          "/entrypoint.sh /etc…"   3 minutes ago       Up 3 minutes        0.0.0.0:5000->5000/tcp   registry

    配置客户端

    修改配置文件将私有库加入进去

    当用yum安装的,修改配置文件/etc/sysconfig/docker
    vim /etc/sysconfig/docker
    line 4: add Docker-Registry's URL
    OPTIONS='--insecure-registry 192.168.210.128:5000
    --selinux-enabled --log-driver=journald.....'
    以二进制安装的docker,修改文件/etc/docker/daemon.json
    [root@my_zx ~]# cd /etc/docker/
    [root@my_zx docker]# ls
    certs.d  daemon.json  key.json
    [root@my_zx docker]# vim daemon.json
    {
      "registry-mirrors": ["http://cc83932c.m.daocloud.io"],
      "insecure-registries": ["192.168.16.88:5000"],            #加入该行,写入仓库来源地址
      "max-concurrent-downloads": 10,
      "log-driver": "json-file",
      "log-level": "warn",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
        }
    }

    重启客户端,并查看客户端镜像

    [root@my_zx docker]# systemctl restart docker
    [root@my_zx docker]# docker images                 #暂时没有镜像
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

    在服务端将镜像文件导出然后发送给客户端实现镜像的共享

    [root@alph ~]# docker save -o registry.tar.gz registry:2
    [root@alph ~]# ls
    anaconda-ks.cfg  doc_file  docker  registry.tar.gz  yum-repo.sh
    [root@alph ~]# scp registry.tar.gz 192.168.16.8:/root
    [root@my_zx ~]# docker load -i registry.tar.gz
    [root@my_zx ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             latest              e4db68de4ff2        3 weeks ago         1.22MB
    registry            2                   f32a97de94e1        4 months ago        25.8MB

    准备将镜像busybox上传至私有仓库

           先将镜像busybox重命名。镜像名前面加上地址和5000端口,以免上传至docker镜像官网。

    [root@my_zx ~]# docker tag busybox:latest  192.168.16.88:5000/busybox:latest 

    然后将镜像上传至私有仓库

    [root@my_zx ~]# docker push 192.168.16.88:5000/busybox:latest
    The push refers to repository [192.168.16.88:5000/busybox]
    6194458b07fc: Pushed
    latest: digest: sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff size: 527

    测试是否能从私有仓库下载该镜像,先删除原镜像,再下载镜像

    [root@my_zx ~]# docker rmi -f  e4db68de4ff2
    [root@my_zx ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    registry            2                   f32a97de94e1        4 months ago        25.8MB
    [root@my_zx ~]# docker pull 192.168.16.88:5000/busybox:latest
    [root@my_zx ~]# docker images
    REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
    192.168.16.88:5000/busybox   latest              e4db68de4ff2        3 weeks ago         1.22MB
    registry                     2                   f32a97de94e1        4 months ago        25.8MB

    3. docker底层依赖核心技术

      1)        命名空间 (Namespaces)

      2)        控制组 (Control Groups)

      3)        联合文件系统 (Union File System)

      4)        Linux 虚拟网络支持:本地和容器内创建虚拟接口

    (1)命名空间 (Namespaces):实现了容器间资源的隔离

      每个容器拥有自己独立的命名空间 , 运行其中的应用就像是运行在独立的操作系统中一样 , 我们都可以看到文件系统,网卡等资源保证了容器之间互不影响,namesaces管理进程号 , 每个进程命名空间有一套自己的进程号管理方法 , 进程命名空间是一个父子关系的结构 , 子空间中的进程对于父空间是可见的。

      网络命名空间—有了 PID 命名空间 , 那么每个名字中的进程就可以相互隔离 , 但是 , 网络端口还是共享本地的端口 . 网络命名空间就是为进程提供一个完全独立的网络协议栈的视图,包括 : 网络设备接口 ,IPv4 和 IPv6 协议栈 ,IP 路由表 , 防火墙规则 ,sockets 等等。

     

    目前容器所使用的命名空间提供5种不同的类型 :

    (2)控制组功能 cgroups:

      控制组 (Control groups)--CGroups 是 Linux 内核的一个特性 ,主要用来对共享资源进行隔离、限制、审计等 。cgroups 允许对于进程或进程组公平 ( 不公平 ) 的分配 CPU 时间、内存分配和 I/O 带宽。

      容器通过 cgroups 来得到所能够管理资源的分配和使用。因此容器所获得资源仅为所有系统资源的一个部分。

    Ÿ      资源限制 : 内存子系统为进程组设置内存使用上限,内存达到上限后再申请内存,就会发 出 Out of Memory

        优先级 : 通过优先级让一些组得到更多 CPU 等资源

    Ÿ      资源审计 : 用来统计系统上实际把多少资源用到适合的目的上 , 可以使用 cpuacct 子系统记录某个进程组使用的 CPU 时间

    Ÿ      隔离 : 为组隔离名字空间 , 这样一个组不会看到其他组的进程 .网络连接和文件系统

    Ÿ      控制 : 挂起 . 恢复和启动等操作

  • 相关阅读:
    <Ajax> 四. get请求(验证用户名是否存在)
    <Ajax> 三. 前端和后端通过表单数据交互
    <Ajax> 一. PHP基本使用和基本数据类型
    <Ajax> 二. PHP选择语句和循环语句
    <Bootstrap> 学习笔记八. 导航栏和颁
    <Bootstrap> 学习笔记七. 下拉菜单和标签页
    <Bootstrap> 学习笔记六. 栅格系统使用案例
    <Bootstrap> 学习笔记五. 按钮组的使用
    <Bootstrap> 学习笔记三. 浮动的使用
    <Bootstrap> 学习笔记四. 表单组和输入框组的使用
  • 原文地址:https://www.cnblogs.com/ajunyu/p/11213200.html
Copyright © 2011-2022 走看看