美文网首页Docker
Docker操作命令及参数

Docker操作命令及参数

作者: peerless_1024 | 来源:发表于2018-07-18 16:10 被阅读171次
    • 查看当前版本
    docker --version 
    
    root@ubuntu:/# docker --version
    Docker version 1.13.1, build 092cba3
    
    • 查看docker环境信息
    docker info 
    
    • 查看镜像和容器的详细信息
    Usage:  docker inspect [OPTIONS] NAME|ID [NAME|ID...]
    
    root@ubuntu:/# docker inspect ubuntu  //查看ubuntu镜像信息
    [
        {
            "Id": "sha256:74f8760a2a8b28abade3fcbcdb6998543f1d9b4a6fb61463c10adc0765c3cb12",
       ......
    root@ubuntu:/# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    ca35e081d142        ubuntu              "/bin/bash"         31 minutes ago      Exited (0) 16 minutes ago                       mytest
    root@ubuntu:/# docker inspect mytest//查看ID为ca35e081d142,名字为mytest的容器信息
    [
        {
            "Id": "ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647",
            "Created": "2018-07-18T03:21:54.867247035Z",
            "Path": "/bin/bash",
    
    • 获取Docker镜像
    • Docker Registry地址:<域名/IP>[:端口号], 默认地址是Docker Hub
    • 仓库名:仓库名是两段式名称,既 <用户名>/<软件名> 。对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。
    docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
    
    root@ubuntu:/# docker pull ubuntu
    Using default tag: latest
    latest: Pulling from library/ubuntu
    7996ebd2246a: Pull complete 
    de532f9a4f9f: Pull complete 
    7de2709b2a83: Pull complete 
    70b6ac64a142: Pull complete 
    23caf550e032: Pull complete 
    Digest: sha256:5c27f1bbe17a6dd8e6fcf02d8717f68e52e3e7130302c5280fa6f92ad9ae7fec
    Status: Downloaded newer image for ubuntu:latest
    
    • 查看本地所有镜像
    docker images
    
    • 查看正在运行的容器
      -a 参数可以查看所有容器,包括停止的容器;-q 参数表示只显示容器的id
    docker ps
    
    • 删除镜像和容器
      docker rmi命令用于删除镜像,docker rm命令用来删除容器
    docker rm [OPTIONS] CONTAINER [CONTAINER...]
    docker rmi [OPTIONS] IMAGE [IMAGE...]
    
    //删除镜像之前,先查看是否有容器在运行,若在运行,先
     docker stop CONNTAINER_ID
    //然后清除所有已经停止的容器 
     docker rm $(docker ps -qa)
    
    • 容器的启动、停止和重启
    docker start  CONTAINER_ID   // 启动一个容器
    docker stop   CONTAINER_ID   // 停止一个容器
    docker restart  CONTAINER_ID // 重启一个容器
    
    • 创建一个新的容器并运行一个命令
    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    

    OPTIONS说明:

    • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
    • -d: 后台运行容器,并返回容器ID;
    • -i: 以交互模式运行容器,通常与 -t 同时使用;
    • -p: 端口映射,格式为:主机(宿主)端口:容器端口
    • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    • --name="nginx-lb": 为容器指定一个名称;
    • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
    • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
    • -h "mars": 指定容器的hostname;
    • -e username="ritchie": 设置环境变量;
    • --env-file=[]: 从指定文件读入环境变量;
    • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
    • -m :设置容器使用内存最大值;
    • --net="bridge": 指定容器的网络连接类型,支持bridge/host/none/container: 四种类型;
    • --link=[]: 添加链接到另一个容器;
    • --expose=[]: 开放一个端口或一组端口;

    使用示例

    • 从ubuntu镜像启动一个容器,并执行echo命令打印出“Hello World”之后容器就停止运行。
    root@ubuntu:/# docker run ubuntu echo "Hello World"
    Hello World
    
    • 从ubuntu镜像启动一个容器,并为它分配一个伪终端执行/bin/bash命令,用户可以在该伪终端与容器进行交互。若不添加-d参数,退出/bin/bash之后,容器也就退出了。
    root@ubuntu:/# docker run -i -t --name test ubuntu /bin/bash
    root@df613d47e175:/# 
    
    • docker run -d 以守护状态运行
    root@ubuntu:/# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    root@ubuntu:/# docker run -idt --name mytest ubuntu /bin/bash
    ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647
    root@ubuntu:/# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    ca35e081d142        ubuntu              "/bin/bash"         41 seconds ago      Up 40 seconds                           mytest
    
    • 进入容器
      docker exec
    • 通过CONTAINER_ID进入容器
    docker exec -it CONTAINER_ID /bin/bash
    
    root@ubuntu:/# docker exec -it ca35e081d142 /bin/bash
    root@ca35e081d142:/# echo 'hello world'
    hello world
    root@ca35e081d142:/# 
    
    • 通过CONTAINER_NAME进入容器
    docker exec -it CONTAINER_NAME /bin/bash
    
    root@ca35e081d142:/# exit
    exit
    root@ubuntu:/# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    ca35e081d142        ubuntu              "/bin/bash"         11 minutes ago      Up 11 minutes                           mytest
    root@ubuntu:/# docker exec -it mytest /bin/bash
    root@ca35e081d142:/# echo 'hello world'
    hello world
    root@ca35e081d142:/# 
    

    docker attach

    docker attach [CONTAINER_ID | NAMES]
    

    注意:使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
    事实上, docker attach 不是一个用来进入容器的命令, 或者说它不是用来在容器内运行一个 bash(shell) 的命令, 它用来连接到容器中运行中的进程, 也就是容器内 PID=1 的那个进程, 如果这个进程没有 stdout/stderr ,那么你将看不到任何输出, 如果它没有接收 stdin 你也无法发送指令给它。这也就是为什么运行一个 bash 的容器, 就可以 attach 进去执行命令, 而运行一个 mysql server 的容器就无法操作的原因。

    如何退出 attach 的容器

    使用 CTRL-P /CTRL-Q 来退出容器, 如果使用 CTRL+C 那么会导致容器结束(Exited), 因为它会发送 SIGKILL 给容器的进程, 然后这个容器就 Exited 了, 当然这里可以使用 docker attach --sig-proxy=false 防止发送 SIGKILL 给进程。

    root@ubuntu:/# docker attach ca35e081d142
    root@ca35e081d142:/# exit
    exit
    root@ubuntu:/# docker attach mytest
    You cannot attach to a stopped container, start it first
    root@ubuntu:/# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    root@ubuntu:/# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    ca35e081d142        ubuntu              "/bin/bash"         16 minutes ago      Exited (0) 49 seconds ago                       mytest
    
    • 查看容器使用的资源情况
    docker stats [OPTIONS] [CONTAINER...]
    
    root@ubuntu:/# docker stats
    CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    ca35e081d142        0.00%               908 KiB / 3.859 GiB   0.02%               3.67 kB / 648 B     123 kB / 0 B        2
    
    • events、history和logs命令
      这三个命令用于查看Docker的系统日志信息。
    • events命令会打印出实时的系统事件
      详细操作和具体参数介绍可参考该链接

    需要开启两个shell来演示实例。
    shell1:监听事件

    root@ubuntu:/# docker events
    

    shell2:对容器进行操作

    root@ubuntu:/# docker start mytest
    mytest
    root@ubuntu:/# docker exec -it mytest /bin/bash
    root@ca35e081d142:/# echo 'Hello'
    Hello
    

    shell1:显示刚才的事件

    root@ubuntu:/# docker events
    2018-07-18T14:52:56.822285857+08:00 network connect d102e20c899b1a51cb220f0ade9e02625680ca48468a1028519beabcd1c63994 (container=ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647, name=bridge, type=bridge)
    2018-07-18T14:52:57.057482151+08:00 container start ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647 (image=ubuntu, name=mytest)
    2018-07-18T14:53:42.573138943+08:00 container exec_create: /bin/bash  ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647 (image=ubuntu, name=mytest)
    2018-07-18T14:53:42.574748850+08:00 container exec_start: /bin/bash  ca35e081d1426225aaf71f00c7ab114df7ed20be428ee56372e1e27c3d135647 (image=ubuntu, name=mytest)
    
    • history命令会打印出指定镜像的历史版本信息,即构建镜像的每一层镜像的命令记录
    docker history [OPTIONS] IMAGE
    /* OPTIONS说明:
    -H :以可读的格式打印镜像大小和日期,默认为true
    --no-trunc :显示完整的提交记录
    -q :仅列出提交记录I */
    
    root@ubuntu:/# docker history ubuntu
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    74f8760a2a8b        30 hours ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
    <missing>           30 hours ago        /bin/sh -c mkdir -p /run/systemd && echo '...   7 B                 
    <missing>           30 hours ago        /bin/sh -c sed -i 's/^#\s*\(deb.*universe\...   2.76 kB             
    <missing>           30 hours ago        /bin/sh -c rm -rf /var/lib/apt/lists/*          0 B                 
    <missing>           30 hours ago        /bin/sh -c set -xe   && echo '#!/bin/sh' >...   745 B               
    <missing>           30 hours ago        /bin/sh -c #(nop) ADD file:5fabb77ea8d61e0...   82.4 MB  
    
    • logs命令会打印出容器中进程的运行日志
      想要进一步了解原理可以参考下面链接1链接2
    docker logs [OPTIONS] CONTAINER
    /* OPTIONS说明:
    -f : 跟踪日志输出
    --since :显示某个开始时间的所有日志
    -t : 显示时间戳
    --tail :仅列出最新N条容器日志 */
    

    虽然 docker exec 所执行的进程也是容器的一部分,但是Docker 容器的日志只负责应用本身的标准输出,不包括 docker exec 衍生进程的标准输出。因此:
    (1)docker exec 完成容器内外的交互,但希望完成大量标准输出时需谨慎;
    (2)每次 docker exec ,Docker Daemon 均会记录一次 execID,切忌过于频繁。

    root@ubuntu:/# docker logs -f mytest
    root@ca35e081d142:/# exit
    exit
    

    相关文章

      网友评论

        本文标题:Docker操作命令及参数

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