zoukankan      html  css  js  c++  java
  • 容器技术和Docker的简单介绍(系统学习Docker01)

    写在前面

    后面来补~

    先来一张经典的图:

    虚拟机技术 VS 容器技术(docker就是典型代表实现)
    在这里插入图片描述
    可以看出:docker不需要我们提供OS的支持,它已经将OS集成在了自己的Docker Engine中。docker更加小巧。
    在这里插入图片描述

    在这里插入图片描述

    Docker + Kubernetes(生产中可能是有上千个容器)
    k8s:对容器的创建 管理 调度 运维

    Docker 基础篇
    第一章:容器技术 与Docker简介
    第二章:Docker 环境的各种搭建方法
    第三章:Docker的镜像和容器
    第四章:Docker的网络
    第五章:Docker的持久化和数据共享
    第六章:Docker Compose多容器部署

    Docker 进阶篇
    第七章:容器编排Docker Swarm
    第八章:Docker初体验-Docker Cloud 和 Docker 企业版
    第九章:容器编排Kubernets
    第十章:容器的运维和监控
    第十一章:Docker + DevOps实战项目
    在这里插入图片描述

    1.1 容器技术概述

    1.很久很久以前,我们部署一个应用:
    需要准备一台物理服务器;
    在Physical server 上安装操作系统;
    (可能还需要安装App的环境依赖,比如JDK)
    在Operating System上再部署我们的Application。
    - 部署非常慢
    - 成本非常高
    - 资源浪费
    - 难于迁移和扩展

    2.后来就出现了 虚拟化技术 ,
    需要准备一台物理服务器;
    在Physical server 上安装物理机自己的操作系统;
    使用Hypervisor技术,分离出一些物理机的资源出来;
    再在分离出来的一个个资源中安装OS,构成一个个虚拟机;
    再在虚拟机中安装应用环境依赖和部署应用。
    - 一个物理机可以分离多个虚拟机出来
    - 每个App可以运行在一个独立的VM中

    局限性:
    - 每个VM本身就是一个完整的OS,运行本身就会消耗一定资源
    一旦VM多了,就会浪费比较大的资源。

    通过Container对我们的App进行打包成集装箱,
    这样就可以车子轮船拉走
    运行在哪里都行。

    什么是容器?
    - 对软件和它的依赖 标准化打包
    - 应用之间相互隔离
    - 共享一个 OS Kernel
    - 可以运行在很多主流的操作系统上
    在这里插入图片描述

    1.2 Docker的架构和底层技术

    在这里插入图片描述
    docker engine
    在这里插入图片描述
    systemctl start docker
    启动docker之后就可以看见dockerd 这个进程

    [root@localhost ~]# ps -ef | grep docker
    root      1579     1  0 Feb08 ?        00:02:32 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    root     13816  6254  0 02:30 pts/5    00:00:00 grep --color=auto docker
    [root@localhost ~]# 
    
    

    Docker 架构
    在这里插入图片描述
    Docker 底层技术支持:

    Namespaces : 做隔离pid/net/ipc/mnt/uts
    Control Groups : 做资源限制
    Union file systems: Container 和 image 的分层
    

    1.3 Docker 魅力初体验

    WordPress 本来安装是比较麻烦的,但是在这里就是一个命令的事情~
    [root@localhost ~]# cd wordpress/
    [root@localhost wordpress]# ls
    docker-compose.yml
    [root@localhost wordpress]#cat docker-compose.yml

    version: '3'
    
    services:
       db:
         image: mysql:5.7
         volumes:
           - ./db_data:/var/lib/mysql
         restart: always
         environment:
           MYSQL_ROOT_PASSWORD: 123456
           MYSQL_DATABASE: wordpress
           MYSQL_USER: wordpress
           MYSQL_PASSWORD: wordpress
    
       wordpress:
         depends_on:
           - db
         image: wordpress:latest
         ports:
           - "9999:80"
         restart: always
         environment:
           WORDPRESS_DB_HOST: db:3306
           WORDPRESS_DB_USER: wordpress
           WORDPRESS_DB_PASSWORD: wordpress
    volumes:
        db_data:
    
    

    执行: docker-compose up -d

    [root@localhost docker-hadoop-spark-hive-master]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                  NAMES
    bbc250af997f        wordpress:latest    "docker-entrypoint.s…"   58 seconds ago       Up 55 seconds       0.0.0.0:9999->80/tcp   wordpress_wordpress_1
    
    

    访问:http://172.20.10.4:9999/
    在这里插入图片描述

    ok~ 美得很,这样就可以做个性化的设置了。
    最后,你会发现,多了一个db_data 数据文件夹,没错就是我们映射出来的数据库文件夹

    [root@localhost ~]# cd wordpress/
    [root@localhost wordpress]# ll
    total 8
    drwxr-xr-x. 6 polkitd root 4096 Feb  9 00:30 db_data
    -rw-r--r--. 1 root    root  545 Feb  9 00:29 docker-compose.yml
    [root@localhost wordpress]#
    

    这样你如果想要移植,你就可以把这个db_data也一并拷走就行。


    有什么问题,欢迎留言讨论~~

    更多文章:系统学习Docker 不迷路:https://blog.csdn.net/liuge36/category_7651616.html

  • 相关阅读:
    AES加解密
    redis HyperLogLog使用
    vi常用操作
    redis string使用
    用jdk命令定位java应用问题
    用户态、内核态及零拷贝
    缓存穿透与雪崩
    ReentrantLock、Semaphore、AQS
    redis list使用
    不同数据库取并集、交集、差集
  • 原文地址:https://www.cnblogs.com/liuge36/p/12614682.html
Copyright © 2011-2022 走看看