Docker容器

1.什么是docker?
1)docker是基于GO语言实现的开源容器项目。(go语言也是现在很火的一个语言,类似c语言,高效,轻量级,打包的此语言体积较小。容器,是装东西的。docker容器,是一个虚拟的OS,一种运行环境,不提供完整系统,利用现有硬件系统。)
2)docker镜像更像是操作系统os虚拟环境,虚拟环境通过dockerserver提供,dockerserver用现有linux的环境的服务给docker。

3)一次打包,到处执行。docker容器类似一个进程,镜像类似一个文件。docker容器是通过docker镜像创建的。给一个相同的物理linux环境,安装相应或者更高的dockerserver版本后,docker容器就可以执行了。

2.docker和vm的对比

结构区别:
  多个docker容器可以同时运行在一台linux宿主机上,类似于安装了很多app,但彼此是独立的。但dockerserver故障,所有容器都不能用了。docker类似一个虚拟的内核,通过调用dockerserver调用外部环境,各个docker容器是相互独立的,但都是资源共享同一个linux,利用率高,性能好。面向软件工程师。面向内核,软件,秒级别启动。
  vm需要分享宿主机硬件设备,但是操作系统更加灵活,可以安装各种操作系统,但是资源彼此独立,利用率低,损耗硬件资源多。面向的是硬件工程师.面向硬件,分钟的。

应用层面上区别:
  1.docker体积小,vm安装操作系统体积大
  2.docker启动快,vm启动慢
  3.docker兼容行好,打好包,用对应的版本或者更高版本的dockerserver就可以运行。vm兼容性不好,或者移植性不好,必须依托宿主。

但总体,两者面向的层面不一样,不具备可比行。两者都有不同的优势和缺点。docker可以部署在vm上,但vm不能部署在docker上。

3.docker特点
  效率高。将各种应用程序几分钟Docker化到一个环境。依赖“写时复制”模型,使得改应用程序非常迅速。运行里面的应用程序,几乎1秒启动。另外,同一台宿主机可以同时运行多个容器,充分利用资源。
       职责分明。开发关心容器中的程序,运维人员关心如何管理容器。开发人员打包后,此时的环境,就是实际生产中的实际环境。docker设计的目的就是加强开发人员写代码的开发环境与应用程序要部署环境一致性。
       结构完整。docker设计的目标就是开发、测试、部署 、上线运行周期缩短。让应用程序具备可移植性,易于构建,并易于协作。
       契合微服务。鼓励面向服务体系结构和微服务架构,一个容器一个应用独立服务,每个容器可以相互沟通,形成弱耦合,形成分布式。微服务一般都是可以独立运行的,加上docker,内省性就相对较高,内部就可以提供完整性环境。

4.docker架构

  

    这里说明下,docker daemon是守护进程,运行在宿主机(docker_host)中。

5.安装运行

  1.下载docker-ce.repo

        docker-ce.repo是docker的核心库,需要自己创建,本地yum无库源,需要此文件才能下载对应的docker软件  

     下载:   curl   https://download.docker.com/linux/centos/docker-ce.repo  -o  /etc/yum.repos.d/docker-ce.repo

             

 

  2.在下载docker前,需要一些依赖库

            yum install -y  https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm

      3.安装docker-ce核心,就是安装docker-demon

     yum install -y docker-ce

         

 

 

   可以看到:这三个是核心、客户端、docker-daemon 

6.启动、状态查看、关闭
  systemctl start docker
  systemctl status docker/service docker status/按q退出

  docker info  查看状态
  systemctl stop docker.socket/docker.service  关闭服务

7.配置阿里镜像加速器

  默认情况下Docker从Docker Hub上下载镜像资源,慢,因此配置阿里云,https://www.aliyun.com/

      

 

 

  linux下的配置:

         

 

    systemctl daemon-reload

  systemctl restart docker

        docker info

      

 8.Docker 镜像操作

    8.1什么是 Docker 镜像

        Docker 镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引 导系统,即 bootfs,这很像典型的 Linux/Unix 的引导文件系统。Docker 用户几乎永远不会和引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文 件系统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker 容器启动是需要一些文件 的,而这些文件就可以称为 Docker镜像。

   

   8.2列出镜像(查看本地镜像

      docker image(  目前docker下没有任何镜像)

     

       REPOSITORY:镜像所在的仓库名称

       TAG:镜像标签

       IMAGE ID:镜像 ID

       CREATED:镜像的创建日期(不是获取该镜像的日期)

       SIZE:镜像大小

   8.3 搜索镜像

  docker search  +镜像名称(搜索远程仓库已有的,默认是docker hub中的,但是我们配置了阿里云,所以是阿里云里面的)    

 

 

         name:仓库名称(其实就是镜像名称,但是在远程仓库中,一个镜像就是一个仓库,所以是仓库名称,远程仓库可以有很多镜像,就是很多仓库,通过仓库+版本号找到自己想要的镜像)

         description:镜像描述

         stags: 用户评分

         official:是否官方

         AUTOMATED:自动构建,表示该镜像由 Docker Hub 自动构建流程创建的

         如果不是官方提供,不是自动构建的,就是用户自己上传自己的。我们使用,找评分高的

  8.4 拉取镜像

       拉取镜像相当于从远程 Registry 中下载镜像到本地,命令: docker pull 镜像名称

        

 

   可以看到下载了一堆东西,这些东西“可能是” (监听、Server、Client、引导分区等),每一个自己又是一个镜像,所以看起来下载了一堆东西,如果安装旧版本,会看到一些已经存在的就是已经在上面latest下载过了,如下,下载一个旧的5.7.30版本。

  

 

    8.5 再次查看本地镜像(repository+tag 名称+标签 ==要找的镜像)

         

   8.6 删除本地镜像(docker rmi $REPOSITORY:$TAG )

           

 

9.Docker容器的操作

   下载好的镜像,已经yum安装在了本地环境中,我们要做的就是启动容器,例如mysql。可以把容器看成简易版的 Linux 环境(包括 root 用户权限,进程空间,用户空间和网 络空间等)和运行在其中的应用程序。

  9.1新建容器 

             docker create [options]

             options常见参数:--name:给容器起一个新名字。为容器指定一个名称

              -i:以交互模式运行容器,通常与-t 连用

              -t:为容器重新分配一个伪终端,通常与-i 连用

             -P:随机端口映射

               -p:指定端口映射,hostPost:containerPort

               -e:配置信息

            -d:后台执行

                                         -v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录

      

        如上,生成容器的唯一编号。-v表示内外映射,如下,容器文件保存到本地中。

  

  9.2查看容器

       docker container ls   --help

            

             options 参数说明:

    -l:显示最近创建的容器

    -n 数字:显示最近 n 个创建的容器

    -a:列出所有的运行过的容器

    -q:列出容器 id

 

      

           可以查看出,因为容器还没有启动,所以 deocker container ls为空。

    9.3启动容器

      docker  start mysql

 

     9.4停止容器

      docker stop 容器 ID(或者名字)

 

     9.5强制关闭容器

   docker  kill  容器

    9.6创建并启动容器

      docker run [options] 镜像名字或者 ID

   docker run -p 3306:3306 --name djw_mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.30

    9.7与运行中的docker进行交互

     docker exec [options] 容器 ID [command]  

    

 

 

    9.8查看容器的日志

            docker logs -f -t --tail 行数 容器 ID

       docker logs -f -t --tail 5 mysql

    -f 参数代表长期监控日志数据

           -t 额外增加时间戳

            --tail 行数 显示末尾多少行日志

    9.9查看容器中的进程

            docker top 容器 ID 或名称

    

 

 

       9.10查看容器内部详情

          docker inspect 容器 ID 或名称

          docker inspect mysql

    9.11复制容器数据到宿主机

   docker cp 容器 ID 或名称:容器内路径 宿主机路径

           复制 MySQL 配置到宿主机: docker cp mysql:/etc/mysql ~/tmp/conf

      

 

     9.12容器的暂停与恢复

 

        docker pause 容器 ID 或名称

        docker pause mysql 

        docker unpause 容器 ID 或名称

        docker unpause mysql

     

 

     9.13docker容器的删除

  要删除的容器,必须是关闭状态的。、

       docker rm 容器 ID 或名称

       docker rm mysql

 

posted @ 2021-05-16 18:05  小熊尤里  阅读(591)  评论(0编辑  收藏  举报