美文网首页Docker
S1:管理你的容器

S1:管理你的容器

作者: 睦月MTK | 来源:发表于2020-01-06 14:51 被阅读0次

    声明:所有的实验示例大部分来自《learn-docker-in-a-month-of-lunches》的作者Elton Stoneman,但运行结果并不都是照搬,大部分实验结果可能与原书不同


    一、什么是容器,容器能够干什么
    • Q:容器是什么?
      A:容器就像是一个装着应用的箱子,这个箱子提供这个应用所需的一切环境,箱子与箱子之间是被隔离的,不会互相影响
    • Q:为什么要使用容器?
      A:对比一下同等作用的虚拟机,虚拟机虽然可以提供严格的虚拟环境,但是它要模拟的东西太多了,甚至包括系统,启动一个虚拟机可以达到几十秒,且对机器负担很大,一台机器能跑的虚拟机数量是非常有限的。而容器提供给应用的是一个恰巧合适的环境,能够最大节约主机资源。它的便携性也是容器的优点之一,如果你想要迁移你的项目到一台新的机器,除了docker之外,你不在需要在新机器上安装任何东西!
    • Q:容器能干什么?
      A:容器能够提供给你的应用一个虚拟的运行环境,能够提供一个隔离环境,能够轻而易举的迁移,解放你的双手,你再也不需要为了环境问题而苦恼半天!

    二、你的第一个容器Hello World
    $ docker container run hello-world
    

    分析一下运行结果:

    Unable to find image 'hello-world:latest' locally
    
    1. docker无法在本地找到名为hello-world的镜像。latest为版本号,指最新的那个版本
    latest: Pulling from library/hello-world
    1b930d010525: Pull complete                                                                                             
    Digest: sha256:d1668a9a1f5b42ed3f46b70b9cb7c88fd8bdc8a2d73509bb0041cf436018fbf5
    Status: Downloaded newer image for hello-world:latest
    
    1. docker从云端寻找并拉取hello-world镜像
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    
    1. docker根据hello-world镜像创建一个新的容器,容器根据设定的规则运行内部的程序,输出这些内容
    2. 应用执行完毕,容器被停止(没错!容器的生命完全是根据其内部的应用是否运行来决定的,应用运行完毕,则容器停止,只是停止并不是被销毁,停止的容器不消耗cpu和内存资源)
    三、创建一个交互式的容器(tty)
    $ docker container run --interactive --tty ubuntu /bin/bash
    root@22156c9dd304:/# ls
    bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@22156c9dd304:/# date
    Mon Jan  6 06:02:18 UTC 2020
    

    该命令会创建一个名为ubuntu的镜像,并运行命令/bin/bash,接下来你就可以像连接你的远端电脑一样,通过命令行来与你的容器进行交互了。

    四、查看你的容器
    • 查看运行中的容器
    $ docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    22156c9dd304        ubuntu              "/bin/bash"         13 seconds ago      Up 12 seconds                           objective_rosalind
    
    • 查看本机所有存在的容器
    $ docker container ls --all
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    22156c9dd304        ubuntu              "/bin/bash"         17 minutes ago      Up 17 minutes                                   objective_rosalind
    5d17fd059cf9        hello-world         "/hello"            2 hours ago         Exited (0) 2 hours ago                          gallant_mendel
    
    五、查看指定容器的进程状态、日志记录、详细状态、资源占用情况
    • 查看指定容器的进程状态(指定容器只需要容器Id的前几位字符就好,当然得唯一)
    $ docker container top 2215
    PID                 USER                TIME                COMMAND
    10478               root                0:00                /bin/bash
    
    • 查看指定容器的日志记录
    $ docker container logs 2215
    root@22156c9dd304:/#
    root@22156c9dd304:/# ls
    bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@22156c9dd304:/# date
    Mon Jan  6 06:02:18 UTC 2020
    
    • 查看指定容器的详细状态(只取前几行结果)
    $ docker container inspect 2215
    [
        {
            "Id": "22156c9dd304ee88a460b0ad4ebdab0da470759596729f1adb6406ec12721627",
            "Created": "2020-01-06T05:55:00.5832367Z",
            "Path": "/bin/bash",
            ...
    
    • 查看指定容器的资源占用情况
    $ docker container stats 2215
    
    六、运行一个简单的web应用容器
    $ docker container run --detach --publish 8000:8080 snmutsuki/bulletin_mtk:1.0
    

    解释:--detach 表示该容器将在后台运行,不会占用控制台,--publish表示将本机在8000端口接收到的消息转发给容器的8080端口(注意容器拥有自己网络环境,一般是与外界不通的,除非将端口发布出去,如本例一样)
    快打开浏览器输入地址localhost:8000看看结果吧~

    七、停止/删除容器
    • 停止运行中的容器
    $ docker container stop bbb
    
    • 移除指定容器(--force表示即使容器还在运行也强制移除)
    $ docker container rm --force bbb
    
    • 移除全部容器($()在linux shell和windows powershell中通用,务必加上--quiet选项,因为只需要容器id)
    $ docker container rm --force $(docker container ls --all --quiet)
    

    Congratulations!你已经对基本的容器管理有了一定的了解,下一节将会总结和镜像有关的内容,如果你觉得上述展示的命令太过简单,你也可以在命令后加上--help选项以获取更多帮助!


    参考文档:
    [1] learn-docker-in-a-month-of-lunches
    [2] 官方文档
    附:
    [1] Elton Stoneman的github项目

    相关文章

      网友评论

        本文标题:S1:管理你的容器

        本文链接:https://www.haomeiwen.com/subject/nvghactx.html