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镜像不支持,要换一个。换过后问题解决。


posted @ 2020-01-16 13:50  旺得福000  阅读(394)  评论(0编辑  收藏  举报