使用Dockerfile制作游戏镜像,并使用Filebeat采集nginx日志
一、制作游戏镜像
1.创建工作目录
root@ding:~# mkdir -p /mygame/dockerfile/apline
2.上传游戏代码至工作目录
- 注意:代码压缩包都应为tar.gz格式
root@ding:/mygame/dockerfile/apline# ll
total 10620
drwxr-xr-x 2 root root 4096 Mar 23 10:12 ./
drwxr-xr-x 3 root root 4096 Mar 23 10:02 ../
-rw-r--r-- 1 root root 1020750 Mar 23 10:09 ikun.tar.gz
-rw-r--r-- 1 root root 1904843 Dec 6 03:33 renzhegame.tar.gz
-rw-r--r-- 1 root root 7927518 Mar 23 10:10 xbw.tar.gz
3.编写nginx配置文件
root@ding:/mygame/dockerfile/apline# vim games.conf
server {
listen 0.0.0.0:80;
root /usr/share/nginx/xbw/;
server_name xbw.dezyan.com;
}
server {
listen 0.0.0.0:80;
root /usr/share/nginx/ikun/;
server_name ikun.dezyan.com;
}
server {
listen 0.0.0.0:80;
root /usr/share/nginx/type/;
server_name type.dezyan.com;
}
4.编写容器启动脚本
root@ding:/mygame/dockerfile/apline# vim start.sh
#!/bin/sh
# 定义root初始化密码
if [ -n "$1" ]
then
echo root:$1| chpasswd
elif [ -n "$ADMIN" ]
then
echo root:${ADMIN} | chpasswd
else
echo root:123456 | chpasswd
fi
# 启动sshd服务
/usr/sbin/sshd
# 启动nginx服务
nginx -g "daemon off;"
5.编写Dockerfile
root@ding:/mygame/dockerfile/apline# vim Dockerfile
FROM alpine:3.21.3
MAINTAINER dezyan
LABEL email=dezyan@163.com \
blogs=https://www.cnblogs.com/dezyan
RUN sed -i 's#dl-cdn.alpinelinux.org#mirrors.aliyun.com#g' /etc/apk/repositories && \
apk update && apk add nginx openssh && \
ssh-keygen -A && \
sed -i 's@#PermitRootLogin prohibit-password@PermitRootLogin yes@g' /etc/ssh/sshd_config && \
rm -rf /var/cache/
WORKDIR /etc/nginx/http.d
COPY default.conf /etc/nginx/http.d
COPY games.conf /etc/nginx/http.d
COPY start.sh /
ADD ikun.tar.gz /usr/share/nginx
ADD tpye.tar.gz /usr/share/nginx
ADD xbw.tar.gz /usr/share/nginx
ENV ADMIN="dingzhiyan" \
address=changping
EXPOSE 80 22
VOLUME /var/log/nginx /etc/nginx/http.d /usr/share/nginx
ENTRYPOINT ["/bin/sh","-x","/start.sh"]
6.拉取alpine初始镜像
root@ding:/mygame/dockerfile/apline# docker pull alpine:3.21.3
#或直接上传导入
root@ding:/mygame/dockerfile/apline# docker load < alpine-v3.21.3.tar.gz
7.编译镜像
root@ding:/mygame/dockerfile/apline# docker image build -t dezyangame:v1.1 .
Sending build context to Docker daemon 12.85MB
Step 1/13 : FROM alpine:3.21.3
---> aded1e1a5b37
Step 2/13 : MAINTAINER dezyan
---> Using cache
---> 80ad3074da10
Step 3/13 : LABEL email=dezyan@163.com blogs=https://www.cnblogs.com/dezyan
---> Using cache
---> 314d5ecd46e1
Step 4/13 : RUN sed -i 's#dl-cdn.alpinelinux.org#mirrors.aliyun.com#g' /etc/apk/repositories && apk update && apk add nginx openssh && ssh-keygen -A && sed -i 's@#PermitRootLogin prohibit-password@PermitRootLogin yes@g' /etc/ssh/sshd_config && rm -rf /var/cache/
---> Using cache
---> 6931873e5367
Step 5/13 : WORKDIR /etc/nginx/http.d
---> Using cache
---> bf61ea9bf865
Step 6/13 : COPY games.conf /etc/nginx/http.d
---> f0a7497693bc
Step 7/13 : COPY start.sh /
---> f0018df7d776
Step 8/13 : ADD ikun.tar.gz /usr/share/nginx
---> 5fca0db4a858
Step 9/13 : ADD renzhegame.tar.gz /usr/share/nginx
---> 4366f501f93e
Step 10/13 : ADD xbw.tar.gz /usr/share/nginx
---> 6bbccc96b58a
Step 11/13 : ENV ADMIN="dingzhiyan" address=changping
---> Running in d3bf364f5d7d
Removing intermediate container d3bf364f5d7d
---> b953bbef4bc1
Step 12/13 : EXPOSE 80 22
---> Running in e9543ed1ba76
Removing intermediate container e9543ed1ba76
---> db6772cf4fac
Step 13/13 : ENTRYPOINT ["/bin/sh","-x","/start.sh"]
---> Running in 6a9740a23ef7
Removing intermediate container 6a9740a23ef7
---> 15f74bc756ee
Successfully built 15f74bc756ee
Successfully tagged dezyangame:v1.1
root@ding:/mygame/dockerfile/apline# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dezyangame v1.1 15f74bc756ee 7 seconds ago 39.4MB
8.创建网络、存储卷
#直接使用部署elastic时创建的网络
root@ding:/mygame/dockerfile/apline# docker network ls
NETWORK ID NAME DRIVER SCOPE
88d7ae6cc0e1 elastic bridge local
#创建存储卷名为game
root@ding:/mygame/dockerfile/apline# docker volume create game
root@ding:/mygame/dockerfile/apline# docker volume ls
DRIVER VOLUME NAME
local game
9.启动容器测试
root@ding:/mygame/dockerfile/apline# docker run -d --name games -p 1016:80 -p 1017:22 --network elastic dezyangame:v2.0
root@ding:/mygame/dockerfile/apline# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20816603c684 dezyangame:v2.0 "/bin/sh -x /start.sh" 33 seconds ago Up 33 seconds 0.0.0.0:1017->22/tcp, :::1017->22/tcp, 0.0.0.0:1016->80/tcp, :::1016->80/tcp games
#Windows做本地解析
10.0.0.94 xbw.dezyan.com
10.0.0.94 ikun.dezyan.com
10.0.0.94 type.dezyan.com
#访问
xbw.dezyan.com:1016
ikun.dezyan.com:1016
type.dezyan.com:1016
10.查看本地存储卷数据
root@ding:/mygame/dockerfile/apline# docker volume ls
DRIVER VOLUME NAME
local 4db7d32ebefe11fbfb1e145db9621d4dece1d244d44a82924ee0313e4dac21dd
local 7ec5b3ba535e7dcedd2c8715d7277d4221ec05d1f8ebae287e3146c7f3fc4fab
local 841af18174c03dcc14fac6a706e6447bbd0e56cd7f79b3dfb982a6d595ee250d
#查看所在存储卷
root@ding:/mygame/dockerfile/apline# docker inspect -f "{{(index .Mounts 0).Source}}" games
/var/lib/docker/volumes/4db7d32ebefe11fbfb1e145db9621d4dece1d244d44a82924ee0313e4dac21dd/_data
root@ding:/mygame/dockerfile/apline# docker inspect -f "{{(index .Mounts 1).Source}}" games
/var/lib/docker/volumes/7ec5b3ba535e7dcedd2c8715d7277d4221ec05d1f8ebae287e3146c7f3fc4fab/_data
root@ding:/mygame/dockerfile/apline# docker inspect -f "{{(index .Mounts 2).Source}}" games
/var/lib/docker/volumes/4db7d32ebefe11fbfb1e145db9621d4dece1d244d44a82924ee0313e4dac21dd/_data
#找到日志所在的存储卷
root@ding:/mygame/dockerfile/apline# ll /var/lib/docker/volumes/4db7d32ebefe11fbfb1e145db9621d4dece1d244d44a82924ee0313e4dac21dd/_data
total 8
drwxr-xr-x 2 _apt systemd-journal 4096 Mar 23 11:45 ./
drwx-----x 3 root root 4096 Mar 23 11:45 ../
-rw-r--r-- 1 root root 0 Mar 23 11:45 access.log
-rw-r--r-- 1 root root 0 Mar 23 11:45 error.log
二、使用EFK架构采集nginx日志信息
1.启用上次创建的ES集群和Kibana
https://www.cnblogs.com/dezyan/p/18785095
2.编写Filebeat文件
filebeat.inputs:
- type: log
paths:
- '/var/lib/docker/volumes/*/_data/*'
processors:
- add_docker_metadata:
host: "unix:///var/run/docker.sock"
output.elasticsearch:
hosts:
- https://172.18.0.2:9200
- https://172.18.0.4:9200
- https://172.18.0.5:9200
api_key: "h3PnwpUBGeCDK3F1wcUl:3YK7unBvTsy_GjPCh5lj4g"
index: es-apikey-tls-2025-docker
ssl.verification_mode: none
setup.ilm.enabled: false
setup.template.name: "es-apikey"
setup.template.pattern: "es-apikey-*"
setup.template.overwrite: true
setup.template.settings:
index.number_of_shards: 3
index.number_of_replicas: 0
3.采集,kibana查看数据
root@ding:~# filebeat -e -c /etc/filebeat/config/01-docker-to-es-tls.yaml

本文来自博客园,作者:丁志岩,转载请注明原文链接:https://www.cnblogs.com/dezyan/p/18788300

浙公网安备 33010602011771号