|
|
第1行: |
第1行: |
| =docker memcache for wiki at 201910=
| |
| ==install==
| |
| <pre>
| |
| docker run --name memcached -d -p 11211:11211 memcached:1.5-alpine --restart=always
| |
|
| |
| #如果已经启动了则可以使用如下命令:
| |
| $docker update --restart=always <CONTAINER ID>
| |
|
| |
|
| |
| memcached:<version>-alpine dokcer 官方的是没有密码的 安全只能是加防火墙或者下面这个不是官方的 在2020年,我自己打包了 算是安全了
| |
|
| |
| docker run -d --name memcached -p 11211:11211 -e MEMCACHED_USERNAME=memcache -e MEMCACHED_PASSWORD=123456 frodenas/memcached </pre>
| |
|
| |
| ==** securyty==
| |
|
| |
| https://github.com/memcached/memcached/wiki/SASLHowto
| |
|
| |
|
| |
|
| |
| ===iptables===
| |
| <pre>
| |
| 用iptables 因为本身安装docker后自带了呢
| |
|
| |
| 由这个得知
| |
|
| |
| iptables -L --line-numbers
| |
| Chain DOCKER (2 references)
| |
| num target prot opt source destination
| |
| 1 ACCEPT tcp -- anywhere 172.17.0.3 tcp dpt:http
| |
| 2 ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:11211
| |
| 3 ACCEPT tcp -- anywhere 172.18.0.3 tcp dpt:http
| |
| 4 ACCEPT tcp -- anywhere 172.18.0.2 tcp dpt:mysql
| |
|
| |
| 所有的iptable 应该 是 所有有http的去visa memcached memcached 不然会 登录有问题呢 在容器内部11211不通端口时 发现原因的
| |
|
| |
| iptables -I INPUT -p tcp -s 172.17.0.3 --dport 11211 -j ACCEPT
| |
| iptables -I INPUT -p tcp -s 172.18.0.3 --dport 11211 -j ACCEPT
| |
|
| |
| #本来是只允许10.138.132.61 对Memcache服务器的访问
| |
| iptables -I INPUT -p tcp -s 10.138.132.61 --dport 11211 -j ACCEPT
| |
| iptables -I INPUT -p tcp -s 10.138.132.61 --dport 11211 -j ACCEPT
| |
| iptables -A INPUT -p tcp -m tcp --dport 11211 -j DROP
| |
|
| |
| 最终在内部测试
| |
|
| |
| 容器# telnet 10.138.132.61 11211
| |
| Trying 10.138.132.61...
| |
| Connected to 10.138.132.61.
| |
| Escape character is '^]'.
| |
|
| |
| 相关
| |
| -- 查找所有规则
| |
| iptables -L INPUT --line-numbers
| |
|
| |
| -- 删除一条规则
| |
| iptables -D INPUT 11 (注意,这个11是行号,是iptables -L INPUT --line-numbers 所打印出来的行号)
| |
|
| |
|
| |
| 外网是11211不通 但是内网的呢 默认是通的
| |
|
| |
| root@-01:/data# telnet 172.18.0.1 11211
| |
| Connected to 172.18.0.1.
| |
| Escape character is '^]'.
| |
| ^]quit
| |
|
| |
| root@-01:/data# telnet 138.68.59.0 11211
| |
| Connected to 138.68.59.0.
| |
| Escape character is '^]'. </pre>
| |
|
| |
| [https://www.helplib.cn/yangchunyan110/how-to-install-and-secure-memcached-on-ubuntu-16-04 在Ubuntu 16.04上,如何安装和保护Memcached ]
| |
|
| |
| ===other===
| |
| docker run -it `docker ps -aqf "name=memcached"` /bin/sh
| |
|
| |
| # Stats
| |
| echo -e "stats" | nc localhost 11211
| |
|
| |
|
| |
| -l是监听的服务器IP地址,可以有多个地址
| |
|
| |
| 修改memcached的配置文件,修改15行OPTIONS中的-l 127.0.0.1, 添加你的内网IP
| |
|
| |
| elnet localhost 11211
| |
| flush_all
| |
|
| |
| 同样也可以使用:
| |
| echo "flush_all" | nc localhost 11211
| |
|
| |
| 使用flush_all 后并不是删除memcache上的key,而是置为过期
| |
|
| |
| </pre>
| |
|
| |
| =python client=
| |
| <pre>
| |
| 客户端连接实例
| |
|
| |
|
| |
| pip install python-binary-memcached
| |
|
| |
| #!/usr/bin/env python
| |
| # -*- coding: utf-8 -*-
| |
| import bmemcached
| |
| client = bmemcached.Client(('192.168.10.214:11211'), 'memcached', 'RV3kEjX5Ug5ufTKO')
| |
| print client.set('key', 'value11111111111')
| |
| print client.get('key')
| |
|
| |
|
| |
|
| |
| python 1.py
| |
| True
| |
| value11111111111
| |
|
| |
| </pre>
| |
| https://help.aliyun.com/document_detail/48437.html?spm=a2c4g.11186623.6.566.52fe6ac3bBPGYx
| |
|
| |
| =php 客户端连接=
| |
|
| |
| ==有密码的 php-memcached==
| |
| 详情见 [[Php连接有密码的memcached服务]]
| |
|
| |
| <pre>
| |
| <?php
| |
| $connect = new Memcached; //声明一个新的memcached链接
| |
| $connect->setOption(Memcached::OPT_COMPRESSION, false); //关闭压缩功能
| |
| $connect->setOption(Memcached::OPT_BINARY_PROTOCOL, true); //使用binary二进制协议
| |
| $connect->setOption(Memcached::OPT_TCP_NODELAY, true); //重要,php memcached有个bug,当get的值不存在,有固定40ms延迟,开启这个参数,可以避免这个bug
| |
| $connect->addServer('192.168.1.3', 11211); //添加memcached地址及端口号
| |
| $connect->setSaslAuthData('user', 'password');
| |
| $connect->set("hello", "world");
| |
| echo 'hello: ',$connect->get("hello");
| |
| $connect->quit();
| |
|
| |
| ?>
| |
| </pre>
| |
| https://help.aliyun.com/document_detail/48432.html
| |
|
| |
| ==没密码的 php-memcache==
| |
|
| |
| <pre>
| |
| <?php
| |
| $memcache = memcache_connect('192.168.10.214', 11211);//主机和mamcache的端口号
| |
|
| |
| if ($memcache) {
| |
|
| |
| //存入一个名字为str_key对应值为“String to store in memcached”的字符串。
| |
| $memcache->set("str_key", "String to store in memcached");
| |
|
| |
| $memcache->set("num_key", 123);
| |
| $array = Array('assoc'=>123, 345, 567);
| |
| $memcache->set("arr_key", $array);
| |
| //如果输入这些键名,就说明链接成功
| |
| var_dump($memcache->get('str_key'));
| |
| var_dump($memcache->get('num_key'));
| |
| var_dump($memcache->get('arr_key'));
| |
| }
| |
| else {
| |
| echo "Connection to memcached failed";//链接失败
| |
| }
| |
|
| |
| ?>
| |
|
| |
| </pre>
| |
|
| |
| =pull hub docker=
| |
| <pre>
| |
| docker pull memcached
| |
|
| |
| 启动memcached容器
| |
|
| |
| 使用下面的命令来创建一个新容器,可以根据你的需求修改这个例子。
| |
|
| |
| docker run --name memcached -d -p 45001:11211 memcached
| |
|
| |
| “csphere-memcached”容器,已启动,可使用45001端口连接使用。
| |
| 限制Memcached容器的内存
| |
|
| |
| 如果想要限制一个Docker容器进程可以使用的内存量,只要设置-m [memory amount]并标上限制就ok。
| |
|
| |
| 运行一个内存限制为256MB的容器:
| |
|
| |
| # sudo docker run -name csphere-memcached -m 256m -d -p 45001:11211 csphere-memcached
| |
|
| |
| 检查此容器内存限制是否设置成功,执行以下命令:
| |
|
| |
| # Example: docker inspect [container ID] | grep Memory sudo docker inspect csphere-memcached | grep Memory
| |
| </pre>
| |
|
| |
| =dockerfile=
| |
| https://github.com/evan886/docker-memcached
| |
|
| |
| 有空参考一下下面的,自己build一个喽
| |
|
| |
|
| =see also= | | =see also= |
| [https://www.ityoudao.cn/posts/lnmp-memcached-installation/ LNMP之Memcached服务器的安装部署] | | [https://jpanj.com/2019/fix-docker-install-MySQL-python/ 修复 Docker 安装 MySQL-python 失败的问题 ] |
| | |
| [https://blog.csdn.net/qwssd/article/details/77198839 Linux下安装配置带SASL认证的Memcached]
| |
| | |
| [http://shiyanjun.cn/archives/873.html?utm_source=tuicool&utm_medium=referral Memcached服务器安装、配置、使用详解]
| |
| | |
| [https://blog.csdn.net/dengwenquan2011/article/details/6965991 Memcache基础教程]
| |
| | |
| | |
| [https://blog.csdn.net/lxf2323881/article/details/79273465 十分钟学会memcache,比你想象的要简单]
| |
| | |
| [https://hub.docker.com/_/memcached/ memcached on docker]
| |
| | |
| [http://dockone.io/article/868 如何构建Memcached Docker容器]
| |
| | |
| | |
| [https://blog.csdn.net/allus0918/article/details/50481927 memcached启动与清理缓存]
| |
| | |
|
| |
|
| [https://blog.csdn.net/dutsoft/article/details/71101809 Python项目使用memcached缓存]
| |
|
| |
|
| [[category:容器]] [[category:ops]] [[category: container]] | | [[category:python]] |