zoukankan      html  css  js  c++  java
  • Docker 镜像与容器

    一 镜像简介

    镜像是一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。

    通过镜像可以创建一个或多个容器。

    http://hub.docker.com/

    二 镜像管理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 作用:
    搜索Docker Hub(镜像仓库)上的镜像
    # 命令格式:
    docker search [OPTIONS] TERM
    # 命令参数(OPTIONS):
    -f, --filter filter 根据提供的格式筛选结果
    --format string 利用Go语言的format格式化输出结果
    --limit int 展示最大的结果数,默认25
    --no-trunc 内容全部显示

    # 命令演示
    docker search -f is-offical=true ubuntu
    docker search ubuntu

    2.2 镜像查看 - docker images/docker image ls

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 作用:
    列出本地镜像
    # 命令格式:
    docker images [OPTIONS] [REPOSITORY[:TAG]]
    或者 docker image ls [OPTIONS] [REPOSITORY[:TAG]]
    # 命令参数(OPTIONS):
    -a, --all 展示所有镜像 (默认隐藏底层的镜像)
    --no-trunc 不缩略显示
    -q, --quiet 只显示镜像ID
    # 命令演示:
    docker images
    docker images centos:latest

    2.3 镜像下载 - docker pull

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 作用:
    下载远程仓库(如Docker Hub)中的镜像
    # 命令格式:
    docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    # 命令参数(OPTIONS):
    -a, --all-tags 下载所有符合给定tag的镜像
    # 命令演示:
    docker pull ubuntu
    docker pull centos

    2.4 镜像删除 - docker rmi/docker image rm

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 作用:
    将本地的一个或多个镜像删除
    # 命令格式:
    docker rmi [OPTIONS] IMAGE [IMAGE...]
    或者 docker image rm [OPTIONS] IMAGE [IMAGE...]
    # 命令参数(OPTIONS):
    -f, --force 强制删除
    # 命令演示:
    docker rmi e934 452a

    2.5 镜像保存备份 – docker save

    1
    2
    3
    4
    5
    6
    7
    8
    # 作用:
    将本地的一个或多个镜像打包保存成本地tar文件(输出到STDOUT)
    # 命令格式:
    docker save [OPTIONS] IMAGE [IMAGE...]
    # 命令参数(OPTIONS):
    -o, --output string 指定写入的文件名和路径
    # 命令演示:
    docker save -o linux_images.tar centos ubuntu

    2.6 镜像备份导入 - docker load

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 作用:
    save命令打包的镜像导入本地镜像库中
    # 命令格式:
    docker load [OPTIONS]
    # 命令参数(OPTIONS):
    -i, --input string 指定要打入的文件,如没有指定,默认是STDIN
    -q, --quiet 不打印导入过程信息
    # 命令演示
    docker load -i linux_images.tar
    docker load -i linux_images.tar -q

    2.7 镜像重命名 – docker tag

    1
    2
    3
    4
    5
    6
    7
    8
    # 作用:
    对本地镜像的NAME、TAG进行重命名,并新产生一个命名后镜像
    # 命令格式:
    docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
    # 命令参数(OPTIONS):

    # 命令演示
    docker tag e934 centos-newname:newtag

    2.8 镜像详细信息 – docker image inspect/docker inspect

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 作用:
    查看本地一个或多个镜像的详细信息
    # 命令格式:
    docker image inspect [OPTIONS] IMAGE [IMAGE...]
    或者 docker inspect [OPTIONS] IMAGE [IMAGE...]
    # 命令参数(OPTIONS):
    -f, --format string 利用特定Go语言的format格式输出结果
    # 命令演示:
    docker image inspect -f "{{json .id}}" centos
    docker image inspect -f "{{json .Created}}" centos
    docker image inspect

    2.9 镜像历史信息 – docker history

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 作用:
    查看本地一个镜像的历史(历史分层)信息
    # 命令格式:
    docker history [OPTIONS] IMAGE
    # 命令参数(OPTIONS):
    -H, --human 将创建时间、大小进行优化打印(默认为true)
    -q, --quiet 只显示镜像ID
    --no-trunc 不缩略显示
    # 命令演示
    docker history ubuntu
    docker history ubuntu -H=false

    三 总结

    image-20200328215748194

    一 容器简介

    容器(Container):容器是一种轻量级、可移植、并将应用程序进行的打包的技术,使应用程序可以在几乎任何地方以相同的方式运行

    •Docker将镜像文件运行起来后,产生的对象就是容器。容器相当于是镜像运行起来的一个实例。

    •容器具备一定的生命周期。

    •另外,可以借助docker ps命令查看运行的容器,如同在linux上利用ps命令查看运行着的进程那样。

    二 容器与虚拟机

    •容器和虚拟机一样,都会对物理硬件资源进行共享使用。

    •容器和虚拟机的生命周期比较相似(创建、运行、暂停、关闭等等)。

    •容器中或虚拟机中都可以安装各种应用,如redis、mysql、nginx等。也就是说,在容器中的操作,如同在一个虚拟机(操作系统)中操作一样。

    •同虚拟机一样,容器创建后,会存储在宿主机上:linux上位于/var/lib/docker/containers下

    注意:容器并不是虚拟机,但它们有很多相似的地方

    •虚拟机的创建、启动和关闭都是基于一个完整的操作系统。一个虚拟机就是一个完整的操作系统。而容器直接运行在宿主机的内核上,其本质上以一系列进程的结合。

    •容器是轻量级的,虚拟机是重量级的。首先容器不需要额外的资源来管理(不需要Hypervisor、Guest OS),虚拟机额外更多的性能消耗;其次创建、启动或关闭容器,如同创建、启动或者关闭进程那么轻松,而创建、启动、关闭一个操作系统就没那么方便了。

    •也因此,意味着在给定的硬件上能运行更多数量的容器,甚至可以直接把Docker运行在虚拟机上。

    image-20200328220110993

    三 容器生命周期

    3.1 虚拟机的生命周期

    image-20200328220206803

    3.2 容器的生命周期

    image-20200328220217504

    四 容器生命周期管理

    4.1 容器创建 – docker create

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 作用:
    利用镜像创建出一个Created 状态的待启动容器
    # 命令格式:
    docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
    # 命令参数(OPTIONS):查看更多
    -t, --tty 分配一个伪TTY,也就是分配虚拟终端
    -i, --interactive 即使没有连接,也要保持STDIN打开
    --name 为容器起名,如果没有指定将会随机产生一个名称
    # 命令参数(COMMANDARG):
    COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
    ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
    # 命令演示:
    docker create --name test-container centos ps -A
    docker create -ti --name test-container2 centos /bin/bash

    docker ps -a

    4.2 容器启动 – docker start

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 作用:
    将一个或多个处于创建状态或关闭状态的容器启动起来
    # 命令格式:
    docker start [OPTIONS] CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    -a, --attach 将当前shell的 STDOUT/STDERR 连接到容器上
    -i, --interactive 将当前shell的 STDIN连接到容器上
    # 命令演示:
    docker ps -a
    docker start -a 65ebc
    docker start test-container2

    4.3 容器创建并启动 – docker run

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # 作用:
    利用镜像创建并启动一个容器
    # 命令格式:
    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    # 命令参数(OPTIONS):查看更多
    -t, --tty 分配一个伪TTY,也就是分配虚拟终端
    -i, --interactive 即使没有连接,也要保持STDIN打开
    --name 为容器起名,如果没有指定将会随机产生一个名称
    -d, --detach 在后台运行容器并打印出容器ID
    --rm 当容器退出运行后,自动删除容器
    # 命令参数(COMMANDARG):
    COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
    ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
    # 命令演示:
    docker run centos ps -A
    docker run -d centos ps -A
    docker run --rm -d centos ps -A
    docker run -d centos ps -A

    4.4 docker run 与 docker create + docker start

    1
    2
    docker run 相当于 docker create + docker start –a       前台模式
    docker run -d 相当于 docker create + docker start 后台模式

    4.5 容器暂停 – docker pause

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 作用:
    暂停一个或多个处于运行状态的容器
    # 命令格式:
    docker pause CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):

    # 命令演示
    docker ps -a
    docker pause test-container2
    docker ps -a # 容器是Pause状态

    4.6 容器取消暂停 – docker unpause

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 作用:
    取消一个或多个处于暂停状态的容器,恢复运行
    # 命令格式:
    docker unpause CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):

    # 命令演示:
    docker unpause test-container2
    docker ps -a # 处于运行状态

    4.7 容器关闭 – docker stop

    1
    2
    3
    4
    5
    6
    7
    8
    # 作用:
    关闭一个或多个处于暂停状态或者运行状态的容器
    # 命令格式:
    docker stop [OPTIONS] CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    -t, --time int 关闭前,等待的时间,单位秒(默认 10s)
    # 命令演示:
    docker stop -t 1 容器id

    4.8 容器终止 – docker kill

    1
    2
    3
    4
    5
    6
    7
    8
    # 作用:
    强制并立即关闭一个或多个处于暂停状态或者运行状态的容器
    # 命令格式:
    docker kill [OPTIONS] CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    -s, --signal string 指定发送给容器的关闭信号 (默认“KILL”信号)
    # 命令演示:
    docker kill test-container2

    4.9 docker stop和docker kill的区别

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 一 前提知识点:
    1 Linux其中两种终止进程的信号是:SIGTERM和SIGKILL
    2 SIGKILL信号:无条件终止进程信号。
    进程接收到该信号会立即终止,不进行清理和暂存工作。
    该信号不能被忽略、处理和阻塞,它向系统管理员提供了可以杀死任何进程的方法。
    3 SIGTERM信号:程序终结信号,可以由kill命令产生。
    与SIGKILL不同的是,SIGTERM信号可以被阻塞和终止,以便程序在退出前可以保存工作或清理临时文件等。

    # 二 docker stop 会先发出SIGTERM信号给进程,告诉进程即将会被关闭。在-t指定的等待时间过了之后,将会立即发出SIGKILL信号,直接关闭容器。
    # 三 docker kill 直接发出SIGKILL信号关闭容器。但也可以通过-s参数修改发出的信号。

    # 四 因此会发现在docker stop的等过过程中,如果终止docker stop的执行,容器最终没有被关闭。而docker kill几乎是立刻发生,无法撤销。

    # 五 此外还有些异常原因也会导致容器被关闭,比如docker daemon重启、容器内部进程运行发生错误等等“异常原因”。

    4.10 容器重启 – docker restart

    1
    2
    3
    4
    5
    6
    7
    8
    # 作用:
    重启一个或多个处于运行状态、暂停状态、关闭状态或者新建状态的容器
    该命令相当于stop和start命令的结合
    # 命令格式:
    docker restart [OPTIONS] CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    -t, --time int 重启前,等待的时间,单位秒(默认 10s)
    实则是关闭前等待的时间

    4.11 容器删除 – docker container rm

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 作用:
    删除一个或多个容器
    # 命令格式:
    docker container rm [OPTIONS] CONTAINER [CONTAINER...]
    或者 docker rm [OPTIONS] CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    -f, --force 强行删除容器(会使用 SIGKILL信号)
    -v, --volumes 同时删除绑定在容器上的数据卷
    # 命令演示
    docker rm -f 容器id 容器名

    五 容器信息查看

    5.1 容器详细信息 – docker container inspect

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 作用:
    查看本地一个或多个容器的详细信息
    # 命令格式:
    docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
    或者 docker inspect [OPTIONS] CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    -f, --format string 利用特定Go语言的format格式输出结果
    -s, --size 显示总大小
    # 命令演示
    docker container inspect -f "{{json .State.Status}}" 容器id
    docker container inspect 容器id

    5.2 容器日志信息 – docker logs

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 作用:
    查看容器的日志信息
    # 命令格式:
    docker logs [OPTIONS] CONTAINER
    # 命令参数(OPTIONS):
    --details 显示日志的额外信息
    -f, --follow 动态跟踪显示日志信息
    --since string 只显示某事时间节点之后的
    --tail string 显示倒数的行数(默认全部)
    -t, --timestamps 显示timestamps时间
    --until string 只显示某事时间节点之前的
    # 注意:
    容器日志中记录的是容器主进程的输出STDOUTSTDERR

    5.3 容器重命名 – docker rename

    1
    2
    3
    4
    5
    6
    # 作用:
    修改容器的名称
    # 命令格式:
    docker rename CONTAINER NEW_NAME
    # 命令参数(OPTIONS):

    六 容器运行时操作

    6.1 容器连接 – docker attach

    1
    2
    3
    4
    5
    6
    # 作用:
    将当前终端的STDIN、STDOUT、STDERR绑定到正在运行的容器的主进程上实现连接
    # 命令格式:
    docker attach [OPTIONS] CONTAINER
    # 命令参数(OPTIONS):
    --no-stdin 不绑定STDIN

    6.2 容器中执行新命令 – docker exec

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 作用:
    在容器中运行一个命令
    # 命令格式:
    docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    # 命令参数(OPTIONS):
    -d, --detach 后台运行命令
    -i, --interactive 即使没连接容器,也将当前的STDIN绑定上
    -t, --tty 分配一个虚拟终端
    -w, --workdir string 指定在容器中的工作目录
    -e, --env list 设置容器中运行时的环境变量

    七 总结

    image-20200328222221723

    一 Docker的容器与镜像

    1.1 容器与镜像的关系

    image-20200331002924612

    1.2 容器提交 – docker commit

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 作用:
    根据容器生成一个新的镜像
    # 命令格式:
    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    # 命令参数(OPTIONS):
    -a, --author string 作者
    -c, --change list 为创建的镜像加入Dockerfile命令
    -m, --message string 提交信息,类似git commit -m
    -p, --pause 提交时暂停容器 (default true)
    # 命令演示
    docker run --rm -dti centos bash
    docker exec -d 容器id号 yum -y install net-tools
    docker commit -m 'install net-tools' 容器id号 centos-net-tools:lastest
    docker images

    docker history centos-net-tools

    1.3 容器导出 – docker export

    1
    2
    3
    4
    5
    6
    # 作用:
    将容器当前的文件系统导出成一个tar文件
    # 命令格式:
    docker export [OPTIONS] CONTAINER
    # 命令参数(OPTIONS):
    -o, --output string 指定写入的文件,默认是STDOUT

    1.4 容器打包的导入 – docker import

    1
    2
    3
    4
    5
    6
    7
    # 作用:
    从一个tar文件中导入内容创建一个镜像
    # 命令格式:
    docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
    # 命令参数(OPTIONS):
    -c, --change list 为创建的镜像加入Dockerfile命令
    -m, --message string 导入时,添加提交信息

    二 深入理解Docker的容器与镜像

    三 总结

  • 相关阅读:
    spring mvc随便接收list<objeect>参数
    python django model类型摘要
    【Unity3D自我记录】解决NGUI通过问题触发事件点
    sqlcipher移植
    外键约束列并没有导致大量建筑指数library cache pin/library cache lock
    34一个美丽的生活窍门
    html表格合并(行,一排)
    01标题背包水章 HDU2955——Robberies
    苹果Swift编程语言新手教程【中国版】
    神经网络和BP算法推导
  • 原文地址:https://www.cnblogs.com/bubu99/p/13763351.html
Copyright © 2011-2022 走看看