• 高级架构师_Docker_第1章_第3节Docker容器


    高级架构师_Docker_第1章_第3节Docker容器

    Docker容器简介

    容器是镜像的运行时实例。正如从虚拟机模板上启动 VM 一样,用户也同样可以从单个镜像上启动一个或多个容器。虚拟机和容器最大的区别是容器更快并且更轻量级——与虚拟机运行在完整的操作系统之上相比,容器会共享其所在主机的操作系统/内核。下图为使用单个 Docker镜像启动多个容器的示意图。

    img

    Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。

    容器和镜像的关系

    如上图所示,一言以蔽之,容器就是镜像的一个运行实例。
    可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。
    可以把容器看做是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。
    容器是基于镜像启动起来的,容器中可以运行一个或多个进程。
    镜像是Docker生命周期 中的构建或打包阶段,而容器则是启动或执行阶段。
    镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

    新建并启动容器

    语法
    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    
    • 1
    运行容器
    # 交互模式运行tomcat
    docker run -it --rm tomcat:9.0.20-jre8-alpine
    
    # 交互模式运行tomcat,制定端口映射宿主机和容器均为8080
    docker run -it --rm -p 8080:8080 tomcat:9.0.20-jre8-alpine
    
    # 交互模式后台运行tomcat,指定容器名为tomcat9,并且 端口映射宿主机和容器均为8080
    docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    常用参数
    • docker run命令常用参数比较多,这里仅仅列出开发人员的常用参数,大家可以自行查找资料获得更多参数信息
      -d, --detach=false: 后台运行容器,并返回容器ID

    • -i, --interactive=false: 以交互模式运行容器,通常与 -t 同时使用

    • -P, --publish-all=false: 随机端口映射,容器内部端口随机映射到主机的端口。不推荐各位小伙伴使用该参数

    • -p, --publish=[]: 指定端口映射,格式为:主机(宿主)端口:容器端口,推荐各位小伙伴们使用

    • -t, --tty=false: 为容器重新分配一个伪输入终端,通常与 -i 同时使用

    • –name=“nginx-lb”: 为容器指定一个名称

    • -h , --hostname=“laosiji”: 指定容器的hostname

    • -e , --env=[]: 设置环境变量,容器中可以使用该环境变量

    • –net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型

    • –link=[]: 添加链接到另一个容器;不推荐各位小伙伴使用该参数

    • -v, --volume : 绑定一个卷

    • –privileged=false: 指定容器是否为特权容器,特权容器拥有所有的capabilities

    • –restart=no:指定容器停止后的重启策略

      no:容器退出时不重启

      on-failure:容器故障退出(返回值非零)时重启
      always:容器退出时总是重启,推荐各位小伙伴们使用

    • –rm=false: 指定容器停止后自动删除容器,不能以docker run -d启动的容器

    容器日志

    docker logs : 获取容器的日志

    语法
    docker logs [OPTIONS] CONTAINER
    
    • 1
    执行命令
    docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine 
    docker logs -f tomcat9
    
    • 1
    • 2
    常用参数
    -f : 跟踪日志输出
    --tail :仅列出最新N条容器日志
    
    • 1
    • 2

    删除容器

    docker rm :删除一个或多个容器。
    docker rm命令只能删除处于终止或退出状态的容器,并不能删除还处于运行状态的容器,如果要删除需要先docker stop停掉容器。

    语法
    docker rm [OPTIONS] CONTAINER [CONTAINER...]
    
    • 1
    执行命令
    docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine 
    # 需要先停止运行中的容器再删除,否则无法删除容器 
    docker stop tomcat9 
    # 按照容器名称删除 
    docker rm tomcat9 
    # 按照容器ID删除 
    docker rm 8dd95a95e687
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    常用参数

    -f :通过 SIGKILL 信号强制删除一个运行中的容器。
    -l :移除容器间的网络连接,而非容器本身。
    -v :删除与容器关联的卷。

    列出容器

    语法

    docker ps [OPTIONS]

    执行命令
    docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine 
    
    # 查看运行中的容器 
    docker ps tomcat9 
    
    # 查看所有容器 
    docker ps -a tomcat9
    
    # 查看运行中的容器编号
    docker ps -q
    
    # 显示所有容器编号
    docker ps -qa
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    输出详情介绍:

    1. CONTAINER ID: 容器 ID。
    2. IMAGE: 使用的镜像。
    3. COMMAND: 启动容器时运行的命令。
    4. CREATED: 容器的创建时间。
    5. STATUS: 容器状态。

    状态有7种:

    • created(已创建)
    • restarting(重启中)
    • running(运行中)
    • removing(迁移中)
    • paused(暂停)
    • exited(停止)
    • dead(死亡)

    我们这里看一下查看一下本机的容器,如下图:

    img

    PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

    NAMES: 自动分配的容器名称。

    常用参数
    • -a :显示所有的容器,包括未运行的。
    • -q :只显示容器编号。
    实用技巧

    可以通过$()做命令嵌套,示例如下:

    # 停止所有运行容器 
    docker stop $(docker ps -qa) 
    
    # 删除所有的容器 
    docker rm $(docker ps -aq) 
    
    docker rm $(docker stop $(docker ps -q)) 
    
    # 删除所有的镜像 
    docker rmi $(docker images -q)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    创建容器

    docker create :创建一个新的容器但不启动它,用法同 docker run命令。

    语法
    docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
    
    • 1
    执行命令
    # 交互式创建一个容器,命名为tomcat9,映射端口宿主机和容器都是8080端口,
    使用的是9.0.20-jre8-slim镜像
    docker create -it --name tomcat9 -p 8080:8080 9.0.20-jre8-slim
    
    • 1
    • 2
    • 3

    创建后效果如图所示:

    img

    这里注意通过docker ps命令是看不到的,只能通过docker ps -a命令查看,因为容器是处于created状态。

    常用参数

    大部分参数用法与docker run命令参数相同,

    启动、重启、终止容器

    • docker start :启动一个或多个已经被停止的容器
    • docker stop :停止一个运行中的容器
    • docker restart :重启容器
    语法
    docker start [OPTIONS] CONTAINER [CONTAINER...] 
    docker stop [OPTIONS] CONTAINER [CONTAINER...] 
    docker restart [OPTIONS] CONTAINER [CONTAINER...]
    
    • 1
    • 2
    • 3
    执行命令
    docker start tomcat9 
    docker stop tomcat9 
    docker restart tomcat9
    
    • 1
    • 2
    • 3

    进入容器

    docker exec:在运行的容器中执行命令。早期有attach命令,对于阻塞命令会等待,所以不方便。在Docker 1.3.0后提供了exec 可以在容器内直接执行任意命令。

    语法
    docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    
    • 1
    执行命令
    # 有bash命令的linux系统:例如centos 
    docker run -it --name tomcat9.1 -p 8080:8080 tomcat:9.0.20-jre8-slim 
    docker exec -it tomcat9.1 /bin/bash 
    
    # 没有bash命令的linux系统:例如alpine系统 
    docker run -it --name tomcat9.2 -p 8081:8080 tomcat:9.0.20-jre8-alpine 
    docker exec -it tomcat9.2 sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    常用参数

    -i :即使没有附加也保持STDIN 打开
    -t :分配一个伪终端

    查看容器

    docker inspect : 获取容器/镜像的元数据。

    语法
    docker inspect [OPTIONS] NAME|ID [NAME|ID...]
    
    • 1
    执行命令
    docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine 
    docker inspect tomcat9
    
    • 1
    • 2
    常用参数
    -f :指定返回值的模板文件。
    -s :显示总的文件大小。
    --type :为指定类型返回JSON。
    
    • 1
    • 2
    • 3

    更新容器

    docker update :动态地更新容器配置,可以更新一个或多个容器配置。多个容器名称或ID之间使用空格分隔。
    但是update命令不是很成熟,有很多配置项不能动态更新。推荐大家还是rm容器后,再重新run一个新的镜像。

    语法
    docker update [OPTIONS] CONTAINER [CONTAINER...]
    
    • 1
    执行命令
    docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine 
    
    #更新容器restart策略 
    docker update --restart always tomcat9
    
    • 1
    • 2
    • 3
    • 4

    杀掉容器

    docker kill :杀掉一个运行中的容器。

    语法
    docker kill [OPTIONS] CONTAINER [CONTAINER...]
    
    • 1
    执行命令
    docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine 
    docker kill tomcat9 
    docker ps 
    docker ps -a 
    docker start tomcat9
    
    • 1
    • 2
    • 3
    • 4
    • 5

    当使用docker kill命令后,容器就处于了Exited状态,如下图所示:

    img

    docker常用命令汇总

    kill :杀掉一个运行中的容器。

    语法
    docker kill [OPTIONS] CONTAINER [CONTAINER...]
    
    • 1
    执行命令
    docker run -it --name tomcat9 -p 8081:8080 tomcat:9.0.20-jre8-alpine 
    docker kill tomcat9 
    docker ps 
    docker ps -a 
    docker start tomcat9
    
    • 1
    • 2
    • 3
    • 4
    • 5

    当使用docker kill命令后,容器就处于了Exited状态,如下图所示:

    [外链图片转存中…(img-odR3xLdQ-1667708177195)]

    docker常用命令汇总

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQ58ua3P-1667708177196)(file:///C:/Users/CHANGX~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)]

  • 相关阅读:
    北邮22级信通院数电:Verilog-FPGA(5)第四第五周实验 密码保险箱的设计
    node环境执行js文件
    06【对象的扩展】
    SAP采购订单中的净价是单价还是总价?
    Redis分布式锁真的安全吗?
    二维数组的动态创建和释放
    学会倾听,创建良性的交流通道
    场景应用:利用Redis实现分布式Session
    DELETE和TRUNCATE的区别
    HTTP的前世今生
  • 原文地址:https://blog.csdn.net/guan1843036360/article/details/127714484