• 树莓派基本配置与Docker的安装


    一、树莓派的安装

    下载镜像

    在 树莓派官网

    https://www.raspberrypi.org/downloads/raspbian/

    Win32 DiskImager,是一个把系统镜像写入SD卡的工具:

    https://sourceforge.net/projects/win32diskimager/

    解压系统镜像文件得到img文件,点击Write,写入系统。 格式化为F32,插入树莓派树莓派即可开机。

    二、WiFi 网络配置

    由于没有桌面服务,就算开机也不能进入系统来操作,如果有网线的话直接把网线插入树莓派即可联网,如果没有网线,只有 wifi 的话,就需要设置 wifi 的网络配置。

    其实操作方法是很简单的:只要将刷好 Raspbian 系统的 SD 卡用电脑读取。在 boot 分区,也就是树莓派的 /boot 目录下新建 wpa_supplicant.conf 文件,按照下面的参考格式填入内容并保存到 wpa_supplicant.conf 文件即可。

    country=CN
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    
    network={
    ssid="WiFi1"
    psk="12345678"
    key_mgmt=WPA-PSK
    priority=1
    }
    
    network={
    ssid="WiFi-2"
    psk="12345678"
    key_mgmt=WPA-PSK
    priority=2
    scan_ssid=1
    }

    说明以及不同安全性的 WiFi 配置示例:

     ssid:网络的ssid

     psk:wifi的密码

     priority:连接优先级,数字越大优先级越高(不可以是负数)

     scan_ssid:连接隐藏WiFi时需要指定该值为1

    如果您的 WiFi 没有密码

    network={
    ssid="你的无线网络名称(ssid)"
    key_mgmt=NONE
    }

    如果您的 WiFi 使用WEP加密

    network={
    ssid="你的无线网络名称(ssid)"
    key_mgmt=NONE
    wep_key0="你的wifi密码"
    }

    如果您的 WiFi 使用WPA/WPA2加密

    network={
    ssid="你的无线网络名称(ssid)"
    key_mgmt=WPA-PSK
    psk="你的wifi密码"
    }

    三、开启 SSH 服务

    新系统的话是不可以通过 ssh 来连接树莓派的,会出现 Access denied 这个提示,所以需要手动开启,当然,这是很简单的。和 WiFi 配置相似,同样在 boot 分区新建一个文件,空白的即可,文件命名为 ssh 。注意要小写且不要有任何扩展名!

    四、树莓派启用root账户

    树莓派使用的linux是debian系统,所以树莓派启用root和debian是相同的。

    debian里root账户默认没有密码,但账户锁定。

    当需要root权限时,

    直接执行

    $ sudo su

    即可切换为root用户。

    树莓派默认用户是pi,密码为raspberry

    重新开启root账号,可由pi用户登录后,在命令行下执行

    $ sudo passwd root

    修改root的密码。

    执行此命令后系统会提示输入两遍的root密码,输入你想设的密码即可,然后在执行

    $ sudo passwd -u root

    开启root账号。

    如果上面执行完出现

    password expiry information changed.

    的提示

    是因为新版本ssh默认关闭root登陆,可以修改一下ssh的配置文件

    $ sudo vim /etc/ssh/sshd_config
    注:树莓派自带的vi编辑器十分难用,但vim是一个强大的编辑器,可以通过 sudo apt-get install vim 来安装

    五、树莓派上运行Docker

    安装Docker

    在此之前可先更换apt源;
    安装请参考:
    http://get.daocloud.io/#install-docker
    或者
    https://www.runoob.com/docker/ubuntu-docker-install.html
    或者
    Centos7安装Docker(详细安装教程)
     

    换成阿里源

    $ cd /etc/docker
    $ vi daemon.json
    {
    "registry-mirrors": [
    "https://kfwkfulq.mirror.aliyuncs.com",
    "https://2lqq34jg.mirror.aliyuncs.com",
    "https://pee6w651.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com"
    ],
    "dns": ["8.8.8.8","8.8.4.4"]
    }
    然后重启docker

    service docker restart

    Docker简单的使用

    操作镜像:

    #查看当前Docker的版本
    docker -v
    #搜索Docker, nginx代表您要搜索的镜像
    docker search nginx
    #拉取镜像文件
    docker pull nginx #查看已下载镜像 docker images
    #删除本地镜像
    docker rmi nginx
    #强制删除docker本地镜像
    docker rmi -f nginx
    #保存本地镜像至本地
    docker save -o nginx_image.docker nginx
    #加载镜像
    docker load -i nginx_image.docker

    使用dockerfile生成镜像(build):到了项目和 dockerfile 同一级的目录(注意后面的 . 不要省略)
    docker build -t my-python-app .  

    #批量删除无用镜像或容器
    #批量删除异常停止的docker容器
    docker rm `docker ps -a | grep Exited | awk '{print $1}'`
    #批量删除名称或标签为none的镜像
    docker rmi -f  `docker images | grep '<none>' | awk '{print $3}'`

    创建容器:

      ################    创建并启动容器    #################

      docker run -it --name 容器名 -p 8080(本地):80(容器) -d 镜像名                (sh或者bash)

    • -d设置容器在在后台一直运行。
    • -p 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。

    操作容器:

      启动容器

      docker run  [ option ] 镜像名称或者镜像id

      例如: docker run -it -p 80:80 -v /www:/www --name nginx 镜像名称或者id 

         映射主机串口和总是启动:docker run -itd --name gw4 -p 8200:80 --device='/dev/ttyAMA0' --restart=always gatewaysite_pro4

    • -i: 以交互模式运行容器,通常与 -t 同时使用;

    • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    • -p: 端口映射,格式为:主机(宿主)端口:容器端口

    • -d: 后台运行容器,并返回容器ID;
    • --name  "nginx": 为容器指定一个名称
    • -v :   Docker容器启动的时候,如果要挂载宿主机的一个目录(docker run -it -v /test:/soft centos /bin/bash      /test为宿主机目录     /soft为容器目录,会自动创建)
    • /bin/bash  启动容器时并进入容器


    #列出容器 -a表示未运行的也列出
    docker ps -a
    • -a :显示所有的容器,包括未运行的。

    • -f :根据条件过滤显示的内容。

    • --format :指定返回值的模板文件。

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

    • -n :列出最近创建的n个容器。

    • --no-trunc :不截断输出。

    • -q :静默模式,只显示容器编号。

    • -s :显示总的文件大小。

        进入到正在运行的容器

     docker exec -it 容器id或者名称 /bin/bash

    #启动容器
    docker start server1
    #停止容器
    docker stop server1
    #重启容器
    docker restart server1
    #强制删除容器
    docker rm -f server1
    #连接容器
    docker attach server1
    #在容器中输出"Hello World"
    docker exec server1 echo "Hello World

    #拷贝文件到容器
    docker cp /root(主机) 容器id:/root(容器)

    #查看docker网络
    docker network ls
    #查看容器的网络配置
    docker network inspect bridge
    #退出容器
    exit
    #查看当前进程
    ps aux

    #容器中的查看网络配置信息(ifconfig)
    ip ad li
    #容器中的查看路由表
    ip ro li


    #查看容器进程pid
    docker inspect --format "{{.State.Pid}}" mynginx(容器名)

    #docker网络访问
    brctl show
    #利用systemctl命令管理
    显示服务状态:systemctl status docker.service 列出服务层级和依赖关系:systemctl list-dependencies docker.service 启动服务:systemctl start docker.service 关闭服务:systemctl stop docker.service 重启服务:systemctl restart docker.service 设置服务自启动:systemctl enable docker.service 禁止服务自启动:systemctl disable docker.service 查看服务是否自启动:systemctl is-enabled docker.service 列出系统所有服务的启动情况:systemctl list-units --type=service 列出所有自启动服务:systemctl list-unit-files|grep enabled
     
    #-----------数据卷--------
    #把物理主机的/opt目录或者文件挂载到docker中
    docker run -it --name volume-test2 -h centos -v /opt(原):/opt(容器) centos
    docker run -it --name volume-test2 -h centos -v /opt(原):/opt:ro(容器) centos  (只读)
    #-----------数据卷容器--------
    #让volume-test1容器专门存数据,其他容器从volume-test1容器中读数据
    docker run -it volume-test3 --volumes-from volume-test1 centos

    #-----------Docker资源隔离和限制--------
    docker容器的本质是宿主机上的一个进程。
    Docker通过namespace实现了资源隔离,通过cgroups实现了资源限制,通过*写时复制机制(copy-on-write)*实现了高效的文件操作。

    1、linux的namespace机制
    namespace 机制提供一种资源隔离方案。
    PID,IPC,Network等系统资源不再试全局性的,而是属于某个特定的Namespace.
    每个namespace下的资源对于其他的namespace下的资源是透明的,不可见的。
    Linux 内核实现namespace的一个主要目的就是实现轻量级虚拟化(容器)服务,在同一个namespace下的进程可以感知彼此的变化,而对外界的进程一无所知,以达到独立和隔离的目的。

    namespace可以隔离哪些
    一个容器要想与其他容器互不干扰需要能够做到:
        文件系统需要是被隔离的
        网络也是需要被隔离的
        进程间的通信也要被隔离
        针对权限,用户和用户组也需要隔离
        进程内的PID也需要与宿主机中的PID进行隔离
        容器也要有自己的主机名
        有了以上的隔离,我们认为一个容器可以与宿主机和其他容器是隔离开的。
        恰巧Linux 的namespace可以做到这些。

    2、通过cgroups实现了资源限制:CPU和内存的限制

    需要使用到压力测试工具:stress

    stress安装教程:https://blog.csdn.net/datuzijean/article/details/86614597

    或者创建一个stress的dockerfile:

     

    (1)测试CPU

     查看cpu信息:cat /proc/cpuinfo

    开启一个压测stress:docker run -it --rm stress --cpu 1
    再开启一个压测stress:docker run -it --rm stress --cpu 1

    使用top查看CPU使用情况,会发现2个stress各占50%,每个容器默认权重都是1024,调整权重后(docker run -it --rm -c 512 stress --cpu 1),1,2占比2:1

    (2)测试内存

    docker run -it --rm -m 128m stress --vm 1 --vm-bytes 120m --vm-hang 0        (-m  限制容器使用128M内存,当--vm-bytes 256m时,大概是-m的2倍时,容器退出)

    #-----------Docker网络模式-----------

    (1)容器间的互联

    docker守护进程的启动选项 --icc=true(默认)

    容器重启后,容器的IP地址会发生改变,所以需要使用link来连接多个容器:

    命令:docker run -it --name mycentos2 --link=mycentos1:webtest centos             (webtest是别名))

    创建ing进入容器后,ping webtest就可以ping通mycentos1的容器

    可以使用环境变量查看:env

    也可以 vi /etc/hosts  查看webtest的地址映射

    (2)拒绝所有容器间的互联

     docker守护进程的启动选项 --icc=false

    vim /etc/sysconfig/docker  添加DOCKER_OPTS="--icc=false"

    重启docker服务:service docker restart

    (3)允许特定容器中的链接

     docker守护进程的启动选项 --icc=false   --iptables=true

    --link

    (4)容器与外部网络的链接

    --ip-forword=true   决定系统是否会转发流量,默认开启

    --iptables  iptables是与Linux内核集成的包过滤防火墙系统

    阻止特定IP访问特定容器: iptables -I DOCKER -s 192.168.238.2 -d 172.17.0.2 -p TCP --dport -j DROP

    查看iptables

     #-----------registry私有镜像仓库-----------

    在192.168.238.1的机器上执行:

    下载registry镜像:docker pull registry

    创建容器:docker run -d -p 5000:5000 registry

    给要上传的镜像打标签,这里以redis为例:docker tag redis 192168.238.1:5000/redis:v1

    上传redis到registry私有仓库:docker push 192168.238.1:5000/redis:v1

    注意:此时若报错,可执行如下操作:

      vim /etc/sysconfig/docker

      在OPTIONS=后面加上:--insecure-registry 192.168.238.1:5000

      然后重启容器:systemctl restart docker

    在192.168.238.2的机器上执行:

      vim /etc/sysconfig/docker

      在OPTIONS=后面加上:--insecure-registry 192.168.238.1:5000

      然后重启容器:systemctl restart docker

    然后就可以pull镜像了:docker pull 192168.238.1:5000/redis:v1

     #-----------公有镜像仓库 docker hub-----------

     https://www.cnblogs.com/yangyangming/p/11646666.html



  • 相关阅读:
    rest-framework框架——解析器、ur控制、分页、响应器、渲染器
    rest-framework框架——认证、权限、频率组件
    rest-framework框架——视图三部曲
    rest-framework框架——APIView和序列化组件
    Django——CBV与FBV
    CRM——权限
    CRM——销售与客户
    CRM——讲师与学生
    CRM——起步
    jsp标签
  • 原文地址:https://www.cnblogs.com/yangyangming/p/11470926.html
Copyright © 2020-2023  润新知