zoukankan      html  css  js  c++  java
  • 容器

    容器是镜像的一个运行实例
    镜像是静态的只读文件,容器带有运行时需要的可写问文件层
    容器中的应用进程处于运行状态
    虚拟机:模拟运行的一整套操作系统
    容器:独立运行的一个应用及他们必需的运行环境

    创建容器

    1.新建容器

    • docker [container] create
    创建的容器处于停止状态,可以使用docker [container] start 命令启动它
    支持的选项:...
     
    其他选项还包括:
    • -l, --label=[]: 以键值对方式指定容器标签的信息
    • --label-file=[]: 从文件中读取标签信息

    2.启动容器

    • docker [container] start NAME

    3.新建并启动容器

    • docker [container] run
    例如,下面的命令输出"hello world",之后容器自动停止
    docker run ubuntu /bin/echo "hello world"
     
    使用docker [container] run 创建并启动容器,docker在后台的标准操作包括:
    • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
    • 利用镜像创建一个容器,并启动该容器
    • 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层
    • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
    • 从网桥的地址池配置一个IP地址给容器
    • 执行用户指定的应用程序
    • 执行完毕后容器被自动停止
    docker run -it ubuntu:18.04 /bin/bash 允许用户进行交互
    -t 让docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输出上
    -i 让容器的标准输入保持打开
    更多选项可通过 man docker-run 命令查看
    ctrl+d 或输入 exit 退出容器
    对于所创建的bash容器,使用exit推出bash进程后,容器也会自动退出。因为对于容器来说,其中的用用退出后,容器的使命完成,也就没有继续云心的必要了
    可以使用 docker container wait CONTAINER [CONTAINER ...] 子命令来等待容器退出,并打印容器退出返回结果
    默认情况下,创建错误码包括:
    125:docker daemon执行出错,例如指定了不支持的docker参数
    126:所指定命令无法执行,执行权限出错
    127:容器内命令无法找到

    4.守护态(daemonized)运行

    • docker run -d
    docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
    容器启动后会返回一个唯一的id,也可以通过 docker ps 或 docker container ls 查看容器信息

    5.查看容器输出

    • docker [container] logs
    支持的选项包括:
    • -details: 打印详细信息
    • -f, -follow: 持续保持输出
    • -since string: 输出从某个时间开始的日志
    • -t, -timestamps: 显示时间戳信息
    • -until string: 输出某个时间之前的日志

    停止容器

    1.暂停容器

    • docker [container] pause CONTAINER [CONTAINER ...]
    例如,启动一个容器,并将其暂停:
    docker run --name test --rm -it ubuntu bash
    docker pause test
    docker ps
    使用 docker [container] unpause CONTAINER [CONTAINER ...] 恢复运行状态

    2.终止容器

    • docker [container] stop [-t | --time[=10]] [CONTAINER...]
    该命令首先向容器发送 SIGTERM 信号,等待一段超时时间后(默认为10s),再发送 SIGKILL 信号来终止容器
    执行 docker container prune,自动清除处于停止状态的容器
    还可以通过 docker [container] kill 直接发送 SIGKILL 信号强行终止容器
    当容器中指定的应用终结时,容器也会自动终止
    可以通过 docker ps -qa 查看所有容器的ID
    处于终止状态的容器,可通过 docker [container] start 重新启动
    docker [container] restart 先终止,再重新启动

    进入容器

    使用 -d 参数时,容器进入后台,用户无法看到容器中的信息,也无法操作
    1.attach命令
    • docker [container] attach [--detach-keys[=[]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
    支持的主要选项:
    • --detach-keys[=[]]: 指定退出attach模式的快捷键序列,默认ctrl-p,ctrl-q
    • --no-stdin=true|false: 是否关闭标准输入,默认是保持打开
    • --sig-proxy=true|false: 是否代理收到的系统信号给应用程序,默认为true
    docker run -itd ubuntu
    docker ps
    docker attach CONTAINER
    当多个多个窗口同时attach到一个容器时,所有窗口都会同步显示,当某个窗口因命令阻塞时,其他窗口也无法操作。

    2.exec命令

    1.3.0之后,
    • docker [container] exec [-d | --detach] [--detach-keys[=[]] [-i | --interactive] [--privileged] [-t | --tty] [-u | --user=[USER]] CONTAINER COMMAND [ARG ...]
    比较重要的参数有:
    • -d, --detach: 在容器中后台执行命令
    • --detach-keys="": 指定将容器切回后台的按键
    • -e, --env=[]: 指定环境变量列表
    • -i, --interactive=true|false: 打开标准输入接受用户输入命令,默认false
    • --privileged=true|false: 是否给执行命令以最高权限,默认false
    • -t,--tty=true|false: 分配伪终端,默认flase
    • -u, --user="": 执行命令的用户名或ID
    例如进入一个刚创建的容器,并启动一个bash:
    docker exec -it CONTAINER /bin/bash

    删除容器

    • docker [container] rm [-f | --force] [-l | --link] [-v | --volumes] CONTAINER [CONTAINER ...]
    主要支持的选项包括:
    • -f, --force=false: 是否强制终止并删除一个运行中的容器
    • -l, --link=false: 删除容器的链接,但保留原容器
    • -v, --volumes=false: 删除容器挂载的数据卷
    默认情况下,不能删除还处于运行状态的容器,可以添加 -f 参数。docker会先发送 SIGKILL 信号给容器,终止其中的应用,之后强行删除。

    导入导出容器

    1.导出容器

    不管此时容器是否处于运行状态,
    • docker [container] export [-o | --output [=""]] CONTAINER
    例如,分别导 ce5, e81 到 test_for_run.tar, test_for_stop.tar
    docker export -o test_for_run.tar ce5
    docker export e81 > test_for_stop.tar

    2.导入容器

    • docker [container] import [-c | --change[=[]]] [=m | message[=MESSAGE]] file | URL | - [REPOSITORY[:TAG]]
    例如,将 test_for_run.tar 导入到系统中:
    docker import test_for_run.tar - test/ubuntu:v1.0
    与docker load的区别在于:
    容器快照文件将丢弃所有历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。
    从容器标签导入时,可重新指定标签等元数据。

    查看容器

    1.查看容器详情

    • docker container inspect [OPTIONS] CONTAINER [CONTAINER ...]
    会以json格式返回容器ID,创建时间,路径,状态,镜像,配置等

    2.查看容器内进程

    • docker [container] top [OPTIONS] CONTAINER [CONTAINER ...]
    显示PID,用户,时间,命令等

    3.查看统计信息

    • docker [container] stats [OPTIONS] [CONTAINER ...]
    显示CPU,内存,存储,网络等使用情况
    支持选项包括:
    • -a, -all: 输出所有容器统计信息,默认仅在运行中
    • -format string
    • -no-stream: 不持续输出,默认会自动更新持续实时结果
    • -no-trunc: 不截断输出信息

    其他容器命令

    1.复制文件

    • docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH | -
    支持的选项包括:
    • -a, -archive: 打包模式,复制文件会带有原始的uid/gid信息
    • -L, -follow-link: 跟随软链接。当原路径为软链接时,默认只复制链接信息
    例如,将本地路径data复制到test容器的 /temp路径下:
    docker [container] cp data test:/temp/

    2.查看变更

    • docker [container] diff CONTAINER

    3.查看端口映射

    • docker container port CONTAINER [PRIVATE_PORT[/PORT]]

    4.更新配置

    更新容器的一些运行时配置,主要时一些资源限制份额。
    • docker [container] update [OPTIONS] CONTAINER [CONTAINER ...]
    支持的选项包括:
    例如,限制总配额为1s,容器test所占用是时间为10%:
    docker update --cpu-quota 1000000 test
    docker update --cpu-period 100000 test
     
     
    在生产环境中,为了提高容器的高可用性和安全性,一方面要合理使用资源限制参数来管理容器的资源消耗,另一方面,要指定合适的容器重启策略,来自动重启退出的容器。此外,还可以使用HAProxy等辅助工具来处理负载均衡,自动切换故障的应用容器。
     
  • 相关阅读:
    进程和线程的区别?什么时候用进程?什么时候用线程?----看到好的复制到自己的园子里哈哈
    HTTPS详细讲解一篇就够了
    MySQL存储过程
    Spring注入全局的HttpServletRequest
    Java进阶必备
    Java8新特性
    java.time包常用类API学习记录
    Maven常用插件
    maven-dependency-versions-check-plugin, Maven 插件查找依赖版本冲突
    Jackson自定义注解
  • 原文地址:https://www.cnblogs.com/catyuang/p/12130089.html
Copyright © 2011-2022 走看看