Docker基础之六: Docker基础命令

容器相关的命令

(对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。)

在上例中,我们用3种方式运行了容器,在上节中我们学习了:

  • docker ps : 查看容器列表
  • docker logs:查看容器的日志
  • docker stop:停止容器 在本节中,我们将通过事例来熟悉一些其他的docker命令,并学习docker client。

1 Docker Client

Docker Client和Docker Daemon实际使用的是同一个二进制程序,通过docker --help命令可以直接查看docker的所有命令及选项:

查看docker可执行程序的路径:

root@shev:~# which docker
/usr/bin/docker

docker命令的帮助信息:

root@shev:~# docker --help
Usage: docker [OPTIONS] COMMAND [arg...]
       docker daemon [ --help | ... ]
       docker [ --help | -v | --version ]

A self-sufficient runtime for containers.

Options:

  --config=~/.docker                 Location of client config files
  -D, --debug=false                  Enable debug mode
  --disable-legacy-registry=false    Do not contact legacy registries
  -H, --host=[]                      Daemon socket(s) to connect to
  -h, --help=false                   Print usage
  -l, --log-level=info               Set the logging level
  --tls=false                        Use TLS; implied by --tlsverify
  --tlscacert=~/.docker/ca.pem       Trust certs signed only by this CA
  --tlscert=~/.docker/cert.pem       Path to TLS certificate file
  --tlskey=~/.docker/key.pem         Path to TLS key file
  --tlsverify=false                  Use TLS and verify the remote
  -v, --version=false                Print version information and quit

Commands:
    attach    Attach to a running container
    build     Build an image from a Dockerfile
    commit    Create a new image from a container's changes
    cp        Copy files/folders between a container and the local filesystem
    create    Create a new container
    diff      Inspect changes on a container's filesystem
    events    Get real time events from the server
    exec      Run a command in a running container
    export    Export a container's filesystem as a tar archive
    history   Show the history of an image
    images    List images
    import    Import the contents from a tarball to create a filesystem image
    info      Display system-wide information
    inspect   Return low-level information on a container or image
    kill      Kill a running container
    load      Load an image from a tar archive or STDIN
    login     Register or log in to a Docker registry
    logout    Log out from a Docker registry
    logs      Fetch the logs of a container
    network   Manage Docker networks
    pause     Pause all processes within a container
    port      List port mappings or a specific mapping for the CONTAINER
    ps        List containers
    pull      Pull an image or a repository from a registry
    push      Push an image or a repository to a registry
    rename    Rename a container
    restart   Restart a container
    rm        Remove one or more containers
    rmi       Remove one or more images
    run       Run a command in a new container
    save      Save an image(s) to a tar archive
    search    Search the Docker Hub for images
    start     Start one or more stopped containers
    stats     Display a live stream of container(s) resource usage statistics
    stop      Stop a running container
    tag       Tag an image into a repository
    top       Display the running processes of a container
    unpause   Unpause all processes within a container
    version   Show the Docker version information
    volume    Manage Docker volumes
    wait      Block until a container stops, then print its exit code

Run 'docker COMMAND --help' for more information on a command.

具体的含义,我们在日后再一一讲解。我们先关注头几行:

Usage: docker [OPTIONS] COMMAND [arg...]
       docker daemon [ --help | ... ]
       docker [ --help | -v | --version ]

剖析:

  • 第一行实际是docker client的语法格式,它接收OPTIONS参数,并跟一个COMMAND,之后紧跟该命令对应的参数
  • 第二行实际是docker daemon的语法格式,有兴趣的朋友可以通过docker daemon –help进行查看
  • 第三行就是docker client的帮助,有需要都可以执行并查看。

一个我们经常用的查看docker版本信息的命令:

root@shev:~# docker version
Client:
 Version:      1.9.0
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   76d6bc9
 Built:        Tue Nov  3 17:43:42 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.0
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   76d6bc9
 Built:        Tue Nov  3 17:43:42 UTC 2015
 OS/Arch:      linux/amd64

这个命令会列出当前docker的client和server的基本信息.

2 通过容器来运行web应用

容器可以运行任何程序,那么一个主要的用途就是运行web应用,并对外提供服务,下面我们就用官方的一个例子来进行演示:

2.1 启动容器

root@shev:~# docker run -d -P training/webapp python app.py
Unable to find image 'training/webapp:latest' locally
latest: Pulling from training/webapp
2880a3395ede: Pull complete
515565c29c94: Pulling fs layer
98b15185dba7: Pulling fs layer
2ce633e3e9c9: Verifying Checksum
2ee0b8f351f7: Download complete
2505b734adda: Downloading [=====================>                             ] 8.732 MB/20.71 MB
20dd0c759013: Downloading [>                                                  ] 515.2 kB/50.25 MB
f95ebd363bf2: Verifying Checksum
1952e3bf3d7e: Download complete
abb991a4ed5e: Download complete
7cbae6914197: Pulling fs layer
f74dd040041e: Pulling fs layer
54bb4e8718e8: Download complete
Pulling repository docker.io/training/webapp
02a8815912ca: Download complete
e9e06b06e14c: Download complete
a82efea989f9: Download complete
37bea4ee0c81: Download complete
07f8e8c5e660: Download complete
23f0158a1fbe: Download complete
0a4852b23749: Download complete
7d0ff9745632: Download complete
99b0d955e85d: Download complete
33e109f2ff13: Download complete
cc06fd877d54: Download complete
b1ae241d644a: Download complete
b37deb56df95: Download complete
Status: Downloaded newer image for training/webapp:latest
docker.io/training/webapp: this image was pulled from a legacy registry.  Important: This registry version will not be supported in future versions of docker.
7736775bd89f6d0373b7a6c39a91126d156d9b0ce5467c30f0275506e012be4e

我们查看一下程序是否启动:

root@shev:~# docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                     NAMES
7736775bd89f        training/webapp                "python app.py"          9 minutes ago       Up 9 minutes        0.0.0.0:32768->5000/tcp   agitated_poitras
e221abf45a0b        ghostcloud.cn:5000/gcali:1.2   "/usr/local/ghostclou"   About an hour ago   Up About an hour                              gcsagent

剖析:

  • 我们从Docker Hub拉取了training用户下的webapp的最新版本,然后用python执行app.py
  • 我们的启动参数包括:-d 在后台运行,-P导出容器需要导出的端口,由于Docker Hub在国外,因此拉取的时间可能会有点长,但是一旦本地有了镜像,之后就会很快了。
  • 通过ps 命令,我们可以看到主机的32768端口映射到了容器的5000端口

2.2 访问网页

我们通过主机的32768端口进行访问: 

2.3 查看容器的端口导出情况

root@shev:~# docker port 7736
5000/tcp -> 0.0.0.0:32768

2.4 查看容器的运行日志

root@shev:~# docker logs -f 7736
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.0.103 - - [02/Dec/2015 10:03:07] "GET / HTTP/1.1" 200 -
192.168.0.103 - - [02/Dec/2015 10:03:07] "GET /favicon.ico HTTP/1.1" 404 -
192.168.0.103 - - [02/Dec/2015 10:08:11] "GET / HTTP/1.1" 200 -

剖析:

  • -f会一直绑定到容器的标准输出上,不带-f时,运行后命令立刻就会退出
  • 运行完logs –f后,我们访问网页时,就会在命令行里面显示日志

2.5 查看容器中的进程信息

root@shev:~# docker top 7736
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                5115                4051                0                   17:53               ?                   00:00:00            python app.py

2.6 查看容器的详细信息

root@shev:~# docker inspect 7736
[
{
    "Id": "7736775bd89f6d0373b7a6c39a91126d156d9b0ce5467c30f0275506e012be4e",
    "Created": "2015-12-02T09:53:41.35592583Z",
    "Path": "python",
    "Args": [
        "app.py"
    ],
    "State": {
        "Status": "running",
        "Running": true,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 5115,
        "ExitCode": 0,
        "Error": "",
        "StartedAt": "2015-12-02T09:53:41.62798274Z",
        "FinishedAt": "0001-01-01T00:00:00Z"
    },
    "Image": "02a8815912ca800f99b7d912485e8c618260e27c6de8d7a161b356b322d5c121",
    "ResolvConfPath": "/var/lib/docker/containers/7736775bd89f6d0373b7a6c39a91126d156d9b0ce5467c30f0275506e012be4e/resolv.conf",
    "HostnamePath": "/var/lib/docker/containers/7736775bd89f6d0373b7a6c39a91126d156d9b0ce5467c30f0275506e012be4e/hostname",
    "HostsPath": "/var/lib/docker/containers/7736775bd89f6d0373b7a6c39a91126d156d9b0ce5467c30f0275506e012be4e/hosts",
    "LogPath": "/var/lib/docker/containers/7736775bd89f6d0373b7a6c39a91126d156d9b0ce5467c30f0275506e012be4e/7736775bd89f6d0373b7a6c39a91126d156d9b0ce5467c30f0275506e012be4e-json.log",
    "Name": "/agitated_poitras",
    "RestartCount": 0,
    "Driver": "aufs",
    "ExecDriver": "native-0.2",
    "MountLabel": "",
    "ProcessLabel": "",
    "AppArmorProfile": "",
    "ExecIDs": null,
    "HostConfig": {
        "Binds": null,
        "ContainerIDFile": "",
        "LxcConf": [],
        "Memory": 0,
        "MemoryReservation": 0,
        "MemorySwap": 0,
        "KernelMemory": 0,
        "CpuShares": 0,
        "CpuPeriod": 0,
        "CpusetCpus": "",
        "CpusetMems": "",
        "CpuQuota": 0,
        "BlkioWeight": 0,
        "OomKillDisable": false,
        "MemorySwappiness": -1,
        "Privileged": false,
        "PortBindings": {},
        "Links": null,
        "PublishAllPorts": true,
        "Dns": null,
        "DnsOptions": null,
        "DnsSearch": null,
        "ExtraHosts": null,
        "VolumesFrom": null,
        "Devices": [],
        "NetworkMode": "default",
        "IpcMode": "",
        "PidMode": "",
        "UTSMode": "",
        "CapAdd": null,
        "CapDrop": null,
        "GroupAdd": null,
        "RestartPolicy": {
            "Name": "no",
            "MaximumRetryCount": 0
        },
        "SecurityOpt": null,
        "ReadonlyRootfs": false,
        "Ulimits": null,
        "LogConfig": {
            "Type": "json-file",
            "Config": {}
        },
        "CgroupParent": "",
        "ConsoleSize": [
            0,
            0
        ],
        "VolumeDriver": ""
    },
    "GraphDriver": {
        "Name": "aufs",
        "Data": null
    },
    "Mounts": [],
    "Config": {
        "Hostname": "7736775bd89f",
        "Domainname": "",
        "User": "",
        "AttachStdin": false,
        "AttachStdout": false,
        "AttachStderr": false,
        "ExposedPorts": {
            "5000/tcp": {}
        },
        "Tty": false,
        "OpenStdin": false,
        "StdinOnce": false,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "Cmd": [
            "python",
            "app.py"
        ],
        "Image": "training/webapp",
        "Volumes": null,
        "WorkingDir": "/opt/webapp",
        "Entrypoint": null,
        "OnBuild": null,
        "Labels": {},
        "StopSignal": "SIGTERM"
    },
    "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "02c2de9e7171ed418869e53297b0b1956052be67d2c9c4c75f99829fff646fdd",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "5000/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "32768"
                }
            ]
        },
        "SandboxKey": "/var/run/docker/netns/02c2de9e7171",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "f623f99d87ec63cc3bfdc024886d24d40bd1cf1771e249951133a7c66424d6e9",
        "Gateway": "172.17.0.1",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "172.17.0.2",
        "IPPrefixLen": 16,
        "IPv6Gateway": "",
        "MacAddress": "02:42:ac:11:00:02",
        "Networks": {
            "bridge": {
                "EndpointID": "f623f99d87ec63cc3bfdc024886d24d40bd1cf1771e249951133a7c66424d6e9",
                "Gateway": "172.17.0.1",
                "IPAddress": "172.17.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "MacAddress": "02:42:ac:11:00:02"
            }
        }
    }
}
]

2.7 停止并重启容器

root@shev:~# docker stop 7736

7736
root@shev:~#
root@shev:~# docker start 7736
7736
root@shev:~# docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                     NAMES
7736775bd89f        training/webapp                "python app.py"          25 minutes ago      Up 2 seconds        0.0.0.0:32769->5000/tcp   agitated_poitras

注意:容器的在主机上的映射端口变成了32769,原因是我们没有指定主机的端口。

2.8 指定主机和容器的端口映射

root@shev:~# docker run -d -p 80:5000 training/webapp python app.py
54132a474d29d44a7fc6431184ae1c1c77b4c8fb31975d477aab73647a008837

root@shev:~# docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                     NAMES
54132a474d29        training/webapp                "python app.py"          3 seconds ago       Up 2 seconds        0.0.0.0:80->5000/tcp      grave_williams

剖析:

  • 通过-p 参数可以指定端口映射,通过-P则是随机分配
  • 由于我们导出主机的80端口,因此我们再次访问网页的时候,可以不需要指定端口: 

是不是眼前一亮,是的,我们可以将我们的网页直接运行在容器里面! 想象一下,你拥有一台云主机……

时间: 2024-08-29 05:16:01

Docker基础之六: Docker基础命令的相关文章

基础的 Docker 容器网络命令

各位好,今天我们将学习一些Docker容器的基础命令.Docker 是一个开源项目,提供了一个可以打包.装载和运行任何应用的轻量级容器的开放平台.它没有语言支持.框架和打包系统的限制,从小型的家用电脑到高端服务器,在何时何地都可以运行.它可以使部署和扩展web应用程序.数据库和后端服务像搭积木一样容易,而不依赖特定技术栈或提供商.Docker适用于网络环境,它正应用于数据中心.ISP和越来越多的网络服务. 因此,这里有一些你在管理Docker容器的时候会用到的一些命令. 1. 找到Docker接

Docker基础之一: Docker架构

Docker的架构 Docker使用的是 C-S架构.Docker的客户端同Docker Daemon进行交互,其中主要的工作是通过 daemon来完成,包括拉取镜像,编译镜像,运行容器,发布容器等.Docker client和daemon可以运行在同一个系统上,也可以通过远程方式进行访问.Docker client和daemon之间是在 socket 上通过RESTful API来进行交互的.  Docker Daemon 如上图所示,Docker daemon运行在一个主机之上,用户并不是直

《循序渐进学Docker》——第一部分 Part 1 基础篇 第1章 全面认识Docker 1.1 Docker是什么

第一部分 Part 1 基 础 篇 第1章 全面认识Docker 第2章 初步体验Docker 第3章 Ubuntu下使用Docker 第4章 Docker的基础知识 第1章 全面认识Docker 欢迎来到Docker的世界. Docker,Golang社区杀手级的应用,是Github上最活跃的项目之一,也是开源社区最受欢迎的项目. Docker,号称要成为所有云应用的基石,并把互联网升级到下一代. 开发.测试.运维人员看到Docker,都激动地说:"太好了,这正是我所需要的!" Do

Docker安装和基础用法 Docker入门教程第二篇_docker

本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 1. 安装 1.1 在 Ubuntu 14.04 上安装 Docker 前提要求: 内核版本必须是3.10或者以上 依次执行下面的步骤: sudo apt-get update sudo apt

Docker基础之四: Docker入门

Docker入门 (对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面.) 首先我们检查docker是否安装成功: root@gctest:~# docker info Containers: 3 Images: 18 Server Version: 1.9.0 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs:

你必须了解的基础的Linux网络命令

摘要:有抱负的 Linux 系统管理员和 Linux 狂热者必须知道的.最重要的.而且基础的 Linux 网络命令合集. 在 It's FOSS 我们并非每天都谈论 Linux 的"命令行方面".基本上,我更专注于 Linux 的桌面端.但你们读者中的一些人在内部调查(仅面向 It's FOSS newsletter 订阅者)中指出,你们也想学些命令行技巧.速查表也受大部分读者所喜欢和支持. 为此,我编辑了一个 Linux 中基础网络命令的列表.它并不是一个教你如何使用这些命令的教程,

你必须了解的基础的 Linux 网络命令

23在 It's FOSS 我们并非每天都谈论 Linux 的"命令行方面".基本上,我更专注于 Linux 的桌面端.但你们读者中的一些人在内部调查(仅面向 It's FOSS newsletter 订阅者)中指出,你们也想学些命令行技巧.速查表也受大部分读者所喜欢和支持. 为此,我编辑了一个 Linux 中基础网络命令的列表.它并不是一个教你如何使用这些命令的教程,而是一个命令合集和他们的简短解释.所以,如果你已经使用过这些命令,你可以用它来快速记住命令. 你可以把这个网页添加为书

详解修改docker时区及docker常用命令_docker

前几天遇到这样一个业务场景,数据库运行在docker 中,docker 的市区是utc 所以就跟北京时间相差8个小时.但是又不能重新运行一个容器,只能保证数据库运行状态,并把宿主机的时区复制给docker 容器.很苦恼, 首先我先把宿主机的时区改成啦CST 北京时间.然后把宿主机的时区复制给docker 容器.命令如下 docker cp /etc/localtime:[容器ID或者NAME]/etc/localtime 当然也可以进入容器进行修改时区(不过我的容器修改的时候总是报/etc/lo

Linux基础:如何在命令行中查看目录的大小

Linux基础:如何在命令行中查看目录的大小 这是写给Liunx新用户的一系列文章中的第一篇,在这系列文章我将会写一些对新用户来说非常好用的Linux基础命令. 注意:本文的目标读者是仅有小量甚至是没有任何Linux命令行使用经验的读者. 作为一个Linux的新用户,我怎样可以在命令行终端中查看某个目录的属性? 要求 唯一的要求是du命令行工具.du基本上是所有Linux发行版本默认提供的工具.用以下的命令来检查你的系统中是否可以使用du命令: man du du 命令用于输出文件的空间使用情况