使用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

posted @ 2025-03-23 20:51  丁志岩  阅读(59)  评论(0)    收藏  举报