zoukankan      html  css  js  c++  java
  • 架构师的成长之路初片~Virtual-容器

    什么是容器?

      现实中的容器用来装东西的

    Linux里面的容器用来干嘛?

      Linux中的容器是装应用的

      容器就是将软件打包成标准单元,用于开发、交付和部署

      容器技术已经成为应用程序封装和交付的核心技术

    容器技术的核心有以下几个内核技术组成:

      Cgroups(Control Groups)资源管理

      SELinux 安全

      NameSpace--命名空间

    容器技术的优缺点

    优点:

      相比于传统的虚拟化技术,容器更加简洁高效

      传统的虚拟机需要给每个VM安装操作系统

      容器使用的共享公共库和程序

    缺点:

      容器的隔离性没有虚拟化强

      共用Linux内核,安全性有先天缺陷

    传统虚拟化VS容器技术(图)

    Docker与容器

      *docker和容器的关系

      Docker是完整的一套容器管理系统

      Docker提供一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术

    DOCKER安装:

    配置系统环境:

    1:需要64位操作系统

    2:至少rhel6.5以上的版本,建议rhel7

    3:关闭防火墙(不是必须)

      由于docker软件会自动管理防火墙

    配置YUM仓库:

      系统软件,位于centos-1804源中

      扩展依赖包,位于extras源中

      docker软件,位于docker目录中

    安装前准备:

    1、禁用 selinux [SELINUX=disabled]
    
    ​ 2、卸载防火墙 [yum -y remove firewalld-*]
    
    ​ 3、docker软件安装包在 云盘kubernetesdocker 目录下,将 docker 目录上传到跳板机
    
    ​ 4、准备 2 台 2cpu,2G内存的云主机
    
    主机名    IP地址    最低配置
    docker-0001    192.168.1.31    2CPU,2G内存
    docker-0002    192.168.1.32    2CPU,2G内存
    跳板机yum源添加docker软件
    
    [root@ecs-proxy ~]# cp -a docker /var/ftp/localrepo/ 
    [root@ecs-proxy ~]# cd /var/ftp/localrepo/
    [root@ecs-proxy localrepo]# createrepo --update .
    在 node 节点验证软件包
    
    [root@docker-0001 ~]# yum makecache
    [root@docker-0001 ~]# yum list docker-ce*
    以下操作所有 node 节点都需要执行
    
    开启路由转发
    
    [root@docker-0001 ~]# vim /etc/sysctl.conf
    net.ipv4.ip_forward = 1
    [root@docker-0001 ~]# sysctl -p
    [root@docker-0001 ~]# yum install -y docker-ce
    [root@docker-0001 ~]# systemctl enable --now docker
    [root@docker-0001 ~]# ifconfig # 验证,能看见 docker0
    [root@docker-0001 ~]# docker version # 验证,没有报错

    导入 centos nginx redis ubuntu 四个镜像到 node 节点(使用 lftp 或 scp 均可)

    镜像素材在云盘的 kubernetes/docker-images/ 目录下

    docker run 启动一个新的容器

    ​ -i 交互式,-t 终端, -d 在后台启动

    # 在后台启动容器
    [root@docker-0001 ~]# docker run -itd nginx:latest 
    9cae0af944d81770c90fdeacf7a632aaa749b0c9fbc0f4cb104e1d1257579e5e
    # 在前台启动容器
    [root@docker-0001 ~]# docker run -it --name myos centos:latest /bin/bash
    [root@de46e6254efd /]# ctrl+p, ctrl+q # 使用快捷键退出,保证容器不关闭
    
    # 查看容器
    [root@docker-0001 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED
    de46e6254efd        centos:latest       "/bin/bash"              2 minutes ago  
    9cae0af944d8        nginx:latest        "nginx -g 'daemon of…"   7 minutes ago  
    # 只查看id
    [root@docker-0001 ~]# docker ps -q
    # 查看所有容器,包含未启动的
    [root@docker-0001 ~]# docker ps -a
    
    # 进入容器的默认进程
    [root@docker-0001 ~]# docker attach de46e6254efd
    [root@de46e6254efd /]# exit # 退出后容器会关闭
    
    # 启动、停止、重启容器
    [root@docker-0001 ~]# docker start   de46e6254efd
    [root@docker-0001 ~]# docker stop    9cae0af944d8
    [root@docker-0001 ~]# docker restart 9cae0af944d8
    
    # 查看容器详细信息
    [root@docker-0001 ~]# docker inspect 9cae0af944d8
    ... ...
          "IPAddress": "172.17.0.2",
    ... ...
    [root@docker-0001 ~]# curl http://172.17.0.2/
    
    # 进入容器,查看路径
    [root@docker-0001 ~]# docker exec -it 9cae0af944d8 /bin/bash
    root@9cae0af944d8:/# cat /etc/nginx/conf.d/default.conf
    ... ...
          root   /usr/share/nginx/html;
    # 从容器内拷贝首页文件到宿主机,修改后拷贝回容器内
    [root@docker-0001 ~]# docker cp 9cae0af944d8:/usr/share/nginx/html/index.html ./index.html
    [root@docker-0001 ~]# vim index.html
    Hello Tedu
    Hello Tedu
    Hello Tedu
    [root@docker-0001 ~]# docker cp ./index.html 9cae0af944d8:/usr/share/nginx/html/index.html
    [root@docker-0001 ~]# curl http://172.17.0.2/
    
    # 删除容器
    [root@docker-0001 ~]# docker rm -f de46e6254efd
    # 删除所有容器
    [root@docker-0001 ~]# docker rm -f $(docker ps -aq)


    容器内部署应用

    [root@docker-0001 ~]# docker rm -f $(docker ps -aq)
    [root@docker-0001 ~]# docker run -it --name myapache centos:latest
    [root@a7f9d0c3e3e2 /]# rm -f /etc/yum.repos.d/*.repo
    #---------------------不要退出这个终端,在另一个终端拷贝 yum 配置文件到容器--------------------
    [root@docker-0001 ~]# docker cp /etc/yum.repos.d/CentOS-Base.repo myapache:/etc/yum.repos.d/
    #------------------------回到创建容器的终端继续执行命令--------------------------------------
    [root@a7f9d0c3e3e2 /]# yum install -y net-tools httpd
    [root@a7f9d0c3e3e2 /]# echo Hello world >/var/www/html/index.html
    [root@a7f9d0c3e3e2 /]# export LANG=C
    [root@a7f9d0c3e3e2 /]# ifconfig
    [root@a7f9d0c3e3e2 /]# /usr/sbin/httpd -DFOREGROUND
    # 启动服务以后 ctrl-p, ctrl-q 退出
    [root@docker-0001 ~]# curl http://172.17.0.2/
    Hello world
  • 相关阅读:
    基于 mockm 的一款 HBuilderX 插件
    css 加载中省略号动画
    定时获取远程文件并存储更新记录
    跨域实例和解决方案
    接口数据总是返回 null 如何回馈和处理
    get 请求中如何携带 body 参数
    看起来像一个 textarea 的 div
    js 高精度运算
    nodejs 服务终端使用 nodemon 运行脚本时实时输出
    解决 vue-cli3 多入口打包 BASE_URL is not defined
  • 原文地址:https://www.cnblogs.com/ahaocloud/p/14765956.html
Copyright © 2011-2022 走看看