
在本教程的其余部分,我们将基于 ThinkPHP 框架完成一个天气查询的应用。使用 天气查询-API文档-开发指南-Web服务 API | 高德地图API 的接口来实现我们的功能。把查询数据缓存到 MySql 中,这样就不用每次频繁的请求第三方的接口了(有请求次数限制)
选择高德开放平台-天气查询 API 主要是因为它是免费的。当然你也可以使用其他的第三方天气查询接口,看个人喜好。
该应用是一个非常简单的 REST API 应用,主要实现两个接口。
在我们进行应用编码之前,首先使用 Docker 安装并运行 ThinkPHP
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的同时,更注重易用性。遵循 Apache2 开源许可协议发布,意味着你可以免费使用ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产品发布/销售 。
这就是为什么我选择它作为本教程的教学框架。我不想让你因为一个框架而放弃,但我也不想从头开始建立所有的东西,因为该教程的重点是Docker,而不是我们的PHP应用。
用Docker 创建 ThinkPHP 应用 实际上比用本地配置PHP环境所需的 *** 作少。并且为我们还需要使用 Composer,多亏了Docker,我们甚至不需要在主机上安装它。
首先打开你的终端,创建一个项目目录。
并进入到该目录中
现在使用[官方Composer Docker镜像](>
使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。
nsenter 可以访问另一个进程的名字空间。
为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取。
PID=$(docker inspect _format “{{ StatePid }}” <container>) //将<container>换成你的容器id
通过这个 PID,就可以连接到这个容器:
$ nsenter _target $PID _mount _uts _ipc _net _pid
更简单的,建议大家下载 bashrc_docker,并将内容放到 bashrc 中。
$ wget -P ~ >
$ echo “[ -f ~/bashrc_docker ] && ~/bashrc_docker” >> ~/bashrc; source ~/bashrc
这个文件中定义了很多方便使用 Docker 的命令,例如 docker-pid 可以获取某个容器的 PID;而 docker-enter 可以进入容器或直接在容器内执行命令。
$ echo $(docker-pid <container>)
$ docker-enter <container>
附bashrc_docker文件内容:
# Some useful commands to use docker
# Author: yeasy@github
# Created:2014-09-25
alias docker-pid=”sudo docker inspect _format ‘{{StatePid}}’”
alias docker-ip=”sudo docker inspect _format ‘{{ NetworkSettingsIPAddress }}’”
#the implementation refs from >
function docker-enter() {
if [ -e $(dirname "$0")/nsenter ]; then
# with boot2docker, nsenter is not in the PATH but it is in the same folder
NSENTER=$(dirname “$0″)/nsenter
else
NSENTER=nsenter
fi
[ -z "$NSENTER" ] && echo “WARN Cannot find nsenter” && return
if [ -z "$1" ]; then
echo “Usage: `basename “$0″` CONTAINER [COMMAND [ARG]]”
echo “”
echo “Enters the Docker CONTAINER and executes the specified COMMAND”
echo “If COMMAND is not specified, runs an interactive shell in CONTAINER”
else
PID=$(sudo docker inspect _format “{{StatePid}}” “$1″)
if [ -z "$PID" ]; then
echo “WARN Cannot find the given container”
return
fi
shift
OPTS=”_target $PID _mount _uts _ipc _net _pid”
if [ -z "$1" ]; then
# No command given
# Use su to clear all host environment variables except for TERM,
# initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
# and start a login shell
#sudo $NSENTER “$OPTS” su _ root
sudo $NSENTER _target $PID _mount _uts _ipc _net _pid su _ root
else
# Use env to clear all host environment variables
sudo $NSENTER _target $PID _mount _uts _ipc _net _pid env -i $@
fi
fi
}
@echo off
for /f "skip=1 tokens=1,2 delims= " %%a in ('docker ps') do echo %%~b=%%~a
pause
Docker容器运行后,如何进入容器进行 *** 作呢?起初我是用SSH。如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可。当我启动了五个容器后,每个容器默认是没有配置SSH Server的,安装配置SSHD,映射容器SSH端口,实在是麻烦。 我发现很多Docker镜像都是没有安装SSHD服务的,难道有其他方法进入Docker容器?有很多种方法,包括使用 docker attach 命令或 nsenter 工具等。使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。nsenter 可以访问另一个进程的名字空间。为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取。PID=$(docker inspect –format “{{ StatePid }}” <container>) //将<container>换成你的容器id通过这个 PID,就可以连接到这个容器:$ nsenter –target $PID –mount –uts –ipc –net –pid更简单的,建议大家下载 bashrc_docker,并将内容放到 bashrc 中。
以上就是关于Docker PHP 入门实践(三)全部的内容,包括:Docker PHP 入门实践(三)、如何打开多个终端进入Docker容器、哪位能帮帮我写一dos批处理,根据IMAGE的值获取CONTAIN ID,数据来源命令docker ps等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)