1. 先确定环境中是否存在docker旧版本,如果存在就先卸载。笔者使用的是最新安装的虚拟机系统,不需要执行此步骤
sudo apt-get remove docker docker-engine docker-ce docker.io
2. 更新apt包。关于镜像仓库,ubuntu默认的是美国的地址,比较慢且容易出现网络下载问题,建议改成国内的镜像仓库,笔者使用的是阿里云的镜像仓库。
sudo apt-get update
3. 先将用户切换到root权限,防止出现访问权限问题。安装以下包确保apt可以通过HTTPS使用存储库(repository)
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
4. 添加Docker官方的GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
5. 使用以下命令来设置stable存储库
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \stable"
6. 再更新以下apt包后,安装最新版本的docker ce
sudo apt-get update
sudo apt-get install -y docker-ce
7. 验证docker服务是否启动,如未启动,则使用start命令启动
systemctl status docker
sudo systemctl start docker
8. 运行hello world容器,有如下显示则安装成功
sudo docker run hello-world
1. 在https://hub.docker.com/r/envoyproxy/envoy-alpine/镜像网站中的tag页面中查询最新版镜像
使用如下命令拉取镜像(镜像名称tag默认为latest,测试发现拉取不到镜像,后修改为具体的版本):
docker pull envoyproxy/envoy-alpine:v1.14.1
2. 查找镜像二进制安装目录,进入目录后将自定义的envoy.yaml配置文件挂载到指定目录下(注:<>中的为指定目录,如笔者用的是/etc/envoy。-l debug为设置日记级别,方便调试),命令如下:
./envoy -c .{json,yaml,pb,pb_text} --v2-config-only -l debug
3. 做一个最简化的静态配置测试envoy。编辑envoy.yaml做如下配置
admin:
access_log_path: /tmp/admin_access.log
address:
socket_address: { address: 127.0.0.1, port_value: 9901 }
static_resources:
listeners:
- name: listener_0
address:
socket_address: { address: 0.0.0.0, port_value: 10000 }
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
stat_prefix: ingress_http
codec_type: AUTO
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match: { prefix: "/" }
route: { cluster: some_service }
http_filters:
- name: envoy.router
clusters:
- name: some_service
connect_timeout: 0.25s
type: STATIC
lb_policy: ROUND_ROBIN
hosts: [{ socket_address: { address: 127.0.0.1, port_value: 80 }}]
在此基础上启动两个容器,envoyproxy容器和nginx容器,nginx容器共享envoyproxy容器的网络,以此来模拟sidecar。
docker run -d -p 10000:10000 -v `pwd`/envoy.yaml:/etc/envoy/envoy.yaml --name envoyproxy envoyproxy/envoy-alpine:v1.14.1
docker run -d --network=container:envoyproxy --name nginx nginx
根据配置文件的规则,envoy监听10000端口,同时该端口也暴露在主机上。当有请求到达监听上后,envoy会对所有请求路由到some_service这个cluster上,而该cluster的上游指向本地的80端口,也就是nginx服务上。访问nginx如下: