diff --git a/README.md b/README.md index 13f4975..2934c51 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,54 @@ # OS -## [linux 教程](docs/linux/README.md) +## 内容 -## [shell 教程](docs/shell.md) +### [Linux](docs/linux/README.md) -## [python 教程](docs/python.md) +- [查看 Linux 命令帮助信息](docs/linux/01.查看Linux命令帮助信息.md) - 关键词:`help`, `whatis`, `info`, `which`, `whereis`, `man` +- [Linux 文件目录管理](docs/linux/02.Linux文件目录管理.md) - 关键词:`cd`, `ls`, `pwd`, `mkdir`, `rmdir`, `tree`, `touch`, `ln`, `rename`, `stat`, `file`, `chmod`, `chown`, `locate`, `find`, `cp`, `mv`, `rm` +- [Linux 文件内容查看命令](docs/linux/03.Linux文件内容查看编辑.md) - 关键词:`cat`, `head`, `tail`, `more`, `less` +- [Linux 文件压缩与解压命令](docs/linux/Linux文件压缩与解压命令.md) - 关键词:`tar`, `gzip`, `zip`, `unzip` +- [Linux 用户管理命令](docs/linux/Linux用户管理命令.md) - 关键词:`groupadd`, `groupdel`, `groupmod`, `useradd`, `userdel`, `usermod`, `passwd`, `su`, `sudo` +- [Linux 系统管理命令](docs/linux/Linux系统管理命令.md) - 关键词:`reboot`, `exit`, `shutdown`, `date`, `mount`, `umount` +- [Linux 性能管理命令](docs/linux/Linux性能管理命令.md) - 关键词:`df`, `du`, `top`, `free`, `iotop` +- [Linux 进程管理命令](docs/linux/Linux进程管理命令.md) - 关键词:`ps`, `kill`, `systemctl`, `service`, `crontab` +- [Linux 网络应用命令](docs/linux/Linux网络应用命令.md) - 关键词:`curl`, `wget`, `telnet`, `ip`, `hostname`, `ifconfig`, `route`, `ssh`, `ssh-keygen`, `iptables` +- [Linux 网络测试命令](docs/linux/Linux网络测试命令.md) - 关键词:`host`, `nslookup`, `nc`/`netcat`, `dig`, `ping`, `traceroute`, `netstat` +- [yum 命令](docs/linux/yum.md) +- [linux 监控](docs/linux/linux监控.md) +- [samba 使用详解](docs/linux/samba使用详解.md) +- [命令行的艺术(转载)](docs/linux/命令行的艺术.md) -## [vim 教程](docs/vim/README.md) +### [Shell](docs/shell.md) -## [git 教程](docs/git/README.md) +### [Python](docs/python.md) -## [docker 教程](docs/docker/README.md) +### [Vim](docs/vim/README.md) + +### [Git](docs/git/README.md) + +- [快速指南(quickstart)](docs/git/git-quickstart.md) + +#### git 基础篇(basics) + +- [安装(installation)](docs/git/basics/git-installation.md) +- [配置(configuration)](docs/git/basics/git-configuration.md) + +#### git 进阶篇(advanced) + +- [git-flow 工作流](docs/git/advanced/git-flow.md) + +#### git 附录(appendix) + +- [常见问题(faq)](docs/git/appendix/git-faq.md) +- [命令(command)](docs/git/appendix/git-command.md) +- [资源(resource)](docs/git/appendix/git-resource.md) + +### [Docker](docs/docker/README.md) + +### Windows + +- [Windows 工具](docs/windows/Windows工具.md) ## 部署 @@ -20,19 +58,19 @@ ### 常见软件安装配置详述 -> *`CODES`:安装配置脚本,按照说明安装使用即可。* +> _`CODES`:安装配置脚本,按照说明安装使用即可。_ > -> *`DOCS`: 安装配置文档,说明安装的方法以及一些注意事项。* +> _`DOCS`: 安装配置文档,说明安装的方法以及一些注意事项。_ -* JDK 安装和配置:| [CODES](codes/deploy/tool/jdk) | [DOCS](docs/deploy/tool/jdk/install-jdk.md) | -* Jenkins 安装和配置:| [CODES](codes/deploy/tool/jenkins) | [DOCS](docs/deploy/tool/mongodb/install-jenkins.md) | -* Kafka 安装和配置:| [CODES](codes/deploy/tool/kafka) | [DOCS](docs/deploy/tool/kafka/install-kafka.md) | -* Maven 安装和配置:| [CODES](codes/deploy/tool/maven) | [DOCS](docs/deploy/tool/maven/install-maven.md) | -* Mongodb 安装和配置:| [CODES](codes/deploy/tool/mongodb) | [DOCS](docs/deploy/tool/mongodb/install-mongodb.md) | -* Nginx 安装和配置:| [CODES](codes/deploy/tool/nginx) | [DOCS](docs/deploy/tool/nginx/install-nginx.md) | -* Nodejs 安装和配置:| [CODES](codes/deploy/tool/nodejs) | [DOCS](docs/deploy/tool/nodejs/install-nodejs.md) | -* Redis 安装和配置:| [CODES](codes/deploy/tool/redis) | [DOCS](docs/deploy/tool/redis/install-redis.md) | -* RocketMQ 安装和配置:| [CODES](codes/deploy/tool/rocketmq) | [DOCS](docs/deploy/tool/rocketmq/install-rocketmq.md) | -* Tomcat 安装和配置:| [CODES](codes/deploy/tool/tomcat) | [DOCS](docs/deploy/tool/tomcat/install-tomcat.md) | -* Zookeeper 安装和配置:| [CODES](codes/deploy/tool/zookeeper) | [DOCS](docs/deploy/tool/zookeeper/install-zookeeper.md) | -* Svn 安装和配置:| [DOCS](docs/deploy/tool/svn/install-svn.md) | +- JDK 安装和配置:| [CODES](codes/deploy/tool/jdk) | [DOCS](docs/deploy/tool/jdk/install-jdk.md) | +- Jenkins 安装和配置:| [CODES](codes/deploy/tool/jenkins) | [DOCS](docs/deploy/tool/mongodb/install-jenkins.md) | +- Kafka 安装和配置:| [CODES](codes/deploy/tool/kafka) | [DOCS](docs/deploy/tool/kafka/install-kafka.md) | +- Maven 安装和配置:| [CODES](codes/deploy/tool/maven) | [DOCS](docs/deploy/tool/maven/install-maven.md) | +- Mongodb 安装和配置:| [CODES](codes/deploy/tool/mongodb) | [DOCS](docs/deploy/tool/mongodb/install-mongodb.md) | +- Nginx 安装和配置:| [CODES](codes/deploy/tool/nginx) | [DOCS](docs/deploy/tool/nginx/install-nginx.md) | +- Nodejs 安装和配置:| [CODES](codes/deploy/tool/nodejs) | [DOCS](docs/deploy/tool/nodejs/install-nodejs.md) | +- Redis 安装和配置:| [CODES](codes/deploy/tool/redis) | [DOCS](docs/deploy/tool/redis/install-redis.md) | +- RocketMQ 安装和配置:| [CODES](codes/deploy/tool/rocketmq) | [DOCS](docs/deploy/tool/rocketmq/install-rocketmq.md) | +- Tomcat 安装和配置:| [CODES](codes/deploy/tool/tomcat) | [DOCS](docs/deploy/tool/tomcat/install-tomcat.md) | +- Zookeeper 安装和配置:| [CODES](codes/deploy/tool/zookeeper) | [DOCS](docs/deploy/tool/zookeeper/install-zookeeper.md) | +- Svn 安装和配置:| [DOCS](docs/deploy/tool/svn/install-svn.md) | diff --git a/docs/deploy/linux基本配置.md b/docs/deploy/linux基本配置.md new file mode 100644 index 0000000..fd2ecb1 --- /dev/null +++ b/docs/deploy/linux基本配置.md @@ -0,0 +1,16 @@ + +### 设置 Linux 启动模式 + +1. 停机(记得不要把 initdefault 配置为 0,因为这样会使 Linux 不能启动) +2. 单用户模式,就像 Win9X 下的安全模式 +3. 多用户,但是没有 NFS +4. 完全多用户模式,准则的运行级 +5. 通常不用,在一些特殊情况下可以用它来做一些事情 +6. X11,即进到 X-Window 系统 +7. 重新启动 (记得不要把 initdefault 配置为 6,因为这样会使 Linux 不断地重新启动) + +设置方法: + +```sh +$ sed -i 's/id:5:initdefault:/id:3:initdefault:/' /etc/inittab +``` \ No newline at end of file diff --git a/docs/deploy/tool/mysql/install-mysql.md b/docs/deploy/tool/mysql/install-mysql.md new file mode 100644 index 0000000..b166456 --- /dev/null +++ b/docs/deploy/tool/mysql/install-mysql.md @@ -0,0 +1,121 @@ +# Mysql 安装 + +系统环境:Centos7 + +## 安装配置 + +通过 rpm 包安装 + +centos 的 yum 源中默认是没有 mysql 的,所以我们需要先去官网下载 mysql 的 repo 源并安装。 + +### 安装 mysql yum 源 + +官方下载地址:https://dev.mysql.com/downloads/repo/yum/ + +(1)下载 yum 源 + +```sh +$ wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm +``` + +(2)安装 yum repo 文件并更新 yum 缓存 + +```sh +$ rpm -ivh mysql80-community-release-el7-1.noarch.rpm +``` + +执行结果: + +会在 /etc/yum.repos.d/ 目录下生成两个 repo 文件 + +```sh +ls | grep mysql +mysql-community.repo +mysql-community-source.repo +``` + +更新 yum: + +``` +yum clean all +yum makecache +``` + +(3)查看 rpm 安装状态 + +```sh +$ yum repolist enabled | grep mysql.* +mysql-connectors-community/x86_64 MySQL Connectors Community 65 +mysql-tools-community/x86_64 MySQL Tools Community 69 +mysql80-community/x86_64 MySQL 8.0 Community Server 33 +``` + +### 安装 mysql 服务器 + +```sh +$ yum install mysql-community-server +``` + +### 启动 mysql 服务 + +```sh +# 启动 mysql 服务 +$ systemctl start mysqld.service + +# 查看运行状态 +$ systemctl status mysqld.service + +# 开机启动 +$ systemctl enable mysqld +$ systemctl daemon-reload +``` + +### 初始化数据库密码 + +查看一下初始密码 + +```sh +$ grep "password" /var/log/mysqld.log +2018-09-30T03:13:41.727736Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: %:lt+srWu4k1 +``` + +执行命令: + +```sh +mysql -uroot -p +``` + +输入临时密码,进入 mysql + +```sh +ALTER user 'root'@'localhost' IDENTIFIED BY 'Tw#123456'; +``` + +注:密码强度默认为中等,大小写字母、数字、特殊符号,只有修改成功后才能修改配置再设置更简单的密码 + +### 配置远程访问 + +``` +GRANT ALL ON *.* TO 'root'@'localhost'; +FLUSH PRIVILEGES; +``` + +### 跳过登录认证 + +``` +vim /etc/my.cnf +``` + +在 [mysqld] 下面加上 skip-grant-tables + +作用是登录时跳过登录认证,换句话说就是 root 什么密码都可以登录进去。 + +执行 `service mysqld restart`,重启 mysql + +## 参考资料 + +https://www.cnblogs.com/xiaopotian/p/8196464.html +https://www.cnblogs.com/bigbrotherer/p/7241845.html +https://blog.csdn.net/managementandjava/article/details/80039650 +http://www.manongjc.com/article/6996.html +https://www.cnblogs.com/xyabk/p/8967990.html \ No newline at end of file diff --git a/docs/docker/basics/docker-install.md b/docs/docker/basics/docker-install.md index 4ba25b5..21daf6e 100644 --- a/docs/docker/basics/docker-install.md +++ b/docs/docker/basics/docker-install.md @@ -1,29 +1,74 @@ # Docker 安装 -本教程基于 `Docker 1.13.1`。 +> 本教程基于 `Docker 1.37`。 +> +> Docker 有两种可安装版本: +> +> - [Community Edition (CE)](https://www.docker.com/community-edition/),即 Docker 社区版,适合学习。 +> - [Enterprise Edition (EE)](https://www.docker.com/enterprise-edition),即 Docker 企业版,适合企业级开发使用。 -Docker 有两种可安装版本: + -* [Community Edition (CE)](https://www.docker.com/community-edition/),即 Docker 社区版,适合学习。 -* [Enterprise Edition (EE)](https://www.docker.com/enterprise-edition),即 Docker 企业版,适合企业级开发使用。 +- [Windows 下安装 Docker](#windows-下安装-docker) +- [安装参考](#安装参考) + + + +## Windows 下安装 Docker + +安装 Docker Toolbox 步骤: + +(1)双击运行安装包 + +![](http://oyz7npk35.bkt.clouddn.com/images/20180920180926103056.png) + +(2)点击需要安装的程序,建议全安装 + +![](http://oyz7npk35.bkt.clouddn.com/images/20180920180926103147.png) + +(3)安装附加选项,建议选择前三个 + +![](http://oyz7npk35.bkt.clouddn.com/images/20180920180926103213.png) + +(4)安装结果 + +![](http://oyz7npk35.bkt.clouddn.com/images/20180920180926102959.png) + +### 可能遇到的问题 + +问题 1 - bash.exe 找不到 + +![](http://oyz7npk35.bkt.clouddn.com/images/20180920180926104526.png) + +打开快捷方式的属性窗口,在目标栏设置如下: + +``` +"C:\Program Files\Git\bin\bash.exe" --login -i "D:\Tools\DockerToolbox\start.sh" +``` + +![](http://oyz7npk35.bkt.clouddn.com/images/20180920180926105007.png) + +问题 2 - Hyper-V 冲突 + +![](http://oyz7npk35.bkt.clouddn.com/images/20180920180926105357.png) ## 安装参考 **Enterprise Edition (EE)** -* https://docs.docker.com/install/windows/docker-ee/ -* https://docs.docker.com/install/linux/docker-ee/ubuntu/ -* https://docs.docker.com/install/linux/docker-ee/rhel/ -* https://docs.docker.com/install/linux/docker-ee/centos/ -* https://docs.docker.com/install/linux/docker-ee/oracle/ -* https://docs.docker.com/install/linux/docker-ee/suse/ +- https://docs.docker.com/install/windows/docker-ee/ +- https://docs.docker.com/install/linux/docker-ee/ubuntu/ +- https://docs.docker.com/install/linux/docker-ee/rhel/ +- https://docs.docker.com/install/linux/docker-ee/centos/ +- https://docs.docker.com/install/linux/docker-ee/oracle/ +- https://docs.docker.com/install/linux/docker-ee/suse/ **Community Edition (CE)** -* https://docs.docker.com/docker-for-mac/install/ -* https://docs.docker.com/docker-for-windows/install/ -* https://docs.docker.com/install/linux/docker-ce/ubuntu/ -* https://docs.docker.com/install/linux/docker-ce/debian/ -* https://docs.docker.com/install/linux/docker-ce/centos/ -* https://docs.docker.com/install/linux/docker-ce/fedora/ -* https://docs.docker.com/install/linux/docker-ce/binaries/ \ No newline at end of file +- https://docs.docker.com/docker-for-mac/install/ +- https://docs.docker.com/docker-for-windows/install/ +- https://docs.docker.com/install/linux/docker-ce/ubuntu/ +- https://docs.docker.com/install/linux/docker-ce/debian/ +- https://docs.docker.com/install/linux/docker-ce/centos/ +- https://docs.docker.com/install/linux/docker-ce/fedora/ +- https://docs.docker.com/install/linux/docker-ce/binaries/ diff --git a/docs/docker/docker-quickstart.md b/docs/docker/docker-quickstart.md index 1ce21be..888731e 100644 --- a/docs/docker/docker-quickstart.md +++ b/docs/docker/docker-quickstart.md @@ -1,243 +1,124 @@ - +# Docker -- [Docker 快速指南](#docker-%E5%BF%AB%E9%80%9F%E6%8C%87%E5%8D%97) - - [Orientation](#orientation) - - [概念](#%E6%A6%82%E5%BF%B5) - - [Docker 的优点](#docker-%E7%9A%84%E4%BC%98%E7%82%B9) - - [容器和镜像](#%E5%AE%B9%E5%99%A8%E5%92%8C%E9%95%9C%E5%83%8F) - - [容器和虚拟机](#%E5%AE%B9%E5%99%A8%E5%92%8C%E8%99%9A%E6%8B%9F%E6%9C%BA) - - [Containers](#containers) - - [Dockerfile](#dockerfile) - - [创建并运行一个镜像](#%E5%88%9B%E5%BB%BA%E5%B9%B6%E8%BF%90%E8%A1%8C%E4%B8%80%E4%B8%AA%E9%95%9C%E5%83%8F) - - [共享镜像](#%E5%85%B1%E4%BA%AB%E9%95%9C%E5%83%8F) - - [Services](#services) - - [Swarms](#swarms) - - [Stacks](#stacks) - - [Deploy](#deploy) - - [常用命令行](#%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E8%A1%8C) - - [资料](#%E8%B5%84%E6%96%99) + + +- [镜像(Images)](#镜像images) +- [容器(Container)](#容器container) +- [网络(Networks)](#网络networks) +- [仓管中心和仓库(Registry & Repository)](#仓管中心和仓库registry--repository) +- [Dockerfile](#dockerfile) +- [卷标(Volumes)](#卷标volumes) -# Docker 快速指南 +## 镜像(Images) -## Orientation +- [`docker image ls`](https://github.com/yeasy/docker_practice/blob/master/image/list.md) - 查看所有镜像。 +- [`docker image rm`](https://github.com/yeasy/docker_practice/blob/master/image/rm.md) - 删除本地镜像。 +- `docker import` - 从压缩文件中创建镜像。 +- `docker export` - 导出既有容器。 +- `docker build` - 从 Dockerfile 创建镜像。 +- `docker commit` - 为容器创建镜像,如果容器正在运行则会临时暂停。 +- `docker rmi` - 删除镜像。 +- `docker load` - 通过 STDIN 从压缩包加载镜像,包括镜像和标签(images and tags) (0.7 起). +- `docker save` - 通过 STDOUT 保存镜像到压缩包,包括所有的父层,标签和版本(parent layers, tags & versions) (0.7 起). +- `docker history` - 查看镜像历史记录。 +- `docker tag` - 给镜像命名打标(tags) (本地或者仓库)。 -### 概念 +## 容器(Container) -Docker 是一个让开发者或系统管理员使用容器来**开发**、**部署**和**运行**应用的平台。 +### 生命周期 -#### 容器和镜像 +- `docker create` - 创建一个容器但是不启动。 +- `docker rename` - 允许重命名容器。 +- `docker run` - 在同一个操作中创建并启动一个容器。 +- `docker rm` - 删除容器。 +- `docker update` - 更新容器的资源限制。 -镜像是一个可执行的包,这个包中含有运行一个应用所需要的一切:代码、运行环境、库、环境变量、配置文件。 +### 启动和停止 -容器是一个镜像的实例。镜像和容器的关系就好像面向对象语言中类和对象的关系。 +- `docker start` - 启动容器。 +- `docker stop` - 停止运行中的容器。 +- `docker restart` - 停止之后再启动容器。 +- `docker pause` - 暂停运行中的容器,将其 "冻结" 在当前状态。 +- `docker unpause` - 结束容器暂停状态。 +- `docker wait` - 阻塞,到运行中的容器停止为止。 +- `docker kill` - 向运行中容器发送 SIGKILL 指令。 +- `docker attach` - 链接到运行中容器。 -### 容器和虚拟机 +### 信息 -一个容器在Linux上本地运行,并与其他容器共享主机的内核。它运行一个独立的进程,不占用任何其他可执行文件的内存,使其轻量化。 +- `docker ps` - 查看运行中的所有容器。 +- `docker logs` - 从容器中获取日志。(你也可以使用自定义日志驱动,不过在 1.10 中,它只支持 json-file 和 journald) +- `docker inspect` - 查看某个容器的所有信息(包括 IP 地址)。 +- `docker events` - 从容器中获取事件(events)。 +- `docker port` - 查看容器的公开端口。 +- `docker top` - 查看容器中活动进程。 +- `docker stats` - 查看容器的资源使用情况统计信息。 +- `docker diff` - 查看容器的 FS 中有变化文件信息。 -相比之下,虚拟机(VM)运行一个完整的“客户”操作系统,通过虚拟机管理程序虚拟访问主机资源。一般来说,虚拟机提供的环境比大多数应用程序需要的资源更多。 +### 导入 / 导出 -![containers-and-vm.png](containers-and-vm.png) +docker cp 在容器和本地文件系统之间复制文件或文件夹。 +docker export 将容器的文件系统切换为压缩包(tarball archive stream)输出到 STDOUT。 -## Containers +### 执行命令 -在以往的开发中,运行一个应用,首先需要准备好它的运行环境。 +docker exec 在容器中执行命令。 -使用 Docker,可以将应用的运行环境(如 JDK、Maven等)打包为一个可移植的镜像。然后,运行应用的同时,运行基础运行环境镜像。 +## 网络(Networks) -这种可移植的镜像定义在一个叫做 `Dockerfile` 的文件。 +### 生命周期 -### Dockerfile +- `docker network create` +- `docker network rm` -Dockerfile定义了容器内环境中发生的事情。访问网络接口和磁盘驱动器等资源是在此环境中虚拟化的,与系统的其余部分隔离,因此您需要将端口映射到外部世界,并明确要将哪些文件“复制”到那个环境。但是,在完成这些之后,您可以预期,在此Dockerfile中定义的应用程序构建在运行时的行为完全相同。 +### 信息 -### 创建并运行一个镜像 +- `docker network ls` +- `docker network inspect` -(1)创建一个目录 +### 链接 -```sh -mkdir -p /home/zp/dockerdemo -cd /home/zp/dockerdemo -``` +- `docker network connect` +- `docker network disconnect` -(2)定义一个 Dockerfile +## 仓管中心和仓库(Registry & Repository) -```docker -# Use an official Python runtime as a parent image -FROM python:2.7-slim +- `docker login` - 登入仓管中心。 +- `docker logout` - 登出仓管中心。 +- `docker search` - 从仓管中心检索镜像。 +- `docker pull` - 从仓管中心拉去镜像到本地。 +- `docker push` - 从本地推送镜像到仓管中心。 -# Set the working directory to /app -WORKDIR /app +## Dockerfile -# Copy the current directory contents into the container at /app -ADD . /app +- .dockerignore +- FROM 为其他指令设置基础镜像(Base Image)。 +- MAINTAINER 为生成的镜像设置作者字段。 +- RUN 在当前镜像的基础上生成一个新层并执行命令。 +- CMD 设置容器默认执行命令。 +- EXPOSE 告知 Docker 容器在运行时所要监听的网络端口。注意:并没有实际上将端口设置为可访问。 +- ENV 设置环境变量。 +- ADD 将文件,文件夹或者远程文件复制到容器中。缓存无效。尽量用 COPY 代替 ADD。 +- COPY 将文件或文件夹复制到容器中。 +- ENTRYPOINT 将一个容器设置为可执行。 +- VOLUME 为外部挂载卷标或其他容器设置挂载点(mount point)。 +- USER 设置执行 RUN / CMD / ENTRYPOINT 命令的用户名。 +- WORKDIR 设置工作目录。 +- ARG 定义编译时(build-time)变量。 +- ONBUILD 添加触发指令,当该镜像被作为其他镜像的基础镜像时该指令会被触发。 +- STOPSIGNAL 设置通过系统向容器发出退出指令。 +- LABEL 将键值对元数据(key/value metadata)应用到你的镜像,容器,或者守护进程。 -# Install any needed packages specified in requirements.txt -RUN pip install --trusted-host pypi.python.org -r requirements.txt +## 卷标(Volumes) -# Make port 80 available to the world outside this container -EXPOSE 80 +### 生命周期 -# Define environment variable -ENV NAME World +- `docker volume create` +- `docker volume rm` -# Run app.py when the container launches -CMD ["python", "app.py"] -``` +### 信息 -> 代理服务器在启动并运行后可以阻止与您的网络应用程序的连接。如果您位于代理服务器的后面,请使用 `ENV` 命令为您的代理服务器指定主机和端口,将以下行添加到 Dockerfile 中: -> -> ```docker -> # Set proxy server, replace host:port with values for your servers -> ENV http_proxy host:port -> ENV https_proxy host:port -> ``` - -(3)创建一个 app - -这里以创建一个 python 应用为例。 - -在 Dockerfile 同目录下新建 `requirements.txt` 文件和 `app.py` 文件。 - -创建一个 `requirements.txt` 文件 - -``` -Flask -Redis -``` - -创建一个 `app.py` 文件 - -```py -from flask import Flask -from redis import Redis, RedisError -import os -import socket - -# Connect to Redis -redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2) - -app = Flask(__name__) - -@app.route("/") -def hello(): - try: - visits = redis.incr("counter") - except RedisError: - visits = "cannot connect to Redis, counter disabled" - - html = "