• 02_Docker


    Docker

    在这里插入图片描述
    在这里插入图片描述
    有了容器引擎的存在:

    • 容器与容器之间可以互相隔离
    • 容器内应用程序的运行也可以通过容器引擎调度宿主机的系统资源

    而Docker只是容器引擎的一种实现,除了Docker之外,容器引擎还有很多,比如podman(开源),pouch(阿里)


    Docker介绍

    • Docker是一个开源的应用容器引擎,基于Go语言并且遵从Apache2.0协议开源
    • Docker将程序以及程序所有的依赖都打包在一起,运行在一个Docker容器中,这样你的程序可以在任何环境都会有一致的表现

    Docker核心概念

    • 镜像(Image)
      • Docker镜像就类似于操作系统的镜像(比如之前安装虚拟机使用到的Ubuntu18),是一个只读的模版。一个镜像中包含了一个或多个特定的应用程序以及运行他们所依赖的应用程序。
    • 容器(Container)
      • 把镜像下载到本地,容器就是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的。
    • 仓库(Repository)

    Docker的使用

    镜像相关的命令

    想要启动一个容器,首先需要找到它的镜像的。镜像相关的命令如下:

    • 列出本机的所有镜像:

      docker images
      
      • 1

      在这里插入图片描述

      这个命令会展示镜像的信息:包括镜像的仓库源(REPOSITORY)、标签(TAG)、镜像ID(IMAGE ID)、 创建时间和大小。

    • 从仓库当中拉取镜像到本地:

      docker pull nginx:1.21.6
      
      • 1

      在这里插入图片描述
      拉取镜像的来源地是仓库——一般使用的是公共仓库,比如默认的hub.docker.com,团队自己也可以建立私有仓库。

    • 删除本地镜像:

      docker rmi nginx:1.21.6
      
      • 1

    容器相关的命令

    创建并启动容器
    • 通过docker run命令可以从镜像当中启动容器。

      docker run nginx
      
      • 1
      • 默认情况,执行docker run的效果会寻找镜像,如果相应的镜像不存在,那么会自动从公开仓库当中拉取;然后启动运行容器;随后附加的命令,在本例中附加命令为空。
      • 对应nginx容器,就会进入容器内部nginx的交互终端,可以使用ctrl+c从容器当中退出,但是同时也会停止容器
        在这里插入图片描述
    • 如果给容器指定附加指令,对于nginx容器而言,会直接执行该指令,随后容器就停止了。

      docker run nginx echo hello
      hello
      
      • 1
      • 2
    • 使用--help选项可以获取命令的简明帮助:

      docker run --help
      # -i, 以交互模式运行容器,通常与 -t 同时使用
      # -t, 为容器重新分配一个伪输入终端,通常与 -i 同时使用
      # -d, 后台运行容器,并返回容器ID
      # --name="nginx-coo1heisenberg": 为容器指定一个名称
      # -e username="coo1heisenberg": 设置环境变量参数
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      # -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
      # -v: 文件挂载,映射文件
      
      • 1
      • 2
      • 假如需要进入容器内部,通过shell命令和容器交互
      docker run -it nginx /bin/bash
      
      • 1

      在这里插入图片描述

      上述命令执行之后,用户就可以进入容器内部,像使用一个普通的shell操作容器内部文件系统。使用ctrl+d可以退出容器并停止容器。

      • 使用-d选项可以以守护进程的形式运行容器:
      docker run -d nginx
      
      • 1

      在这里插入图片描述


    查看容器
    • 我们还可以查看容器

      docker ps  # 列出运行当中的容器
      docker ps -a  # 列出所有的容器
      
      docker rm 容器名|ID  # 删除停止状态的容器
      
      • 1
      • 2
      • 3
      • 4

      在这里插入图片描述


    进入运行中的容器
    • 假若一个容器已经存在并且正在运行,使用docker exec 进入容器

      docker exec -it 容器名 /bin/bash
      
      • 1

      在这里插入图片描述


    查看容器日志
    # 容器日志查看
    docker logs [-f] 容器ID|容器名
    
    • 1
    • 2

    在这里插入图片描述


    容器的启停命令
    • 当然也可以停止、启动、重启或者是删除容器

      # 停止容器
      docker stop 容器ID|容器名
      
      # 启动容器
      docker start 容器ID|容器名
      
      # 重启容器
      docker restart 容器ID|容器名
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      在这里插入图片描述


    容器的删除命令
    # 删除容器
    docker rm 容器ID|容器名
    
    • 1
    • 2

    在这里插入图片描述


    端口映射

    • 容器天生具有隔离的特性,所以不同的容器拥有独立的网络系统
    • 两个不同的容器在容器内部完全可以使用相同的端口,并且可以使用宿主机当中已经使用的端口——这些相同的端口号实际上是毫无关联的,彼此之间也无法进行网络通信

    使用docker run的-p选项可以实现端口映射:

    # 将宿主机的8080端口映射到容器的80
    # -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
    docker run -d -p 8080:80 nginx
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在这里插入图片描述


    文件映射

    • 容器天生具有隔离的特性,所以不同的容器拥有独立的文件系统。
    • 在容器内部做任何的修改,都不会影响到宿主机或者其他容器

    使用docker run 的-v可以实现数据持久化:

    docker run -d -p 0.0.0.0:8081:80 -v /tmp/test:/usr/share/nginx/html nginx
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    • 容器中访问的/usr/share/nginx/html和宿主系统的/tmp/test内容是一致并且任何形式的修改都会在宿主系统和容器当中共享

  • 相关阅读:
    ActiveReportsJS:How to Add Angular Report Viewer Web App
    JUC——原子类
    Godot 4 教程《勇者传说》依赖注入 学习笔记(0):环境配置
    Zookeeper原理(data tree结构、工作原理、架构、应用场景)
    流量卡计费及相关介绍
    x11截屏源码(ubuntu18.04)
    中远麒麟堡垒机admin_commonuserSQL注入漏洞
    C语言 | Leetcode C语言题解之第329题矩阵中的最长递增路径
    第01篇:系统化学习, 搞定Spring容器管理
    edm邮件开发信模板
  • 原文地址:https://blog.csdn.net/weixin_43357398/article/details/137965059