Docker指南:安装Traefik - 一种用于微服务的现代反向代理
Traefik是一种用于微服务的现代HTTP反向代理和负载均衡器。 Traefik使所有微服务部署变得简单,与现有的基础架构组件集成,如Docker,Swarm Mode,Kubernetes,Amazon ECS,Rancher,Etcd,Consul等。
Traefik充当所有微服务应用程序的路由器,将所有客户端请求路由到正确的微服务目标。
在本教程中,我将逐步向您展示如何在Ubuntu 18.04 LTS(Bionic Beaver)上安装和配置Traefik现代反向代理作为Docker容器。
先决条件
- Ubuntu 18.04
- Root权限
我们将要做什么?
- 在Ubuntu 18.04上安装Docker
- 安装Docker Compose
- 创建自定义Docker网络
- 安装和配置Traefik
- 测试
第1步 - 在Ubuntu 18.04上安装Docker
对于本指南,我们将使用可从官方docker存储库安装的最新docker版本。
使用以下命令添加docker密钥和存储库。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
'add-apt-repository'命令将自动更新所有存储库。
现在安装最新的docker-ce。
sudo apt install docker-ce
安装完成后,启动docker服务并使其在系统引导时每次启动。
systemctl start docker
systemctl enable docker
docker社区版已安装在Ubuntu 18.04系统上,检查已安装的docker版本。
docker version
附加:为非root用户运行Docker
Docker容器可以在非root用户下运行。 我们只需要将用户添加到docker组。
添加'mohammad'用户。
useradd -m -s /bin/bash mohammad
现在将'mohammad'用户添加到docker组,然后重新启动docker服务。
usermod -a -G docker mohammad
systemctl restart docker
通过运行docker hello-world进行测试。
docker run -it hello-world
以下是结果。
第2步 - 安装Docker Compose
Docker-Compose是一个命令行工具,用于定义和管理多容器Docker窗应用程序。
Docker Compose是一个python脚本,可以使用python pip命令安装,也可以使用ubuntu存储库中的apt命令轻松安装。 使用compose,我们可以使用单个命令运行多个Docker容器。
使用下面的apt命令从存储库安装docker compose。
sudo apt install docker-compose
安装完成后,请检查docker compose版本。
docker-compose version
在Ubuntu 18.04上安装了docker compose 1.17。
第3步 - 创建自定义Docker网络
在本教程中,traefik容器将在docker自定义网络上运行。 所以我们需要在服务器上创建一个新的docker自定义网络。
检查系统上可用的docker网络。
docker network ls
现在为traefik容器创建一个名为“proxy”的新自定义网络。
docker network create proxy
并且您将获得网络容器名称的随机字符串。 再次检查可用的网络。
docker network ls
结果如下所示。
已创建名为“proxy”for traefik的自定义Docker窗网络。
第4步 - 安装和配置Traefik反向代理
在此步骤中,我们将创建启用HTTPS letsencrypt的traefik容器(使用域名'traefik.hakase-labs.io),并在traefik上自动将HTTP重定向到HTTPS。
Traefik预安装
在创建所有traefik配置之前,我们需要安装'apache2-utils'来生成加密的htpasswd密码并创建新的traefik目录。
使用下面的apt命令安装'apache2-utils'。
sudo apt install apache2-utils -y
现在运行下面的htpasswd命令为traefik仪表板身份验证生成新密码。
htpasswd -nb mohammad password
将结果保存在您的笔记中。
mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.
接下来,登录'mohammad'用户。
su - mohammad
为所有traefik配置创建一个名为“traefik”的新目录。
mkdir -p traefik/
cd traefik/
创建Traefik配置
转到'traefik'目录并使用vim编辑器创建一个新的配置文件'traefik.toml'。
cd traefik/
vim traefik.toml
粘贴下面的配置。
#Traefik Global Configuration debug = false checkNewVersion = true logLevel = "ERROR" #Define the EntryPoint for HTTP and HTTPS defaultEntryPoints = ["https","http"] #Enable Traefik Dashboard on port 8080 #with basic authentication method #mohammad and password [web] address = ":8080" [web.auth.basic] users = ["mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi."] #Define the HTTP port 80 and #HTTPS port 443 EntryPoint #Enable automatically redirect HTTP to HTTPS [entryPoints] [entryPoints.http] address = ":80" [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] address = ":443" [entryPoints.https.tls] #Enable retry sending a request if the network error [retry] #Define Docker Backend Configuration [docker] endpoint = "unix:///var/run/docker.sock" domain = "traefik.hakase-labs.io" watch = true exposedbydefault = false #Letsencrypt Registration #Define the Letsencrypt ACME HTTP challenge [acme] email = "hakaselabs@gmail.com" storage = "acme.json" entryPoint = "https" OnHostRule = true [acme.httpChallenge] entryPoint = "http"
保存并退出。
注意:
有关配置的所有信息都在评论部分' #... '中。
创建Traefik Docker Compose脚本
现在创建docker-compose yml脚本。
vim docker-compose.yml
粘贴下面的配置。
version: '3' services: traefik: image: traefik:latest command: --docker --docker.domain=hakase-labs.io ports: - 80:80 - 443:443 networks: - proxy volumes: - /var/run/docker.sock:/var/run/docker.sock - ./traefik.toml:/traefik.toml - ./acme.json:/acme.json labels: - "traefik.frontend.rule=Host:traefik.hakase-labs.io" - "traefik.port=8080" container_name: traefik restart: always networks: proxy: external: true
保存并退出。
注意:
- 我们正在基于'traefik:latest'Docker窗图像创建一个名为'traefik'的新容器。
- 'traefik'容器将在名为'proxy'的自定义docker网络上运行,并公开外部端口HTTP 80和HTTPS 443。
- 容器将安装traefik配置'traefik.toml'和'acme.json',包括docker sock文件。
- traefik,前端域名和traefik端口的标签配置。
Letsencrypt ACME配置
'traefik.toml'上的acme配置用于自动生成SSL letsencrypt。 并且它是存储文件'acme.json'所必需的。
创建一个新的JSON文件'acme.json'并将权限更改为'600'。
touch acme.json
chmod 600 acme.json
有关SSL letsencrypt信息的所有日志都将保存在文件中。
建立Traefik容器
现在我们准备使用上面的配置文件构建我们自己的traefik容器了。
cd traefik/
ls -lah
所有配置'traefik.toml','docker-compose.yml'和'acme.json'文件。
使用下面的docker compose命令构建容器。
docker-compose up -d
完成后,检查正在运行的容器。
docker-compose ps
您将启动并运行Traefik容器,公开外部端口HTTP和HTTPS。
第5步 - 测试
打开Web浏览器,在地址栏中键入traefik域名。 我的是:
http://traefik.hakase-labs.io/
您将被重定向到HTTPS连接,并将被要求输入用户名和密码。
使用用户'mohammad'登录,密码为'password'。
您将获得如下Traefik仪表板。
Traefik健康状况页面。
Traefik现代HTTP反向代理已作为Docker容器安装在Ubuntu 18.04上。