in kong/spec/helpers/perf/drivers/docker.lua [202:279]
function _M:start_worker(conf, port_count)
conf = conf or [[
location = /test {
return 200;
}
]]
local listeners = {}
for i=1,port_count do
listeners[i] = ("listen %d reuseport;"):format(UPSTREAM_PORT+i-1)
end
listeners = table.concat(listeners, "\n")
if not self.worker_ct_id then
local _, err = perf.execute(
"docker build --progress plain -t perf-test-upstream -",
{
logger = self.log.log_exec,
stdin = ([[
FROM nginx:alpine
RUN apk update && apk add wrk
RUN echo -e '\
server {\
%s\
access_log off;\
location =/health { \
return 200; \
} \
%s \
}' > /etc/nginx/conf.d/perf-test.conf
# copy paste
ENTRYPOINT ["/docker-entrypoint.sh"]
STOPSIGNAL SIGQUIT
CMD ["nginx", "-g", "daemon off;"]
]]):format(listeners:gsub("\n", "\\n"), conf:gsub("\n", "\\n"))
}
)
if err then
return false, err
end
local cid, err = create_container(self, "-p " .. UPSTREAM_PORT, "perf-test-upstream")
if err then
return false, "error running docker create when creating upstream: " .. err
end
self.worker_ct_id = cid
end
self.log.info("worker container ID is ", self.worker_ct_id)
local ok, err = start_container(self.worker_ct_id)
if not ok then
return false, "worker is not running: " .. err
end
ngx.sleep(3)
local worker_vip, err = get_container_vip(self.worker_ct_id)
if err then
return false, "unable to read worker container's private IP: " .. err
end
if not perf.wait_output("docker logs -f " .. self.worker_ct_id, " start worker process") then
self.log.info("worker container logs:")
perf.execute("docker logs " .. self.worker_ct_id, { logger = self.log.log_exec })
return false, "timeout waiting worker(nginx) to start (5s)"
end
self.log.info("worker is started")
local uris = {}
for i=1,port_count do
uris[i] = "http://" .. worker_vip .. ":" .. UPSTREAM_PORT+i-1
end
return uris
end