走进舒适圈の小窝

Loading...

Docker

什么是Docker

 Docker是一个开发、交付和运行应用程序的开放平台

 Docker允许将应用程序与基础设施分开,以便快速交付软件。使用Docker,可以像管理应用程序一样管理基础设施。利用Docker交付、测试和部署代码,可以显著减少编写代码和生产环境中运行代码的延迟


容器

轻量的虚拟化技术,目的和虚拟机一样,都是为了创造“隔离环境”,虚拟机采用的是系统级别的资源隔离,而容器采用的进程级别的系统隔离。它可以让开发者将企业需要的各种应用及应用依赖文件封装在Docker镜像文件中,然后在任何物理设备上安装实现虚拟化,让应用程序彻底脱离底层设备,可以在物理机之间灵活迁移部署

Docker 和 虚拟机

  • Docker容器可以在秒级时间内快速启动和停止,相较传统虚拟机显著提升

  • Docke容器对系统资源要求低,数千个Docker可以同时运行在同一个主机上

  • Docker容器通过类似于Git的操作来方便用户获取和更新应用镜像

  • Docker容器通过Docker file配置文件实现自动化创建和灵活部署,提高工作效率

  • Docker除了运行其中的应用外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减少系统开销

核心组件

仓库、镜像、容器

  • 镜像:Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些运行时准备的配置参数。镜像可以用来创建Docker容器,用户可以使用设备上已有的镜像来安装多个相同的Docker容器

  • 仓库:存放镜像的文件的地方,用户创建完镜像后,可以将其传到公共仓库或私有仓库,另一台主机需要使用时,直接下载即可

  • 容器:镜像创建的运行实例(进程),Docker利用容器来运行应用,每个容器都是相互隔离的、保证安全的平台

安装

官方安装文档地址: 在 CentOS 上安装 Docker

  1. 卸载旧版本

    yum remove docker \
      docker-client \
      docker-client-latest \
      docker-common \
      docker-latest \
      docker-latest-logrotate \
      docker-logrotate \
      docker-engine \
      docker-selinux 
    
  2. 设置存储库

    (二选一)
    #国内yum源
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    #官方yum源
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
  3. 安装Docker(docker-ce是社区版,docker-ee是企业版)

    sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  4. Docker启动相关命令

    #开启docker
    systemctl start docker
    #关闭docker
    systemctl stop docker
    #docker状态
    systemctl status docker
    #重启
    systemctl restart docker
    #设置开机启动
    systemctl enable docker
    
  5. Docker的卸载

    • 卸载依赖

      systemctl stop docker
      yum remove docker-ce docker-ce-cli containerd.io
      
    • 删除资源(docker的默认工作路径),因为主机上的映像、容器、卷或自定义配置文件不会自动删除。

      rm -rf /var/lib/docker
      rm -rf /var/lib/containerd
      
  6. 配置镜像加速服务

    # 创建目录
    mkdir -p /etc/docker
    
    # 复制内容
    tee /etc/docker/daemon.json <<-'EOF'
    {
        "registry-mirrors": [
            "http://hub-mirror.c.163.com",
            "https://mirrors.tuna.tsinghua.edu.cn",
            "http://mirrors.sohu.com",
            "https://ustc-edu-cn.mirror.aliyuncs.com",
            "https://ccr.ccs.tencentyun.com",
            "https://docker.m.daocloud.io",
            "https://docker.awsl9527.cn"
        ]
    }
    EOF
    回车:
    
    
    # 重新加载配置
    systemctl daemon-reload
    
    # 重启Docker
    systemctl restart docker
    

常用命令

  • 显示Docker的版本信息

    docker version
    

  • 查看镜像

    # 查看本地主机上的镜像
    docker images [OPTIONS]
    
    # 查看本地所有的镜像
    docker images -a
    

    OPTIONS 说明:

    -a:列出本地所有的镜像(含中间镜像层)
    -q:只显示镜像ID
    --digests:显示镜像的摘要信息
    --no-trunc:显示完整的镜像信息


    各个选项说明:

    • REPOSITORY:表示镜像的仓库源

    • TAG:镜像的标签

    • IMAGE ID:镜像ID

    • CREATED:镜像的最后时间

    • SIZE:镜像的大小

  • 搜索镜像(也可在DockerHub上搜索)

    # 从网络中查找需要的镜像,可以通过以下命令搜索
    docker search [OPTIONS] 镜像名称
    
    # 例如搜索mysql
    docker search mysql
    
    # 搜索镜像并且是官方的
    docker search --filter "is-official=true" mysql
    
    # 搜索镜像并starts大于多少的
    docker search --filter stars=10 mysql
    

    OPTIONS说明:

    --filter=:过滤
    --no-trunc:只显示完整的镜像描述
    --automated:只列出automated build类型的镜像

  • 拉取镜像

    # 特别注意:如果版本号不指定则默认最新的版本
    docker pull 镜像名称
    docker pull 镜像名称:版本号
    # 例如下载mysql8.0镜像
    docker pull mysql:8.0
    
  • 删除镜像

    如果镜像已经生成了容器,则不允许删除,必须先停止该容器并删除,然后再删除镜像

    docker rmi 镜像名字或者说镜像id
    docker rmi 镜像名字1  镜像名字2 
    
  • 列出正在运行的容器

    docker ps [OPTIONS]
    

    OPTIONS说明:

    -a:列出当前所有正在运行的容器+历史上运行过的
    -l:显示最近创建的容器
    -n:显示最近n个创建的容器
    -q:静默模式,只显示容器编号
    --no-trunc:不截断输出

  • 创建容器

    #创建容器命令如下
    docker run [OPTIONS] 镜像ID/镜像名称 [COMMAND]
    
    #创建并启动容器的简单举例
    docker run -it --name=mycentos centos:7 /bin/bash
    # /bin/bash:放在镜像名后的是命令,表示容器创建之后执行,这里我们希望有个交互式Shell,因此用的是 /bin/bash
    

    OPTIONS说明:

    --name=容器新名字(=可以用空格代替):为创建的容器命名。

    -p:表示端口映射,格式为:主机(宿主)端口:容器端口。前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

    -v 或者 --volume:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

  • 进入正在运行的容器

    docker exec -it 容器名称或者容器ID /bin/bash
    
  • 启动容器、重启容器

    #启动容器
    docker start 容器ID或者容器名
    
    #一次启动多个
    docker start $(docker ps -a -q)
    
    #重启容器
    docker restart 容器ID或容器名
    
  • 停止容器

    #停止容器
    docker stop 容器ID或容器名
    
    #强制停止容器
    docker kill 容器ID或容器名
    
    #一次停止多个
    docker stop $(docker ps -a -q)
    
  • 删除容器

    #删除已停止的容器
    docker rm 容器ID或容器名
    
    #强制删除容器(包括运行中的)
    docker rm -f 容器ID或容器名
    
    #一次性删除多个容器
    docker rm -f $(docker ps -a -q)
    
  • 容器的其他命令

    #查看容器日志
    docker logs 容器ID或容器名
    
    #查看容器详细信息
    docker inspect 容器ID或容器名
    
    #列出或指定容器端口映射
    docker port 容器ID或容器名
    
    #显示一个容器运行的进程
    docker top 容器ID或容器名
    
  • 挂载

    双向绑定与映射,从虚拟机中进行修改,就可以改变容器中的内容。

    对于mysql的存储文件路径,一般都会挂载到容器里,因为容器一旦删除了数据也就不再了,但是宿主机的数据不会被删除。

    # 创建并启动容器mycentos3,并挂载linux中的/usr/local/mytest目录到容器的/usr/local/mytest;
    # 也就是在linux中的/usr/local/mytest操作相当于对容器相应目录操作
    docker run -di --name=容器的名字 -v 宿主机目录:容器目录 --name=容器名称 centos:7
    
    #比如:
    docker run -it --name=mycentos3 -v /usr/local/mytest:/usr/local/mytest  centos:7 /bin/bash
    #这样无论我们在宿主机上还是在容器中,在这个目录下对文件做了增删改操作,那么两边都是同步的。
    
posted @ 2024-12-21 14:43  走进舒适圈  阅读(85)  评论(0)    收藏  举报