Docker PHP 入门实践(三)

Docker PHP 入门实践(三),第1张

在本教程的其余部分,我们将基于 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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9498477.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存