docker相关

一、docker介绍,跟传统虚拟机的比较

1 什么是虚拟化

打破实体结构间的不可切割的障碍
    -vmware,kvm,openstack,docker,k8s
    -云服务器:vmware,kvm虚拟化出来的
    -阿里云,腾讯云:opensatck,阿里飞天。用来管理虚拟化出来的操作系统
    -docker:进程级别的隔离,装在虚拟机或者云服务器上,一个云服务上可以跑出几百个docker容器,成百上千的服务器上,就会有个上万个容器
    -k8s:不同机器的上万个容器如何管理
    -虚拟化:打破实体结构间的不可切割的障碍
    
2 什么是Docker
    - Go语言实现,开源出来。
    - docker-ce(免费),docker-ee(收费)
    - 通过go语言对lxc技术的一个封装

3 容器与虚拟机比较
    -docker不需要虚拟硬件和操作系统,轻量级,占用体积小,启动快
    
4 Docker是一个客户端-服务器(C/S)架构程序(mysql,redis都是cs架构),整套RESTful API

5 docker非常重要的概念:镜像(image)与容器(container)
    先有镜像---》镜像运行起来是容器(真正的执行单位)
    面向对象的类            对象

6 镜像来源
    -镜像就是一堆文件
    -从远程仓库获取(拉取)

二、docker安装
    1.1 windows安装
      1 windows安装(不建议你装)http://get.daocloud.io/

    1.2 乌班图
      0 卸载
        sudo apt-get remove docker docker-engine docker.io containerd runc
      1 安装必要工具
        sudo apt-get update
        sudo apt-get install \
           apt-transport-https \
           ca-certificates \
           curl \
           gnupg-agent \
           software-properties-common
      2 安装GPG证书
        curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
        换成阿里云
        curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
        2 写入软件源信息
          官方
            sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
          换成阿里云
            sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

        3 更新并安装docker-ce
          sudo apt-get -y install docker-ce
        4 开启docker服务
           systemctl status docker

      1.3 centos上安装(必须7.0以上)
          6.8安装docker,自行搜索,升级内核版本
          docker是在linux3.1以上内核中写出来的,在乌班图下开发的,docker的新特性,乌班图先看到,
          官方建议docker运行在centos7 以上的系统

        0 卸载
          yum remove docker docker-common  docker-selinux docker-engine
          rm -rf /var/lib/docker

          1 更新yum
          yum update

        2 安装需要的软件包, yum-util 
          yum install -y yum-utils device-mapper-persistent-data lvm2

        3 执行(向你的yum源,增加一条记录)
          yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

        4 安装 
          yum install docker-ce

        5 验证安装(查看版本)
          docker -v  
          # 自从分了docker-ce和docker-ee以后,以年份命名版本
          Docker version 19.03.12, build 48a66213fe(19年03月12日发布)

        6 启动docker服务
          systemctl start docker

        7 停止docker服务,重启docker服务
          systemctl stop docker
          systemctl restart docker

        8 开机启动  
          systemctl enable docker

        9 查看概要信息
          docker info(你可能写了一个管理docker的运维平台)

      1.4 远程仓库

        # 注册,登录 https://hub.docker.com/
        # 可以上传镜像(类似于github),你把你制作的镜像传上去,别人可以下载使用
        # 配置加速(之前去https://hub.docker.com/),阿里云,清华,做了一个备份,配置好以后,再拉镜像会去国内地址拉取
          第一步:vi /etc/docker/daemon.json   (切换到目录文件下)
          第二步:写入以下文件
              {
                "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
              }
三、镜像操作

  -1 第一个hello-world(没有任何意义)
      docker run hello-world
        1 客户端连到服务端,服务下载了hello-world镜像
        2 通过镜像跑起容器来
        3 容器输出一些东西,通过服务端发送给客户端,客户端展示在窗口里了

  0 查找镜像
      方式一:https://hub.docker.com/ 搜索(直接去网站搜索,推荐)
      方式二:docker search (命令窗口搜索)

  1 拉取镜像 
      docker pull hello-world                     #拉取最新版本latest
      docker pull hello-world:nanoserver

    练习:拉取python3.6镜像,redis最新镜像,mysql5.7镜像
          docker pull python:3.6
          docker pull redis
          docker pull mysql5.7
          docker pull centos:centos7

  2 查看机器上有哪些镜像
      docker images
      REPOSITORY  TAG   IMAGE ID   CREATED   SIZE
      镜像名字            版本    id号             创建时间   大小

  3 删除镜像
      docker rmi 镜像名字/id号(# 如果还有基于这个镜像的容器,是不允许删除镜像的,先删除容器:docker rm 容器名字/容器id,再删除images)
    
四、镜像是什么

    -就是一堆文件,这堆文件通过docker跑起来,就是容器,你现在就把他当成,一个操作系统内跑了这个软件(centos+redis)

    -假设centos7的镜像跑起来,容器你就当成在你宿主机上跑了一个centos7的操作系统(虚拟机)
    
  补充(了解)
      docker image inspect 46ff56815c7c
      docker image ls
      docker image rm
    
五、容器操作

  1 删除容器
     docker rm 容器名字/容器id

  2 启动并运行容器(可以重复启动并运行容器,重复一次就多一个容器。就相当于一个进程,互相隔离的。创建运行同一个镜像时,--name=不能一样)
      # 通过centos:centos7镜像,创建一个容器名字叫mycentos,并且把它运行起来
      docker run -di --name=mycentos centos:centos7
        打印出容器的id号

  3 查看机器上正在运行的容器
      docker ps

  4 查看宿主机上所有的容器(包括停止的)
      docker ps -a

  5 停止容器
      docker stop 容器名字/id号

  6 启动容器
      docker start 容器id/名字
    
  7 容器的创建和启动(******)
      -创建:docker create --name=xxx redis
        docker create --name=test-container centos:centos7 ps -A
      -启动
        docker start 容器名字/id号

      -容器一直运行的原因
          -它有一条前台进程,一直在运行
          -以后如果自己制作的镜像,运行起容器,必须有个可以夯住的命令
          -如果该夯住的命令结束,该容器也就结束了

      -创建并启动(run)
        -i:表示运行容器
        -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
        -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
        --name :为创建的容器命名。如果不写,会自动分配一个名字(英文人名)
        -v:表示目录映射关系(前者是宿主机目录,后者是容器目录,映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
        -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射


        如命令:docker run -it --name=myredis redis

 ###### 注意,docker run  镜像 如果本地没有,会先pull,再run

  8 进入容器的几种方式(并不是真进入)

      第一种:docker exec -it  容器id /bin/bash
             可以执行 ls 等linux命令 
              exec真正的作用是在容器内执行命令
      第二种:ssh连接(容器内部装ssh服务端)

  9 退出 

    exit

  10 文件拷贝
      -从宿主机拷贝到容器内部
          docker cp 需要拷贝的文件或目录 容器id:/home                                            docker cp wmt.txt 容器id:/home
      -从容器内部拷贝到宿主机
          docker cp 容器id:/home/需要拷贝的文件或目录 /app                                    docker cp 容器id:/home/lqz.txt /app

  11 目录挂载 (已经跑起来的容器不能挂在,只能关了重新挂)

      docker run -di --name=mycentos99 -v /home/lqz:/home centos:centos7           -v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。
      # 一旦挂载,以后宿主机目录内修改,同样影响容器内部

  12 端口映射
      docker run -di -p 6377:6379 redis:latest               如果要指定映射到某个端口,则可以使用 -p [port]:[port] 参数,标识来指定容器端口绑定到主机端口
      # 了解:/usr/local/bin/docker-entrypoint.sh
    
  13 查看容器详细信息
      docker inspect 容器名字/id号
        # 查看ip地址
      docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)


六、应用部署

  # 在容器内部署mysql
  # -e表示配置环境变量
    docker run -di --name=mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7              #此时-e后面配置了密码

  # 官方提供的配置mysql
    docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
        
  # 在容器内部署redis
    docker run -di -p 6377:6379 redis:latest
        
  # 在容器内部署nginx
    docker run -di --name=mynginx -p 8080:80 nginx

posted @   新入世界的小白  阅读(59)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示