zoukankan      html  css  js  c++  java
  • 【转】Docker 常用命令总结

    本文主要参考:https://www.cnblogs.com/xiao-xue-di/p/10113688.html

    Docker 常用命令总结

     

    镜像相关

    搜索

    docker search *image_name*

    下载

    docker pull *image_name*

    查看

    docker images
    docker image ls

    删除

    docker rmi *image_name*
    docker image rm *image_name*

    导出docker镜像

    docker save *image_name* > /save/image/path/name.tar.gz

    导入docker镜像

    docker load < /save/image/path/name.tar.gz

    提交创建的自定义的镜像

    docker commit *container_id* *镜像名称*

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    [root@c7-dev ~]# docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    docker.io/centos latest 1e1148e4cc2c 6 days ago 202 MB
    docker.io/ubuntu latest 93fd78260bd1 3 weeks ago 86.2 MB
    docker.io/hello-world latest 4ab4c602aa5e 3 months ago 1.84 kB
    [root@c7-dev ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    6ecddae6e645 centos "bash" 21 minutes ago Exited (0) About a minute ago boring_mestorf
    # 进入容器,执行一些安装的过程省略
    # 对容器进行一些自定制的操作后,提交这个容器生成新的镜像
    [root@c7-dev ~]# docker commit 6ecdd gandoufu/centos-wget
    sha256:bac2d675a9c230f0a60b0af35b5d4e3cb337d7c6f122a05b60a9172ddb9fbda0
    [root@c7-dev ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    6ecddae6e645 centos "bash" 24 minutes ago Exited (0) 4 minutes ago boring_mestorf
    [root@c7-dev ~]# docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    gandoufu/centos-wget latest bac2d675a9c2 16 seconds ago 328 MB
    docker.io/centos latest 1e1148e4cc2c 6 days ago 202 MB
    docker.io/ubuntu latest 93fd78260bd1 3 weeks ago 86.2 MB
    docker.io/hello-world latest 4ab4c602aa5e 3 months ago 1.84 kB

    # 将生成的新的镜像推送至远程仓库
    [root@c7-dev ~]# docker login
    Username: gandoufu
    Password:
    Login Succeeded
    [root@c7-dev ~]# docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    gandoufu/centos-wget latest bac2d675a9c2 10 minutes ago 328 MB
    docker.io/centos latest 1e1148e4cc2c 6 days ago 202 MB
    docker.io/ubuntu latest 93fd78260bd1 3 weeks ago 86.2 MB
    docker.io/hello-world latest 4ab4c602aa5e 3 months ago 1.84 kB
    [root@c7-dev ~]# docker tag bac2 gandoufu/centos7-wget:latest
    [root@c7-dev ~]# docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    gandoufu/centos-wget latest bac2d675a9c2 12 minutes ago 328 MB
    gandoufu/centos7-wget latest bac2d675a9c2 12 minutes ago 328 MB
    docker.io/centos latest 1e1148e4cc2c 6 days ago 202 MB
    docker.io/ubuntu latest 93fd78260bd1 3 weeks ago 86.2 MB
    docker.io/hello-world latest 4ab4c602aa5e 3 months ago 1.84 kB
    [root@c7-dev ~]# docker push gandoufu/centos7-wget
    The push refers to a repository [docker.io/gandoufu/centos7-wget]
    f79b6b9e2fa6: Pushing [==================================================>] 129.6 MB
    071d8bd76517: Pushed

    打标签时的注意事项:
    docker tag bac2 gandoufu/centos7-wget
    bac2 是镜像的id
    gandoufu/centos7-wget 镜像的名称必须是自己的id名称/镜像名称
    latest 默认版本号,可以不用加

    容器相关

    新建容器

    docker create image_name
    docker create -t -i image_name bash
    docker run image_name
    docker run image_name /bin/echo “haha”
    docker run -it -d image_name
    docker run -it -d –rm –name mydo image_name

    使用create创建的容器,在使用时需要先start对应的容器;
    使用run创建的容器,直接运行;如果指定的image_name不存在,则会去镜像仓库下载镜像,然后根据镜像创建容器。

    参数说明:
    i 进入交互模式
    t 创建一个虚拟终端
    d 后台运行
    rm 退出后自动删除容器
    name 创建的容器使用自定义的名字
    注:i和t参数一起指定(-it),在实际操作时发现只指定i参数时,attach到实例时会出现卡死的情况。

    进入容器

    docker attach *container_id|container_name*
    根据容器的id或名字进入指定的容器;如果容器处于未运行状态,需要先启动容器docker start container_id

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@c7-dev ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    aefe7162ed16 centos "bash" 22 minutes ago Exited (0) 3 seconds ago hungry_franklin
    [root@c7-dev ~]#
    [root@c7-dev ~]# docker start aefe
    aefe
    [root@c7-dev ~]# docker attach aefe

    [root@c7-dev ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    aefe7162ed16 centos "bash" 20 minutes ago Up 16 seconds hungry_franklin

    使用运行的容器执行命令

    docker exec *container_id* command

    1
    2
    3
    4
    5
    [root@c7-dev ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    aefe7162ed16 centos "bash" 15 minutes ago Up 15 minutes hungry_franklin
    [root@c7-dev ~]# docker exec aefe date
    Wed Dec 12 14:04:12 UTC 2018

    查看容器

    docker ps
    docker ps -a
    docker ps -aq

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [root@c7-dev ~]# docker run -it -d centos bash
    aefe7162ed163028c36741c26545dc0f1967ada0c985ce32cee5cf79666d2a3b
    [root@c7-dev ~]# docker create -it --name myubun ubuntu
    3ba687940aed4a65bfc0656ea23ab627eab71ec4c3bd796ab107674503dd6f72
    [root@c7-dev ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    aefe7162ed16 centos "bash" 45 seconds ago Up 45 seconds hungry_franklin
    [root@c7-dev ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3ba687940aed ubuntu "/bin/bash" 9 seconds ago Created myubun
    aefe7162ed16 centos "bash" 47 seconds ago Up 47 seconds hungry_franklin
    [root@c7-dev ~]# docker ps -aq
    3ba687940aed
    aefe7162ed16

    停止容器

    docker stop *container_id*

    1
    2
    3
    4
    5
    6
    7
    [root@c7-dev ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    aefe7162ed16 centos "bash" 18 minutes ago Up 18 minutes hungry_franklin
    [root@c7-dev ~]# docker stop aefe
    aefe
    [root@c7-dev ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

    删除容器

    docker rm *container_id*

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@c7-dev ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3ba687940aed ubuntu "/bin/bash" 16 minutes ago Created myubun
    aefe7162ed16 centos "bash" 17 minutes ago Up 17 minutes hungry_franklin
    [root@c7-dev ~]# docker rm myubun
    myubun
    [root@c7-dev ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    aefe7162ed16 centos "bash" 17 minutes ago Up 17 minutes hungry_franklin

    仓库相关

    登录/退出仓库

    docker [login/logout] [仓库地址]

    1
    2
    3
    4
    5
    6
    7
    [root@c7-dev ~]# docker login daocloud.io
    Username: gandoufu
    Password:
    Login Succeeded

    [root@c7-dev ~]# docker logout daocloud.io
    Removing login credentials for daocloud.io
     

    外部访问容器

    先下载一个training/webapp镜像,用于测试

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [root@c7-dev ~]# docker run -d -P training/webapp python app.py
    e8c1832a9814d61c61faf3d472b40c1164cd410caad855415f3bc56668f0cc2a
    [root@c7-dev ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    e8c1832a9814 training/webapp "python app.py" 4 seconds ago Up 3 seconds 0.0.0.0:32768->5000/tcp tender_cori
    [root@c7-dev ~]# docker port e8c
    5000/tcp -> 0.0.0.0:32768
    [root@c7-dev ~]# docker top e8c1
    UID PID PPID C STIME TTY TIME CMD
    root 1781 1767 0 10:19 ? 00:00:00 python app.py

    [root@c7-dev ~]# docker run -d -p 8000:5000 --name flask training/webapp python app.py
    fef819097329bf7eb90fcf868a4a047b39e62b300c7e30105c38d1adf7fbf10e
    [root@c7-dev ~]# docker port fef8
    5000/tcp -> 0.0.0.0:8000

    通过webapp镜像创建运行容器,在容器内运行一个简单的web应用,端口为5000。

    参数说明:
    -P 会使用宿主机的一个随机端口映射到容器内的5000端口;外部访问ip+随机端口就可以访问容器内的外部应用
    -p 指定外部端口与内部端口映射关系。外部端口:内部端口

    硬件资源相关

    显示容器硬件资源使用情况

    docker stats [OPTIONS] [CONTAINER...]

    1
    2
    3
    [root@c7-dev ~]# docker stats --no-stream
    CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
    3e7563aef10e 0.03% 10.9 MiB / 991.7 MiB 1.10% 2.59 kB / 2.22 kB 0 B / 0 B 1

    如果不加--no-stream参数,会实时刷新显示资源使用情况。

    更新容器的硬件资源限制

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # 创建容器的时候,限制内存
    [root@c7-dev ~]# docker run -it -d -m 100M --memory-swap -1 --name mycent centos
    32d70771e7c88b70caaca4c8e7428421a0906dde6358d77441104a6162032447
    [root@c7-dev ~]# docker stats --no-stream 32d7
    CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
    32d7 0.00% 380 KiB / 100 MiB 0.37% 648 B / 648 B 0 B / 0 B 1

    # 更新内存限制
    [root@c7-dev ~]# docker update -m 200M --memory-swap -1 32d7
    32d7
    [root@c7-dev ~]#
    [root@c7-dev ~]#
    [root@c7-dev ~]# docker stats --no-stream 32d7
    CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
    32d7 0.00% 380 KiB / 200 MiB 0.19% 648 B / 648 B 0 B / 0 B 1

    [root@c7-dev ~]# docker update -m 400M 32d7
    Error response from daemon: Cannot update container 32d70771e7c88b70caaca4c8e7428421a0906dde6358d77441104a6162032447: Memory limit should be smaller than already set memoryswap limit, update the memoryswap at the same time

    注意:指定限制内存大小并且设置 memory-swap 值为 -1,表示容器程序使用内存受限,而 swap 空间使用不受限制(宿主 swap 支持使用多少则容器即可使用多少。如果 –memory-swap 设置小于 –memory则设置不生效,使用默认设置)。
    docker run -it --rm -m 100M ubuntu-stress:latest /bin/bash
    如果不添加–memory-swap选项,则表示容器中程序可以使用100M内存和100Mswap内存,默认情况下,–memory-swap 会被设置成 memory 的 2倍。-m 为物理内存上限,而 –memory-swap 则是 memory + swap 之和,当压测值是 –memory-swap 上限时,则容器中的进程会被直接 OOM kill。

    Docker命令参考表

    docker命令选项列表

    选项说明其他
    –config [string] 客户端本地配置文件路径 默认为 ~/.docker
    -D, –debug 启用调试模式  
    –help 打印用法  
    -H, –host list 通过socket访问指定的docker守护进程(服务端) unix:// , fd:// , tcp://
    -l, –log-level [string] 设置日志级别 (debug 、info 、warn 、error 、fatal) 默认为 info
    –tls 启用TLS加密  
    –tlscacert [string] 指定信任的CA根证书路径 默认为 ~/.docker/ca.pem
    –tlscert [string] 客户端证书路径 默认为 ~/.docker/cert.pem
    –tlskey [string] 客户端证书私钥路径 默认为 ~/.docker/key.pem
    –tlsverify 启用TLS加密并验证客户端证书  
    -v, –version 打印docker客户端版本信息

    用于管理的子命令列表

    选项说明
    container 管理容器
    image 管理镜像
    network 管理容器网络(默认为bridge、host、none三个网络配置)
    plugin 管理插件
    system 管理系统资源。其中, docker system prune 命令用于清理没有使用的镜像, 容器, 数据卷以及网络
    volume 管理数据卷
    swarm 管理Swarm模式
    service 管理Swarm模式下的服务
    node 管理Swarm模式下的docker集群中的节点
    secret 管理Swarm模式下的敏感数据
    stack Swarm模式下利用compose-file管理服务

    基础子命令列表

    选项说明
    attach 进入运行中的容器, 显示该容器的控制台界面。注意, 从该指令退出会导致容器关闭
    build 根据 Dockerfile 文件构建镜像
    commit 提交容器所做的改为为一个新的镜像
    cp 在容器和宿主机之间复制文件
    create 根据镜像生成一个新的容器
    diff 展示容器相对于构建它的镜像内容所做的改变
    events 实时打印服务端执行的事件
    exec 在已运行的容器中执行命令
    export 导出容器到本地快照文件
    history 显示镜像每层的变更内容
    images 列出本地所有镜像
    import 导入本地容器快照文件为镜像
    info 显示 Docker 详细的系统信息
    inspect 查看容器或镜像的配置信息, 默认为json数据
    kill -s 选项向容器发送信号, 默认为SIGKILL信号(强制关闭)
    load 导入镜像压缩包
    login 登录第三方仓库
    logout 退出第三方仓库
    logs 打印容器的控制台输出内容
    pause 暂停容器
    port 容器端口映射列表
    ps 列出正在运行的容器, -a 选项显示所有容器
    pull 从镜像仓库拉取镜像
    push 将镜像推送到镜像仓库
    rename 重命名容器名
    restart 重启容器
    rm 删除已停止的容器, -f 选项可强制删除正在运行的容器
    rmi 删除镜像(必须先删除该镜像构建的所有容器)
    run 根据镜像生成并进入一个新的容器
    save 打包本地镜像, 使用压缩包来完成迁移
    search 查找镜像
    start 启动关闭的容器
    stats 显示容器对资源的使用情况(内存、CPU、磁盘等)
    stop 关闭正在运行的容器
    tag 修改镜像tag
    top 显示容器中正在运行的进程(相当于容器内执行 ps -ef 命令)
    unpause 恢复暂停的容器
    update 更新容器的硬件资源限制(内存、CPU等)
    version 显示docker客户端和服务端版本信息
    wait 阻塞当前命令直到对应的容器被关闭, 容器关闭后打印结束代码
    daemon 这个子命令已过期, 将在Docker 17.12之后的版本中移出, 直接使用dockerd

    run命令常用选项

    选项说明
    -d 后台运行容器, 并返回容器ID;不指定时, 启动后开始打印日志, Ctrl + C 退出命令同时会关闭容器
    -i 以交互模式运行容器, 通常与 -t 同时使用;
    -t 为容器重新分配一个伪输入终端, 通常与 -i 同时使用
    –name “anyesu-container” 为容器指定一个别名, 不指定时随机生成
    -h docker-anyesu 设置容器的主机名, 默认随机生成
    –dns 8.8.8.8 指定容器使用的DNS服务器, 默认和宿主一致
    -e docker_host=172.17.0.1 设置环境变量
    –cpuset=”0-2” or –cpuset=”0,1,2” 绑定容器到指定CPU运行
    -m 100M 设置容器使用内存最大值
    –net bridge 指定容器的网络连接类型, 支持 bridge / host / none / container 四种类型
    –ip 172.18.0.13 为容器分配固定ip(需要使用自定义网络)
    –expose 8081 –expose 8082 开放一个端口或一组端口, 会覆盖镜像设置中开放的端口
    -p [宿主机端口]:[容器内端口] 宿主机到容器的端口映射, 可指定宿主机的要监听的ip, 默认为 0.0.0.0
    -P 注意是大写的, 宿主机随机指定一组可用的端口映射容器 expose 的所有端口
    -v [宿主机目录路径]:[容器内目录路径] 挂载宿主机的指定目录(或文件)到容器内的指定目录(或文件)
    –add-host [主机名]:[ip] 为容器hosts文件追加host, 默认会在hosts文件最后追加 [主机名]:[容器ip]
    –volumes-from [其他容器名] 将其他容器的数据卷添加到此容器
    –link [其他容器名]:[在该容器中的别名] 添加链接到另一个容器, 在本容器hosts文件中加入关联容器的记录, 效果类似于 --add-host

    道阻且长,行则将至;行而不辍,未来可期。
  • 相关阅读:
    利用Abot爬虫和visjs 呈现漫威宇宙
    Abot 爬虫分析-整体结构
    利用Abot 抓取博客园新闻数据
    sftp配置多个用户权限的问题
    十三、Vue中的computed属性
    十二、react-reudx之@connect 摆脱redux的繁琐操作
    十一、微信小程序-var、let、const用法详解
    十、es6之扩展运算符 三个点(...)
    九、小程序 Redux详解与在小程序中怎么使用(action和reducers)
    八、wepy代码规范
  • 原文地址:https://www.cnblogs.com/Kevin0626/p/12527670.html
Copyright © 2011-2022 走看看