Docker 学习笔记 - Docker 镜像命令汇总

一、概念

镜像是 Docker 三大核心概念中最为重要的,是运行容器的前提。

Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会尝试先从默认镜像仓库下载(默认使用 Docker hub 公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。

下面总结了常用的镜像相关命令。

二、搜索镜像

docker search 命令可以搜索远端仓库中共享的镜像,默认搜索官方仓库中镜像,命令如下:

$ docker search [OPTIONS] TERM

三、 获取镜像

docker pull 命令如下:

$ docker pull [OPTIONS] NAME[:TAG|@DIGEST]

从 Docker hub 获取一个 ubuntu 镜像

$ docker pull ubuntu:latest

也可以从指定的非官方仓库下载,下面是从网易蜂巢下载 ubuntu 镜像

$ docker pull hub.c.163.com/library/ubuntu:latest

四、查看镜像

1. 使用 images 命令列出镜像

可以看到下面列出了刚刚下载的两个镜像信息。

$ docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
ubuntu                         latest              ccc7a11d65b1        2 months ago        120MB
hub.c.163.com/library/ubuntu   latest              ccc7a11d65b1        2 months ago        120MB

2. 使用 tag 命令添加镜像标签

为了方便后续工作使用特定的镜像,可以使用 tag 命令来为本地镜像任意添加新的标签。例如为 ubuntu:latest 镜像添加一个 myubuntu:latest 镜像标签:

$ docker tag ubuntu:latest myubuntu:latest

3. 使用 inspect 命令查看详细信息

docker inspect 命令可以获取镜像的详细信息,包括制作者、适用架构、各层的数字摘要等:

$ docker inspect ubuntu:latest

4. 使用 history 命令查看镜像历史

镜像文件由多个层组成,使用 history 命令可以列出各层的创建信息:

$ docker history ubuntu:latest

五、删除镜像

删除镜像使用 docker rmi 命令,格式如下,其中 IMAGE 可以是标签或 Image ID:

$ docker rmi [OPTIONS] IMAGE [IMAGE...]

删除 ubuntu:latest 镜像 :

$ docker rmi ubuntu:latest

注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的。可以使用 -f 参数来强制删除一个存在容器依赖的镜像,但并不推荐。正确的做法是,先删除依赖该镜像的所有容器,再来删除镜像。

演示删除存在容器的镜像

使用 ubuntu:latest 镜像创建一个简单的容器来输出一段话:

$ docker run ubuntu:latest echo 'hello'

使用 docker ps -a 命令可以看到本机上存在的所有容器,可以看到后台存在一个基于 ubuntu:latest 镜像创建的且处于退出状态的容器 bbb5ae0d3851:

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
bbb5ae0d3851        ubuntu              "echo hello"        22 seconds ago      Exited (0) 21 seconds ago                       unruffled_swartz

如果删除该镜像,Docker 会提示有容器正在运行,无法删除:

$ docker rmi ubuntu:latest
Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - container bbb5ae0d3851 is using its referenced image ccc7a11d65b1

正确的做法是,首先应该删除容器 bbb5ae0d3851,再删除镜像(ubuntu:latest 镜像ID 为 ccc7a11d65b1,此处用镜像ID删除)

$ docker rm bbb5ae0d3851
$ docker rmi ccc7a11d65b1

六、创建镜像

创建镜像的方法主要有三种:

1. 基于已有镜像的容器创建

该方法主要使用 commit 命令,格式如下:

$ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

2. 基于本地模板导入

用户也可以直接从一个操作系统模板文件导入一个镜像,主要使用 import 命令,格式如下:

$ docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

3. 基于 Dockerfile 创建

后面会单独总结

七、存出和载入镜像

1. 存出镜像

导出镜像到本地文件,可以使用 docker save 命令,例如导出本地的 ubuntu:latest 镜像为文件 ubuntu_latest.tar

$ docker save -o ubuntu_latest.tar  ubuntu:latest

之后,用户可以通过 ubuntu_latest.tar 文件将该镜像分享给其他人。

2. 载入镜像

可以使用 docker load 将导出的 tar 文件导入到本地镜像库,例如从文件 ubuntu_latest.tar 导入镜像到本地镜像列表:

$ docker load --input ubuntu_latest.tar 

或:

$ docker load < ubuntu_latest.tar 

八、上传镜像

可以使用 docker push 命令上传镜像到仓库,默认上传到 Docker Hub 官方仓库。

首先需要在 Docker Hub 注册账号,第一次上传需要登录,命令如下:

$ docker login

只能将镜像上传到自己的账号下面,比如我的用户名为 yanlongma,如果想上传本地的 ubuntu:latest 镜像,需要先添加新标签 yanlongma/ubuntu:latest,然后用 docker push 命令上传镜像:

$ docker tag ubuntu:latest yanlongma/ubuntu:latest
$ docker push yanlongma/ubuntu:latest

本文为博主学习笔记,首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:https://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

Docker 学习笔记 - Docker 核心概念与安装

一、Docker 三大核心概念

Docker 三大核心概念如下,只有理解了这三个核心概念,才能顺利的理解 Docker 容器的整个生命周期。

1. 镜像(Image)

Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了 Apache 应用程序(或用户需要的其他软件)。可以把它称为一个 Apache 镜像。

2. 容器(Container)

Docker 容器类似于一个轻量级的沙箱,Docker 利用容器来运行和隔离应用。简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层。

3. 仓库(Repository)

Docker 仓库类似于代码仓库,它是 Docker 集中存放镜像文件的场所。

二、安装 Docker

1. 版本选择

Docker 官网 上可以看到,目前 Docker 分 CE 和 EE 两种,每种支持的平台也略有不同,大家可以根据自己的需要进行选择,学习选择 CE 版本即可。详情如下图:

docker-ce-ee.jpg

2. 安装

安装很简单,大家到 Get Docker 页面下载对应平台的安装包安装即可。需要注意的是 macOS 10.10.3 之前版本、windows7和8 需要通过虚拟机方式来支持,下载对应平台的 Docker Toolbox 安装即可。

3. 检测是否安装成功

打开终端,执行 docker version,如出现如下信息则安装成功:

$ docker version
Client:
 Version:      17.09.0-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:40:09 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      17.09.0-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:45:38 2017
 OS/Arch:      linux/amd64
 Experimental: true

三、相关链接

Docker 官网:https://www.docker.com
Get Docker:https://www.docker.com/get-docker
Docker Toolbox:https://www.docker.com/products/docker-toolbox


本文为博主学习笔记,首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:https://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

Docker 学习笔记 - Docker 概览

1. 什么是 Docker

Docker 是基于 Go 语言实现的开源容器项目,诞生于2013年年初,最初发起者是 dotCloud 公司。Docker 自开源后受到广泛的关注和讨论,目前已有多个相关项目(包括 Docker 三剑客、Kubernetes 等),逐渐形成了围绕 Docker 容器的生态体系。

由于 Docker 在业界造成的影响力实在太大,dotCloud 公司后来改名为 DockerInc,并专注于 Docker 相关技术和产品的研发。

2. LXC

Docker 最重要的技术基石是 Linux 容器(Linux Containers, LXC)技术。

3. Docker 与传统的虚拟化方式的不同之处

docker-vs-vm.jpg

Docker 容器除了运行其中的应用外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减少系统开销。

传统虚拟机方式运行 N 个不同的应用就要起 N 个不同的虚拟机(每个虚拟机都要单独分配独占的内存、磁盘等资源),而 Docker 只需要启动 N 个隔离的“很薄的”容器,并将应用放进容器内即可。应用获得的是接近原生的运行性能。

4. Docker 容器技术与传统虚拟机的特性比较

特性Docker虚拟机
启动速度秒级分钟级
性能接近原生较弱
内存代价很小较多
硬盘使用一般为MB一般为GB
运行密度单机支持上千个容器一般几十个
隔离性安全隔离完全隔离
迁移性优秀一般

5. 为什么要使用 Docker

Docker 的构想是要实现“Build, Ship and Run Any App, Anywhere”, 既通过对应用的封装、分发、部署、运行生命周期进行管理,达到应用组件“一次封装,到处运行”的目的。这里的应用组件,既可以是一个 Web 应用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。

至于为什么要使用 Docker ?我觉得用上面这段话回答非常完美,具体的优点不在此赘述。


本文为博主学习笔记,首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:https://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

多说评论一次导回 Typecho 本地数据库

一、追忆往昔

第一次接触社交化评论类产品大概是在2012年左右,当时国内知名度较高的有多说、友言等,国际上比较有名的有Disqus,这类产品的优点在此就不多说了。

用过几款产品后,被多说漂亮的页面和体验所吸引,最终爱上了多说。开源的内容管理和博客系统换过很多,但评论只要能用多说,就一定用它。

后来被 typecho 的精简吸引,本人的个人博客系统也从 wp 换到 typecho,评论也一直用的多说。但 typecho 没有像 wp 那样完善的插件管理系统,看不到数据,加上对第三方的不信任(随时停更),所以也没有安装第三方插件;再加上是多说的死忠粉,实不实时同步到本地数据库也没什么大问题。

2017年3月21日,多说官方发布了一条重要通知:“多说即将关闭,将于2017年6月1日正式关停服务”。当时内心感慨万千,本想来个长篇大论感慨一下,奈何文采有限,最后发了一条朋友圈:

”多说“国内社交化评论”No.1“,如今竟然也落得如此下场!不能变现的项目,即使再优秀也难得长久,愿在新的领域里再创辉煌,前程似锦!”

感慨完了,数据还是要拿回来,既然是6月1日正式停止服务,那还是有大把时间可以挥霍的,所以一直也没上心。正好这个五一小长假来临前一天,感冒+高烧找上了门,只能在家闭门养病了(平时也不知道在瞎忙什么...)。

二、主要步骤

关于多说的数据格式和 typecho 表结构在这里就不分析了,主要说说主要步骤。这里是把多说json格式的数据转换成符合 typecho 表关系的 insert 语句,并写入到insert.sql文件中,有了这个文件相信聪明的你就知道该怎么做了!

1. 将多说数据导出

进入多说开发者后台=>工具=>导出数据,选中”包含文章数据“、”包含评论数据“,务必选中两项,然后导出数据,解压后拿到export.json文件备用。

2. PHP 代码如下:

在 export.json 同级目录新建import.php文件,代码如下【下载代码】:

<?php

// 读取 json 文件并转换成 php 数组
$json = file_get_contents("./export.json");
$data = json_decode($json, true);

// 文章数据
$threads = $data['threads'];    
// 评论数据
$posts = $data['posts'];    

// 多说的文章ID(thread_id)与 typecho 的文章ID(cid) 对应关系
$threadIdRelationCid = [];
foreach ($threads as $item) {
    $threadIdRelationCid[$item['thread_id']] = $item['thread_key'];
}

// 假设评论表 coid 小于10001,此处从10001开始自增,请根据实际最大值修改
$coid = 10001;
// 多说的评论ID(post_id) 与 typecho 的评论ID(coid) 对应关系
$postIdRelationCoid = [];
foreach ($posts as $item) {
    $postIdRelationCoid[$item['post_id']] = $coid++;
}

// 拼成多条 insert sql语句
$sql = '';
foreach ($posts as $item) {
    $coid = $postIdRelationCoid[$item['post_id']];
    $cid = $threadIdRelationCid[$item['thread_id']];
    $created = strtotime($item['created_at']);
    $author = $item['author_name'] ?: '';
    $mail = $item['author_email'] ?: '';
    $url = $item['author_url'] ?: '';
    $ip = $item['ip'];
    $text = $item['message'];
    $parent = 0;
    if (is_array($item['parents'])) {
        $parent = $postIdRelationCoid[$item['parents'][0]];
    }

    $sql .= "INSERT INTO `typecho_comments` 
(`coid`, `cid`, `created`, `author`, `authorId`, `ownerId`, `mail`, `url`, `ip`, `agent`, `text`, `type`, `status`, `parent`) VALUES
({$coid}, {$cid}, {$created}, '{$author}', 0, 1, '{$mail}', '{$url}', '{$ip}', NULL, '{$text}', 'comment', 'approved', $parent);\n";
}

// 将 sql 写入文件中
file_put_contents("./insert.sql", $sql);

echo "end \n";

在命令行执行php import.php 或在浏览器中访问import.php文件(推荐使用命令行方式),就会在该文件所在的目录生成一个insert.sql文件。

3. 小问题

部分评论数据里面可能会有 emoji 表情,但是 typecho 表的字符集是 utf8,如果需要保留 emoji 的童鞋把 pre_comments 表的字符集改成 utf8mb4 即可,不需要保留 emoji 表情的将 emoji 表情删掉重导即可。

本博客已切换到 typecho 自带的评论,默认的才是最好的!!!!!如果有和我一样需求的童鞋可以把代码拿去放心使用。

三、反思

不得不说,从产品角度讲,”多说“是一个非常优秀的产品,市场占有率非常高,但从商业角度讲,”多说“又是一个非常失败的案例,其成败都值得深思。

如果您看到了这篇文章,请留下您的思考!^_^


本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:https://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

使用 PHPStorm + Xdebug 实现断点调试

一、配置 Xdebug

配置 Xdebug 相关参数,在 php.ini 文件中新增如下配置,如果没安装的,请参考《PHP 安装 Xdebug扩展》:

[xdebug]
xdebug.remote_enable = on
xdebug.remote_handler = dbgp
xdebug.remote_mode = req
xdebug.remote_host = localhost
xdebug.remote_port = 9000
xdebug.idekey = PHPSTORM

重启 Apache,查看配置是否生效。

二、配置 PHPStorm

1. 配置 Servers,主要配置项如下图:
Mac 路径为:PHPStorm->Preferences->Languages & Frameworks->PHP->Servers
Win 路径为:File->Settings->Languages & Frameworks->PHP->Servers

phpstorm-servers.png

2. 配置 Debug,确保 Debug port 和上面的对应,其它选项默认即可:
Mac 路径为:PHPStorm->Preferences->Languages & Frameworks->PHP->Debug
Win 路径为:File->Settings->Languages & Frameworks->PHP->Debug

phpstorm-debug.png

三、配置 XDebug helper

1. 在Chrome中搜索并安装 XDebug helper 扩展。

2. 安装成功后,在 Chrome 扩展程序列表中找到 XDebug helper,点击选项,将 IDE key 选项选为 PhpStorm

四、使用 PHPStorm + Xdebug 实现断点调试

1. 在 PHPStorm 中开启 Debug 监听,点击右上角像电话一样的图标,图标变绿表示成功;

2. 在 Chrome 中开启 XDebug helper 插件:
chrome-debug.png

3. 在 PHPStorm 中设置断点,在需要断点调试的代码行前面单击即可;

4. 在浏览器中访问进行断点调试,成功后我们将可以看到如下调试信息:
phpstorm-xdebug-result.png


本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:https://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

PHP 安装 Xdebug 扩展

一、前言

1. Xdebug 简介

Xdebug 是一个开放源代码的 PHP 程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。当前最新版本为 Xdebug 2.5.0。

2. Xdebug 相关资料

官网:https://xdebug.org
官网文档:https://xdebug.org/docs

3. 选择合适的版本

如果不知道该下载哪个版本,官方提供了一个检测工具,只需要打印 phpinfo() 的信息,并全部复制到该工具的文本框内,并点击下面的“Analyse my phpinfo() output”按钮即可,官方将会提供详细的下载和安装介绍。工具传送门

如果官方的文档看不懂,可以继续往下看。

二、安装 Xdebug 扩展

以下为本人的安装步骤。

1. Linux、macOS 下安装

#下载、解压、安装、编译:

$ curl -O https://xdebug.org/files/xdebug-2.5.0.tgz
$ tar -zxf xdebug-2.5.0.tgz
$ cd xdebug-2.5.0
$ phpize
$ ./configure --with-php-config=/usr/bin/php-config
$ make
$ make install
Installing shared extensions:     /usr/lib/php/extensions/no-debug-non-zts-20131226/

编译成功后会提示一个路径,表示已经将扩展放置在该位置。

#. 修改 PHP 的配置文件php.ini,加载 Xdebug 模块:

zend_extension=xdebug.so

#. 重启apache,检测是否安装成功:

$ sudo apachectl restart
$ php -m | grep xdebug

如果出现 xdebug 则表示安装成功。

2. Windows 下安装

Windows 下安装 Xdebug 扩展,只需下载对应的 xdebug.dll 扩展即可。
下载地址:https://xdebug.org/download.php

#. 首先查看本地的 php 信息:
phpinfo.png

#. 然后选择对应的 xdebug 版本进行下载:
xdebug-version-info.png

#. 将下载后的 .dll 文件放到 PHP 的 ext 目录,并修改 php.ini 配置文件,添加如下内容:

zend_extension=php_xdebug-2.5.0-5.5-vc11.dll

#. 重启apache,检测是否安装成功:
phpinfo-xdebug.png

如果出现该信息,则说明安装成功;如果 apache 重启失败,说明下载的扩展和 PHP 版本不匹配,请认真检查后重新下载。


本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:https://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

Laravel 中使用 Redis 数据库

一、前言

Redis 是一个开源高效的键值对存储系统,它通常用作为一个数据结构服务器来存储键值对,它可以支持字符串、散列、列表、集合、有序集合。

1. 安装 predis/predis

在 Laravel 中使用 Redis 之前,你需要通过 Composer 来安装 predis/predis 包(~1.0):

$ composer require predis/predis

2. 配置

Redis 的配置文件在 config/database.php。在该文件中,我们可以看到一个包含 Redis 服务信息的配置数组,如下:

'redis' => [

    'cluster' => false,

    'default' => [
        'host' => env('REDIS_HOST', 'localhost'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => 0,
    ],

],

然后在 .env 文件中配置如下三项为自己的信息:

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

对于开发来说,默认的配置已经完全可以满足大部分的应用了。但是,你可以自由的在你环境中修改这个配置。你可以简单的添加 Redis 服务的名称,并且指定相应的服务器地址和端口。

cluster 选项会告诉 Laravel Redis 客户端在你的 Redis 集群中进行客户端的分片,这样就可以构成节点池并且创建大量有效的 RAM。但是,你需要注意的是客户端分片并不能处理故障转移。因此,它主要用来从一个主要数据存储地址获取可用的缓存数据。

另外,你可以在你的 Redis 连接定义里添加一个 options 数组,这样你可以指定 Predis 的客户端选项。

如果你的 Redis 服务器引入了认证机制,那么你需要在你的 Redis 服务配置数组中添加一个 password 配置项来提供凭证。

二、与 Redis 进行交互

在 Laravel 中,我们可以通过使用 Redis 假面 的各种方法来与 Redis 进行交互。Redis 假面支持动态方法,这意味着我们可以在 Redis 假面上调用任何的 Redis 命令,假面会直接将命令传递给 Redis。

1. 基本使用

下面演示 Redis 的 string 类型使用:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Redis;

class RedisController extends Controller
{
    public function set()
    {
        Redis::set('name', 'sean');
    }

    public function get()
    {
        $name = Redis::get('name');
        var_dump($name);
    }
}

2. 使用多个 Redis 连接

可以通过使用 Redis::connection 方法来获取 Redis 的实例:

$redis = Redis::connection();

这会返回默认的 Redis 服务器的实例。如果你没有使用集群服务,你可以传递配置文件中所定义的服务名称到 connection 方法中:

$redis = Redis::connection('other');

3. 管道命令

管道流水线可以允许你在一个操作中对 Redis 服务器执行多个命令。pipeline 方法接收一个参数: Closure ,它会接收 Redis 的实例。你可以在闭包中发布所有的命令,它们将会在一个操作中进行处理:

Redis::pipeline(function ($pipe) {
    for ($i = 0; $i < 1000; $i++) {
        $pipe->set("key:$i", $i);
    }
});

其它的使用,大家如果有兴趣可以自己进行继续摸索!


本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:https://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

PHP 安装 phpredis 扩展

本文主要介绍为 PHP 安装 phpredis 扩展,并用 PHP 代码连接 Redis 服务器。

一、安装 phpredis 扩展

1. Linux、macOS 下安装

#. 下载、解压、安装、编译:

$ curl -O https://nodeload.github.com/nicolasff/phpredis/zip/master
$ tar -zxf master
$ cd phpredis-master/
$ phpize
$ ./configure --with-php-config=/usr/bin/php-config 
$ make 
$ sudo make install
Password:
Installing shared extensions:     /usr/lib/php/extensions/no-debug-non-zts-20131226/

编译成功后会提示一个路径,表示已经将扩展放置在该位置。

#. 修改 PHP 的配置文件php.ini,加载 redis 模块:

extension=redis.so

#. 重启apache,检测是否安装成功:

$ sudo apachectl restart
$ php -m | grep redis

如果出现 redis 则表示安装成功。

2. Windows 下安装

Windows 下安装 phpredis 扩展,只需下载对应的 php_redis.dll 扩展即可。
下载地址:http://windows.php.net/downloads/pecl/snaps/redis/

#. 首先查看本地的 php 信息:
phpinfo.png

#. 然后选择对应的 phpredis 版本进行下载:
phpredis-info.png

#. 将下载解压后的 .dll 文件放到 PHP 的 ext 目录,并修改 php.ini 配置文件,添加如下内容:

;extension=php_igbinary.dll
extension=php_redis.dll

#. 重启apache,检测是否安装成功:
phpredis-extension.png

如果出现该信息,则说明安装成功;如果 apache 重启失败,说明下载的扩展和 PHP 版本不匹配,请认真检查后重新下载。

二、PHP 连接 Redis 服务器

下面演示使用 PHP 连接 Redis 服务器,首先开启 Redis 服务器。没有安装的童鞋请参考 《Redis 安装(一)》

#. 在服务器根目录下新建 redis.php,代码如下:

<?php

    //连接本地的 Redis 服务
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    //查看服务是否运行
    echo "Server is running: " . $redis->ping();

#. 访问 http://localhost/redis.php,如果出现以下内容,则说明连接成功:

Server is running: +PONG

本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:https://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

Redis 安装

一、前言

安装 Redis 是开始 Redis 学习之旅的第一步,安装之前先来个简单的介绍。

1. 版本规则

Redis 约定次版本号(即第一个小数点后的数字)为偶数的版本是稳定版,如:2.6,2.8;奇数版本是非稳定版,如:2.7,2.9。推荐生产环境使用稳定版本,目前最新的稳定版本是 3.2.5

2. 操作系统

Redis 兼容大部分 POSIX 系统 ,包括 Linux、macOS 等常用操作系统,在这些系统中推荐直接下载 Redis 源代码编译安装以获得最新的稳定版本。

Redis 官方不支持 Windows,但微软发布了一个可以在 Windows 运行的 Redis 分支,需要的童鞋也可以下载使用。

二、安装

下面介绍 Redis 的安装,只涉及亲测过的 Linux、macOS 和 Windows 三个操作系统。

1. Linux、macOS 下安装

下载、解压、安装:

$ wget http://download.redis.io/releases/redis-3.2.5.tar.gz
$ tar xzf redis-3.2.5.tar.gz
$ cd redis-3.2.5
$ make

编译成功后,就可以开启 Redis 服务端,命令如下:

$ src/redis-server 

然后打开 Redis 客户端与服务端进行互动,命令如下:

$ src/redis-cli 
127.0.0.1:6379> set name sean
OK
127.0.0.1:6379> get name
"sean"
127.0.0.1:6379>

2. Windows 下安装

当前 Redis 的 windows 最新稳定版本为 3.2.100,此处我们选择下载 Redis-x64-3.2.100.zip 即可。地址为:https://github.com/MSOpenTech/redis/releases。下载后解压压缩包,将解压后的文件夹复制到 D 盘下,并重命名为 redis。

下面我们开启 Redis 服务端,命令如下:

C:\Users\sean> D:
D:\>cd redis
D:\redis>redis-server.exe redis.windows.conf

打开 Redis 客户端与服务端进行互动,命令如下:

C:\Users\sean> D:
D:\>cd redis
D:\redis>redis-cli.exe
127.0.0.1:6379> set name sean
OK
127.0.0.1:6379> get name
"sean"
127.0.0.1:6379>

注:
(1). Redis 服务端默认加载 redis.conf 配置文件,由于压缩包中没有该文件,我们在此指定配置文件为 redis.windows.conf,大家可以根据自己的需要指定。
(2). 可以把redis的路径加到系统的环境变量中,这样以后就省得再切换磁盘和输路径啦!

三、相关资料

Redis 官网:http://redis.io
Redis Windows 版本:https://github.com/MSOpenTech/Redis


本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:https://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

macOS 中使用 phpize 动态添加 PHP 扩展的错误解决方法

使用 phpize 动态添加 PHP 扩展是开发中经常需要做的事情,但是在 macOS 中,首次使用该功能必然会碰到一些错误,本文列出了这些错误的解决方法。

问题一:

执行 phpize 报错如下:

$ phpize 
grep: /usr/include/php/main/php.h: No such file or directory
grep: /usr/include/php/Zend/zend_modules.h: No such file or directory
grep: /usr/include/php/Zend/zend_extensions.h: No such file or directory
Configuring for:
PHP Api Version:        
Zend Module Api No:     
Zend Extension Api No:  

解决方法:

$ ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include /usr/include

PS:如果 sudo 授权后仍提示没有操作权限,请参考文章 macOS 中的 Rootless 机制

问题二:

执行 phpize 报错如下:

$ phpize 
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

解决方法:

先安装 Homebrew :

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后安装 autoconf :

$ brew install autoconf

PS:Homebrew 的强大谁用谁知道。关于什么是 Homebrew,以及 Homebrew 的使用,请点击 Homebrew传送门。不建议手动安装 autoconf 软件包,因为依赖包太多~~


本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:https://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma