Docker

S1:管理你的容器

2020-01-06  本文已影响0人  睦月MTK

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


一、什么是容器,容器能够干什么

二、你的第一个容器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
五、查看指定容器的进程状态、日志记录、详细状态、资源占用情况
$ 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
$ docker container rm --force bbb
$ docker container rm --force $(docker container ls --all --quiet)

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


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

上一篇 下一篇

猜你喜欢

热点阅读