zoukankan      html  css  js  c++  java
  • Docker 从入门到放弃(二)容器使用

    Docker 容器使用

    一、Docker 客户端

    docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。

    复制代码
    root@iZ235mi4a64Z:~# docker
    
    Usage:    docker COMMAND
    
    A self-sufficient runtime for containers
    
    Options:
          --config string      Location of client config files (default "/root/.docker")
      -D, --debug              Enable debug mode
      -H, --host list          Daemon socket(s) to connect to
      -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
          --tls                Use TLS; implied by --tlsverify
          --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
          --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
          --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
          --tlsverify          Use TLS and verify the remote
      -v, --version            Print version information and quit
    
    Management Commands:
      config      Manage Docker configs
      container   Manage containers
      image       Manage images
    ...
    复制代码

    可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。  

    例如要查看 docker stats 指令的具体使用方法:

    复制代码
    root@iZ235mi4a64Z:~# docker stats --help
    
    Usage:    docker stats [OPTIONS] [CONTAINER...]
    
    Display a live stream of container(s) resource usage statistics
    
    Options:
      -a, --all             Show all containers (default shows just running)
          --format string   Pretty-print images using a Go template
          --no-stream       Disable streaming stats and only pull the first result
          --no-trunc        Do not truncate output
    复制代码

    二、运行一个web应用

    前面我们运行的容器并没有一些什么特别的用处。接下来让我们尝试使用 docker 构建一个 web 应用程序。我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。

    第一次使用,本地是没有镜像的,所有要下载远程仓库镜像

    参数说明:

    • -d:让容器在后台运行。

    • -P:将容器内部使用的网络端口映射到我们使用的主机上。

    复制代码
    root@iZ235mi4a64Z:~# docker run -d -P training/webapp python app.py
    Unable to find image 'training/webapp:latest' locally
    latest: Pulling from training/webapp
    e190868d63f8: Pull complete 
    909cd34c6fd7: Pull complete 
    0b9bfabab7c1: Pull complete 
    a3ed95caeb02: Pull complete 
    10bbbc0fc0ff: Pull complete 
    fca59b508e9f: Pull complete 
    e7ae2541b15b: Pull complete 
    9dd97ef58ce9: Pull complete 
    a4c1b0cb7af7: Pull complete 
    Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
    Status: Downloaded newer image for training/webapp:latest
    d83ffc50991fabc9aedee521be91329048bf0f17b4ca3f90cf20b63209cfbdd2
    root@iZ235mi4a64Z:~# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    d83ffc50991f        training/webapp     "python app.py"     8 minutes ago       Up 8 minutes        0.0.0.0:32768->5000/tcp   adoring_jackson
    复制代码

    下载好后会默认启动该容器

    三、查看 WEB 应用容器

    使用 docker ps 来查看我们正在运行的容器

    root@iZ235mi4a64Z:~# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    d83ffc50991f        training/webapp     "python app.py"     8 minutes ago       Up 8 minutes        0.0.0.0:32768->5000/tcp   adoring_jackson

    Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。 这时我们可以通过浏览器访问WEB应用

    我们也可以指定 -p 标识来绑定指定端口

    复制代码
    root@iZ235mi4a64Z:~# docker run -d -p 5000:5000 training/webapp python app.py
    ebdeda041b1e97850337c8a514dd7163db740a8eb82e8b7270402095a6368fa2
    root@iZ235mi4a64Z:~# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    ebdeda041b1e        training/webapp     "python app.py"     5 seconds ago       Up 3 seconds        0.0.0.0:5000->5000/tcp    condescending_austin
    d83ffc50991f        training/webapp     "python app.py"     16 minutes ago      Up 16 minutes       0.0.0.0:32768->5000/tcp   adoring_jackson
    root@iZ235mi4a64Z:~# curl http://127.0.0.1:5000
    Hello world!
    复制代码

    容器内部的 5000 端口映射到我们本地主机的 5000 端口上

    四、网络端口的快捷方式

    通过docker ps 命令可以查看到容器的端口映射,docker还提供了另一个快捷方式:docker port,使用 docker port 可以查看指定 (ID或者名字)容器的某个确定端口映射到宿主机的端口号。

    上面创建的web应用容器ID为:d83ffc50991f  名字为:adoring_jackson

    可以使用docker port 7a38a1ad55c6 或docker port determined_swanson来查看容器端口的映射情况

    root@iZ235mi4a64Z:~# docker port d83ffc50991f
    5000/tcp -> 0.0.0.0:32768
    root@iZ235mi4a64Z:~# docker port adoring_jackson
    5000/tcp -> 0.0.0.0:32768

    五、查看WEB应用程序日志

    docker logs [ID或者名字] 可以查看容器内部的标准输出。

    复制代码
    root@iZ235mi4a64Z:~# docker logs -f d83ffc50991f
     * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
    192.168.0.1 - - [05/Dec/2017 02:00:32] "GET / HTTP/1.1" 200 -
    192.168.0.1 - - [05/Dec/2017 02:01:55] "GET / HTTP/1.1" 200 -
    192.168.0.1 - - [05/Dec/2017 02:02:11] "GET / HTTP/1.1" 200 -
    192.168.0.1 - - [05/Dec/2017 02:02:18] "GET / HTTP/1.1" 200 -
    192.168.0.1 - - [05/Dec/2017 02:02:23] "GET / HTTP/1.1" 200 -
    复制代码

    -f:让 dokcer logs 像使用 tail -f 一样来输出容器内部的标准输出。

    从上面,可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。

    六、查看WEB应用程序容器的进程

    可以使用 docker top 来查看容器内部运行的进程

    root@iZ235mi4a64Z:~# docker top 1c0efc43c0e5
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                25066               25050               0                   10:19               ?                   00:00:00            python app.py

    七、检查WEB应用程序

    使用 docker inspect 来查看Docker的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

    复制代码
    root@iZ235mi4a64Z:~# docker inspect 1c0efc43c0e5
    [
        {
            "Id": "1c0efc43c0e5207b6eaa63270834562a5193820436ba80de3fdd8dfa1b77c764",
            "Created": "2017-12-05T02:19:12.557365261Z",
            "Path": "python",
            "Args": [
                "app.py"
            ],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 25066,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2017-12-05T02:19:12.913440347Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:6fae60ef344644649a39240b94d73b8ba9c67f898ede85cf8e947a887b3e6557",
            "ResolvConfPath": "/var/lib/docker/containers/1c0efc43c0e5207b6eaa63270834562a5193820436ba80de3fdd8dfa1b77c764/resolv.conf",
    ...
    复制代码

    八、停止、重启WEB应用容器

    复制代码
    root@iZ235mi4a64Z:~# docker stop relaxed_jones
    relaxed_jones
    root@iZ235mi4a64Z:~# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    root@iZ235mi4a64Z:~# docker start relaxed_jones
    relaxed_jones
    root@iZ235mi4a64Z:~# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    1c0efc43c0e5        training/webapp     "python app.py"     6 minutes ago       Up 2 seconds        0.0.0.0:32770->5000/tcp   relaxed_jones
    复制代码

    docker ps -l 查询最后一次创建的容器:

    root@iZ235mi4a64Z:~# docker ps -l
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    1c0efc43c0e5        training/webapp     "python app.py"     6 minutes ago       Up 47 seconds       0.0.0.0:32770->5000/tcp   relaxed_jones

    九、移除WEB应用容器

    使用 docker rm 命令来删除不需要的容器,删除容器时,容器必须是停止状态,否则会报如下错误

    root@iZ235mi4a64Z:~# docker rm relaxed_jones
    Error response from daemon: You cannot remove a running container 1c0efc43c0e5207b6eaa63270834562a5193820436ba80de3fdd8dfa1b77c764. Stop the container before attempting removal or force remove

    先停止后删除

    root@iZ235mi4a64Z:~# docker stop relaxed_jones
    relaxed_jones
    root@iZ235mi4a64Z:~# docker rm relaxed_jones
    relaxed_jones

     

  • 相关阅读:
    2013.4.15 Particle Swarm Optimization with Skyline Operator for Fast Cloudbased Web Service Composition
    Adaptive service composition in flexible processes
    2013.4.13 DomainSpecific Service Selection for Composite Services
    2013.4.14 Modeling and Algorithms for QoSAware Service Composition in VirtualizationBased Cloud Computing
    2013.5.29 Towards Networkaware Service Composition in the Cloud
    Efficient algorithms for Web services selection with endtoend QoS constraints
    SQL Server中常用的SQL语句
    接口限流自定义注解
    linux服务器生产环境搭建
    MVEL自定义函数重复掉用报错:duplicate function
  • 原文地址:https://www.cnblogs.com/caodneg7/p/10061241.html
Copyright © 2011-2022 走看看