zoukankan      html  css  js  c++  java
  • Ubuntu环境的docker实践——进阶操作

    1.使用镜像加速

    由于docker在使用过程中,不可避免地要访问官方镜像站,如果本地网络条件不佳,就会影响用户体验。为此,可以选择docker镜像加速器。
    我使用的是阿里的镜像加速。首先要注册一个阿里云账号,然后开通容器镜像服务,后台会自动分配加速地址。
    新建或编辑现有/etc/docker/daemon.json文件,添加下面内容,将<your accelerate address>,替换成分配的加速地址,保留引号。

    {
        "registry-mirrors": ["<your accelerate address>"]
    } 
    

    重启

    $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker
    

    之后就可以体验飞一样的速度了!

    2.多容器应用

    Docker Compose

    Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application's services. Then, using a single command, you create and start all the services from your configuration.(来源:GitHub关于Compose的介绍

    $ #下载指定版本的docker compose
    $ sudo curl -L https://github.com/docker/compose/releases/download/**1.25.1**/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    $ #为二进制文件添加可执行权限
    $ sudo chmod +x /usr/local/bin/docker-compose
    $ #创建软链接(类似于Windows的快捷方式)
    $ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    $ #检查版本
    $ docker-compose --version
    

    使用Docker Compose部署LNMP

    所谓LNMP,即Linux下的Nginx,Mysql,PHP

    • 制作nginx,php,mysql的Dockerfile镜像描述文件,Ubuntu环境下使用docker hub上的官方源即可
      • mysql:更新源,安装nano,curl,net-tools,iputils-ping等基本工具,便于查看文件内容,执行请求和配置网络
      • php:设置地区;更新源,安装基本工具,以及libfreetype6-dev,libjpeg62-turbo-dev,libpng-dev;安装扩展,需包含pdo_mysql(用于php连接mysql);设置配置文件等
      • nginx:更新源,安装nano,curl,net-tools,iputils-ping,便于查看文件内容,执行请求和配置网络
    • 编写nginx和php配置文件,放在相应Dockerfile的目录中
    • 建立app文件夹,存放各类web请求和php脚本(包括php信息脚本和数据库连接测试脚本)
    • 编写yml,使用Docker Compose将多个容器联合起来,其中各个容器的依赖关系为:nginx依赖于php,php依赖于mysql

      PHP成功
    <?php
    phpinfo();
    


    连接数据库的php代码运行成功

    <?php
    
    $servername = "LNMP-mysql";
    $dbName='填入数据库名称';
    $username = "填入数据库用户";
    $password = "填入数据库密码";
    
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbName", $username, $password);
        echo "连接成功"; 
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
    ?>
    

    查看Docker Compose日志

    之前遇到过mysql容器一直重启

    此时可使用命令:

    $ docker logs LNMP-mysql
    


    发现原来是我设定的一个database文件夹,用于存储数据库信息的,初始化时里面有文件,要清空
    清理之后,问题解决。

    3.Raspberry Pi 4B上部署docker

    安装docker

    参考自【树莓派】树莓派入门之docker安装

    • 直接运行脚本安装:
    $ curl -sSL https://get.docker.com | sh
    
    • 或者按下面方法:
    $ sudo apt-get update
    $ sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
    $ #加入仓库钥匙,注意命令中使用的是raspbian表示树莓派
    $ curl -fsSL https://download.docker.com/linux/raspbian/gpg | sudo apt-key add -
    $ #添加docker客户端仓库stable是稳定版
    $ echo "deb [arch=armhf] https://download.docker.com/linux/raspbian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
    $ sudo apt-get update
    $ sudo apt-get install -y docker-ce
    
    $ # docker加速(见第1部分)
    $ sudo nano /etc/docker/daemon.json
    $ # 添加如下内容
    {
      "registry-mirrors": ["<your accelerate address>"]
    }
    
    $ #重启docker并常驻服务
    $ sudo systemctl restart docker.service 
    $ sudo systemctl enable docker.service
    
    $ #用hello-world测试
    $ sudo docker run hello-world
    $ #查看版本
    $ sudo docker --version
    

    安装docker-compose

    参考自树莓派4B安装docker-compose(64位Linux)
    由于树莓派是ARM架构的,官方没有提供安装版本,因此只能“曲线救国”

    $ sudo apt-get update
    $ sudo apt-get install -y python python-pip
    $ sudo apt-get install libffi-dev
    $ sudo pip install docker-compose
    

    将python2.7的dist-packages文件夹复制到docker的工作目录下,本人在安装过程中会提示backports 不存在,于是跳过了这一步,并不影响使用

    $ cd  /usr/local/lib/python2.7/dist-packages && cp -r backports /usr/local/lib/python2.7/dist-packages/docker/transport/
    

    查看版本

    $ docker-compose version
    


    如果遇到报错No module named shutil_get_terminal_size
    很可能是python版本的问题,使用

    $ sudo pip3 install docker-compose
    

    将基于docker的LNMP在Raspberry Pi上部署

    最大的障碍在于Raspberry Pi是基于ARM芯片的,docker hub上的镜像很少,之前使用的镜像不能全部运行在它上面,mysql的官方镜像就没有支持arm的。
    所以使用mariadb数据库替代mysql,并选择支持arm的镜像,修改docker-compose.yml以及其他相关文件,运行部署。

    之后又增加了phpmyadmin,利用web管理服务器,在部署的时候前期发现phpmyadmin无法使用,经查容器一直在重启,用之前查看日志的方法,发现报错:standard_init_linux.go:211: exec user process caused "exec format error",再查原因又是arm平台的问题,官方的phpmyadmin镜像不支持,要换一个。换过后问题解决。


  • 相关阅读:
    Java
    HashMap数据结构与实现原理解析(干货)
    Java
    Java
    Java
    面向对象基础
    Java
    Java
    Java
    shell脚本
  • 原文地址:https://www.cnblogs.com/fjlinww/p/12173890.html
Copyright © 2011-2022 走看看