• 5.0 docker的使用


    一、概述

    1. 简介

      Docker是一个开源的应用容器引擎,类似于虚拟机技术,但是不是虚拟机,是一个轻量级的容器技术,但是它却实现了虚拟机里面的资源隔离,它的性能远远高于虚拟机的

    解释:

    eg: Windows官网的系统是没有安装常用软件和配置的,这时,我们可以把Windows系统的常用软件以及驱动等安装好,然后打包成一个Windows镜像系统。如果别人需要安装系统时,直接安装这个镜像系统,里面就有常用的软件以及驱动了。docker类似于这种机制,虽然它们完全不是一个东西,但是思路一致。比如,在我们开发和运维的过程中,我们经常需要在linux服务器上安装各种环境mysql、redis、tomcat等,这时可以使用docker将已经安装配置好的软件可以打包成一个镜像,比如mysql已经在第一个linux上面安装并配置好了,可以把它打包成一个镜像。这样,别人如果想要给他的linux服务器里面安装mysql,那只要他的linux服务上安装了docker,他就可以用这个docker将之前打包好的mysql镜像直接放在他的服务器里面,运行镜像就可以了,只要运行起来这个镜像(运行起来的镜像我们称为一个容器),比如mysql镜像一运行起来就有mysql容器,mysql就是在它的mysql容器中运行。打包的redis镜像在别的服务器运行就来,它就是redis容器,它在自己的容器里面运行。每一个容器之间它是沙箱的隔离机制。这样的话,想要在其他的linux服务器安装mysql、redis环境,只需要安装一次打包好镜像,在其他服务器里面运行镜像就可以了,不用在每一个服务器里面都安装。
    View Code

    Docker支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。

    运行中的这个镜像称为容器,容器启动是非常快速的。

     

    2. 核心概念

    沙箱机制(Sandboxie)沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响。

    docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上,只要在你的机器上安装了docker程序,

                             你的机器就称之为docker主机,不管是你的本机,还是在你的远程机器);

    docker客户端(Client):连接docker主机进行操作(客户端通过命令行或者其他工具使用docker,类似于mysql的客户端和mysql服务器);

    docker仓库(Registry):用来保存各种(使用docker)打包好的软件镜像(docker有公用仓库Docker hub,你也可以自己搭建私人仓库);

    docker镜像(Images):软件打包好的镜像,放在docker仓库中(以后要安装软件时,去docker仓库中,将我们要安装的镜像下载到本机,

        然后直接用docker的命令运行mysql镜像,之后会产生/启动mysql容器,msyql容器就像我们启动了一个mysql).

        应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。

    镜像:是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

    docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用;

        image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。

    如想要在我们的机器上安装5个tomcat, 下载到tomcat镜像,将这个镜像运行上5次,每一次都是都会生成一个容器,这样就有

    5个tomcat容器,就模拟了5个tomcat,只对容器的启动停止,就是tomcat的启动停止。

    二、使用步骤

    1. 使用Docker的步骤

    (1)安装Docker

    (2)去Docker仓库找到这个软件对应的镜像(eg:mysql);

    (3)使用Docker运行这个镜像(mysql),这个镜像就会生成一个Docker容器(这个容器就代表当前正在运行的镜像,比如tomcat镜像,一运行生成tomcat容器);

    (4)对容器的启动停止就是对软件的启动停止;

    配置镜像加速:(国外的太慢)

    阿里云镜像加速:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

    vim /etc/docker/daemon.json  你可能没有这个文件,但是这并不影响

    在文件中加入(阿里云镜像):{ "registry-mirrors": ["https://wjfi17tc.mirror.aliyuncs.com"] }

    sudo systemctl daemon-reload

    sudo systemctl restart docker  重启docker服务

    2. 安装Docker

    1)安装linux虚拟机

    1)VMWare、VirtualBox(安装);

    2)导入虚拟机文件centos7-atguigu.ova;

    3)双击启动linux虚拟机;使用 root/ 123456登陆

    4)使用客户端连接linux服务器进行命令操作;

    5)设置虚拟机网络;

    桥接网络===选好网卡====接入网线;

    6)设置好网络以后使用命令重启虚拟机的网络

    service network restart

    7)查看linux的ip地址:

      ip addr

    8)使用客户端连接linux;

    2)在linux虚拟机上安装docker

    步骤:

    1、检查内核版本,必须是3.10及以上
      uname -r
    2、安装docker
      yum install docker
    3、输入y确认安装
    4、启动docker
      systemctl start docker  //restart 重先启动
      docker -v
    5、开机启动docker
      systemctl enable docker
    6、停止docker
      systemctl stop docker

    3. Docker常用命令&操作

    3.1 镜像操作

    操作   命令             说明
    检索   docker search 关键字      eg:docker search redis 我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。  参考:图1
    拉取   docker pull 镜像名:tag      :tag是可选的,tag表示标签,多为软件的版本,默认是latest (最新的)
    列表   docker images        查看所有本地镜像 ,参考图2
    删除   docker rmi image-id       删除指定的本地镜像

    docker仓库

    3.2 容器操作

    软件镜像(QQ安装程序)---->运行镜像---->产生一个容器(正在运行的软件,运行的QQ);

    以后如果还有装qq,那么只需要运行镜像就可以了,镜像只需要一个。

    步骤:

    1、搜索镜像
      docker search tomcat
    2、拉取/删除 镜像
      docker pull tomcat
     docker rmi 镜像id //删除指定镜像
     docker rmi $(docker images -q) //删除所有镜像
    3、根据镜像启动容器
    // --name: 自定义容器名 -d: 后台运行 tomcat:latest是要运行的镜像名:版本号
     docker run --name mytomcat -d tomcat:latest
     // -p:将主机的端口映射到容器的一个端口上
     docker rum -d -p 8888:8080 tomcat
    3.1 进入正在运行的容器并以命令行交互
     docker exec -it 容器ID bashShell // eg: bashShell /bin/bash 在容器中打开新的终端,并且可以启动新的进程
     docker attach 容器ID //attach 直接进入容器启动命令的终端,不会启动新的进程(重新进入)
    4、查看运行中的容器  docker ps eg: docker ps --format "table {{.ID}} {{.Image}} {{.Names}} " 表示显示指定的字段 可参考附录1
    docker ps -a  //查询所有容器,包括未运行的 5
    、启动、停止、删除容器  docker stop  容器的id  //停止正在运行中的容器
     docker start 容器id //启动容器,也可以是容器的name
    docker rm 容器id eg: docker rm -f 4b88132f957e -f是强制删除的意思,在无法正常停止的时候使用
    docker rm -f $(docker ps -q) //批量删除运行着的容器 -f是强制删除 -q是container id 
    6、查看容器内部细节
     docker inspect 容器ID

     8、退出容器
       exit //容器停止并退出   

       ctrl+P+Q //容器不停止退出

      9、docker清理命令
      docker kill $(docker ps -a -q) //杀死所有正在运行的容器 -q:只显示容器编号
      docker rm $(docker ps -a -q) //批量删除所有已经停止的容器
      docker rmi $(docker images -q -f dangling=true) //删除所有未打标签的镜像

    10、为了演示简单关闭了linux的防火墙
      service firewalld status ; // 查看防火墙状态
      service firewalld stop // 关闭防火墙
    11、查看容器的日志
      docker logs container-name/container-id
    12、从容器内拷贝文件到主机上(从宿主机内拷贝文件到容器,则通过数据挂载的方式)
      docker cp  容器ID:容器内路径 目的主机路径
      docker cp host_path containerID:container_path //从主机复制到容器
    更多命令参看 https:
    //docs.docker.com/engine/reference/commandline/docker/ (英文网) docker命令大全

    3)、安装MySQL示例

    docker pull mysql

     错误的启动

    [root@localhost ~]# docker run --name mysql01 -d mysql
    42f09819908bb72dd99ae19e792e0a5d03c48638421fa64cce5f8ba0f40f5846
    
    mysql退出了
    [root@localhost ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           PORTS               NAMES
    42f09819908b        mysql               "docker-entrypoint.sh"   34 seconds ago      Exited (1) 33 seconds ago                            mysql01
    538bde63e500        tomcat              "catalina.sh run"        About an hour ago   Exited (143) About an hour ago                       compassionate_
    goldstine
    c4f1ac60b3fc        tomcat              "catalina.sh run"        About an hour ago   Exited (143) About an hour ago                       lonely_fermi
    81ec743a5271        tomcat              "catalina.sh run"        About an hour ago   Exited (143) About an hour ago                       sick_ramanujan
    
    
    //错误日志
    [root@localhost ~]# docker logs 42f09819908b
    error: database is uninitialized and password option is not specified 
      You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD;这个三个参数必须指定一个

    正确的启动

    [root@localhost ~]# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
    b874c56bec49fb43024b3805ab51e9097da779f2f572c22c695305dedd684c5f
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    b874c56bec49        mysql               "docker-entrypoint.sh"   4 seconds ago       Up 3 seconds        3306/tcp            mysql01

    做了端口映射

    [root@localhost ~]# docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
    ad10e4bc5c6a0f61cbad43898de71d366117d120e39db651844c0e73863b9434
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    ad10e4bc5c6a        mysql               "docker-entrypoint.sh"   4 seconds ago       Up 2 seconds        0.0.0.0:3306->3306/tcp   mysql02

    mysql以3307端口启动:docker run -p 3307:3306 --name mysq3307 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7  [参考]

    几个其他的高级操作

    docker run --name mysql03 -v /conf/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:tag
    把主机的/conf/mysql文件夹挂载到 mysql docker容器的/etc/mysql/conf.d文件夹里面
    改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql)
    
    mysql其他常用参数: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci //指定编码
    --lower_case_table_names=1  //表名不区分大小写 --restart=always //开机自动启动

    附录:

    附录1:

    docker ps 默认的显示内容过多,当值过长时就会导致折行,可读性很差,所以希望只显示自己关心的某些列。

    可以自己指定显示的模板,例如:
    docker ps --format "table {{.ID}} {{.Image}} {{.Names}} "


    附图说明:

    图片仓参考区:此部分作为上面的补充说明

    图1:

    docker search mysql:搜索镜像的命令

    index:索引名称;

    name:这是镜像名字,只有写"docker.io/:后面的部分就可以;

    description:镜像的描述;

    stars:有多少人关注了这个镜像,单位为k(千人);

    official:是不是mysql官方发布的镜像,官方的没有帮我们做一些自动配置,我们可以自定义配置;

    automa:是不是自动构建的,如果写了ok,说明这个镜像是自动化的,我们只要一运行,所有的配置都帮我们配置好了;

    图2:

    docker images:查看本地所有镜像

    repository:从哪里下载的镜像
    tag:标签
    image_id:镜像id
    created:这个镜像是被什么时候创建的
    size:镜像大小

    参考: 沙箱机制

  • 相关阅读:
    springboot+swagger生成api文档
    字符串格式化
    Navicat过期
    网页版的支付宝授权登录(vue+java)
    window,sts安装python
    PageHelper分页+排序
    android那些事之Bitmap、InputStream、Drawable、byte[]、Base64之间的转换关系
    两种解析JSON的方法
    蓝牙那些事之远程设备
    蓝牙那些事之状态监听
  • 原文地址:https://www.cnblogs.com/shiyun32/p/10874866.html
Copyright © 2020-2023  润新知