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
- 直接运行脚本安装:
$ 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镜像不支持,要换一个。换过后问题解决。