zoukankan      html  css  js  c++  java
  • 树莓派应用Docker

    Docker

    本期通过在树莓派上配置 Docker,来介绍 Docker 应用,欢迎来到“万物皆可 Docker”的时代!

    什么是 Docker ?

    Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。

    Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker 允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。

    Docker虚拟化

    Docker 容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker 也为容器提供更强的业界的隔离兼容。

    这里可以请成龙大哥来代言 Docker,“我用完之后是什么样子,你用完之后就是什么样子”,相比洗发水广告代言来说,代言 Docker 可以说是更能把握到精髓。

    请成龙大哥来代言Docker

    Docker 利用 Linux 核心中的资源分离机制,例如 cgroups,以及 Linux 核心名字空间(namespaces),来创建独立的容器(containers)。这可以在单一 Linux 实体下运作,避免引导一个虚拟机造成的额外负担。Linux 核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户ID与挂载文件系统,而核心的 cgroup 提供资源隔离,包括 CPU、存储器、block I/O与网络。从 0.9 版本起,Dockers 在使用抽象虚拟是经由 libvirt 的 LXC 与 systemd - nspawn 提供界面的基础上,开始包括libcontainer 库做为以自己的方式开始直接使用由 Linux 核心提供的虚拟化的设施。

    Docker 脚本化安装

    #更新系统源
    pi@raspberrypi:~ $ sudo apt-get update
    命中:1 http://mirrors.aliyun.com/raspbian/raspbian buster InRelease
    命中:2 http://packages.microsoft.com/repos/code stable InRelease
    正在读取软件包列表... 完成
    
    #脚本化安装
    pi@raspberrypi:~ $ sudo curl -sSL https://get.docker.com | sh
    # Executing docker install script, commit: 7cae5f8b0decc17d6571f9f52eb840fbc13b2737
    + sudo -E sh -c apt-get update -qq >/dev/null
    + sudo -E sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
    + sudo -E sh -c curl -fsSL "https://download.docker.com/linux/raspbian/gpg" | apt-key add -qq - >/dev/null
    Warning: apt-key output should not be parsed (stdout is not a terminal)
    + sudo -E sh -c echo "deb [arch=armhf] https://download.docker.com/linux/raspbian buster stable" > /etc/apt/sources.list.d/docker.list
    + sudo -E sh -c apt-get update -qq >/dev/null
    + [ -n  ]
    + sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
    + [ -n 1 ]
    + sudo -E sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce-rootless-extras >/dev/null
    + sudo -E sh -c docker version
    Client: Docker Engine - Community
     Version:           20.10.7
     API version:       1.41
     Go version:        go1.13.15
     Git commit:        f0df350
     Built:             Wed Jun  2 11:57:27 2021
     OS/Arch:           linux/arm
     Context:           default
     Experimental:      true
    
    Server: Docker Engine - Community
     Engine:
      Version:          20.10.7
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.13.15
      Git commit:       b0f5bc3
      Built:            Wed Jun  2 11:55:25 2021
      OS/Arch:          linux/arm
      Experimental:     false
     containerd:
      Version:          1.4.8
      GitCommit:        7eba5930496d9bbe375fdf71603e610ad737d2b2
     runc:
      Version:          1.0.0
      GitCommit:        v1.0.0-0-g84113ee
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
    
    ================================================================================
    
    To run Docker as a non-privileged user, consider setting up the
    Docker daemon in rootless mode for your user:
    
        dockerd-rootless-setuptool.sh install
    
    Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.
    
    
    To run the Docker daemon as a fully privileged service, but granting non-root
    users access, refer to https://docs.docker.com/go/daemon-access/
    
    WARNING: Access to the remote API on a privileged Docker daemon is equivalent
             to root access on the host. Refer to the 'Docker daemon attack surface'
             documentation for details: https://docs.docker.com/go/attack-surface/
    
    ================================================================================
    

    测试 Docker

    运行 hello-world 镜像来测试 Docker 是否安装成功。

    pi@raspberrypi:~ $ sudo docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    2c7ed585684a: Pull complete
    Digest: sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (arm32v7)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    

    Docker 常用命令

    #查看 Docker 版本
    docker -v
    sudo docker pull 仓库/镜像:版本(留空的话默认为 latest)
    sudo docker run 加参数,用来创建容器
    #查看运行容器
    sudo docker ps
    #查看所有下载的镜像
    sudo docker images
    #进入容器终端
    sudo docker exec -i -t ha /bin/bash
    #实时查看10行的 ha 日志
    sudo docker logs -f -t --tail 10 ha
    #重启 systemctl 守护进程
    sudo systemctl daemon-reload
    #设置 Docker 开机启动
    sudo systemctl enable docker
    #开启 Docker 服务
    sudo systemctl start docker
    

    安装 Docker 图形化界面

    下面简要介绍安装 Docker 图形化界面 Portainer,通过图形化界面对本地的 Dcoker 进行管理。

    #下载 Docker 图形化界面 portainer
    pi@raspberrypi:~ $ sudo docker pull portainer/portainer
    Using default tag: latest
    latest: Pulling from portainer/portainer
    94cfa856b2b1: Pull complete
    49d59ee0881a: Pull complete
    1101392a3cc7: Pull complete
    Digest: sha256:fb45b43738646048a0a0cc74fcee2865b69efde857e710126084ee5de9be0f3f
    Status: Downloaded newer image for portainer/portainer:latest
    docker.io/portainer/portainer:latest
    
    #创建 portainer 容器
    pi@raspberrypi:~ $ sudo docker volume create portainer_data
    portainer_data
    
    #运行 portainer
    pi@raspberrypi:~ $ sudo docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
    fac6e689051b35dfb7993af096f116ae673be69252ac2661cf7b8a8ebbc0932d
    

    安装完成后就可以通过访问浏览器 http://树莓派ip:9000 来登录 portainer 界面。

    配置初始管理员账号

    连接 Docker 环境

    Home 界面

    Dashboard 界面

    Containers 界面

    结 语

    后续我将介绍一些 Docker 应用的配置,通过 Docker 应用,我们可以将树莓派实现多个应用共存,而不是过一段时间就刷一个新的系统镜像,提高树莓派的利用率。

    Enjoy!

    欢迎关注我的公众号,持续更新中~~~

  • 相关阅读:
    codevs 1086 栈 2003年NOIP全国联赛普及组
    1200 同余方程 2012年NOIP全国联赛提高组
    【bzoj4939】【YNOI2016】掉进兔子洞(莫队)
    洛谷P3674 小清新人渣的本愿(莫队)
    Lucas卢卡斯定理
    组合数学习笔记
    洛谷P3178 [HAOI2015]树上操作(线段树)
    洛谷P3258 [JLOI2014]松鼠的新家(树上差分+树剖)
    洛谷P2526 [SHOI2001]小狗散步(二分图匹配)
    bzoj3140: [Hnoi2013]消毒(二分图)
  • 原文地址:https://www.cnblogs.com/alwaysbefunLinux/p/15135912.html
Copyright © 2011-2022 走看看