forked from newrelic/newrelic-fluent-bit-output
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile.windows
192 lines (150 loc) · 8.76 KB
/
Dockerfile.windows
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# escape=`
ARG FLUENTBIT_VERSION=2.2.2
ARG WINDOWS_VERSION=ltsc2019
#################################################
# Build New Relic Fluent Bit Output Plugin
#################################################
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_VERSION AS nrBuilder
WORKDIR /build
USER ContainerAdministrator
ENV chocolateyVersion 1.4.0
# Install Chocolatey
RUN powershell.exe Invoke-WebRequest `
-Uri https://chocolatey.org/install.ps1 `
-OutFile C:\chocolatey-install.ps1
RUN powershell.exe `
-ExecutionPolicy bypass `
-InputFormat none `
-NoProfile `
C:\chocolatey-install.ps1
RUN setx PATH "%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
# Install Base Dependencies
RUN choco install --yes --no-progress mingw git
# We can't go past 1.20.X until this issue is solved: https://github.com/golang/go/issues/62130#issuecomment-1687335898
# The last 1.20.X version in chocolatey is 1.20.7
RUN choco install --yes --no-progress golang --version=1.20.7
# Put the path before the other paths so that MinGW shadows Windows commands.
RUN setx PATH "C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw\bin;%PATH%"
# Compile the newrelic-fluent-bit-output plugin
COPY Makefile go.* *.go ./
COPY config/ ./config
COPY metrics/ ./metrics
COPY nrclient/ ./nrclient
COPY record/ ./record
COPY utils/ ./utils
ENV SOURCE docker
RUN setx CGO_ENABLED "1"
RUN setx GOOS "windows"
RUN setx GOARCH "amd64"
RUN setx CC "x86_64-w64-mingw32-gcc"
RUN setx CXX "x86_64-w64-mingw32-g++"
RUN go build -buildmode=c-shared -o out_newrelic.dll .
############################################################################################
# Build Fluent Bit and include the newrelic-fluent-bit-output plugin to the resulting image
############################################################################################
# **NOTE**: Fluent Bit currently does not publish a Docker image variant for Windows. They do
# provide a Dockerfile.windows (https://github.com/fluent/fluent-bit/blob/master/dockerfiles/Dockerfile.windows)
# which we mostly reuse below to build our own image containing Fluent Bit for Windows + New Relic Fluent Bit plugin
# Builder Image - Windows Server Core (copied from Fluent Bit's official Dockerfile.windows file)
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_VERSION as builder
ARG FLUENTBIT_VERSION
# This line was added because chocolatey version 2.0 was released and it depends on .NET 4.8
# We can update this with the approach that fluent-bit takes but at the moment of doing this change
# the fluent-bit image is not updated (and not working anymore)
ENV chocolateyVersion 1.4.0
# Install Chocolatey
RUN powershell.exe Invoke-WebRequest `
-Uri https://chocolatey.org/install.ps1 `
-OutFile C:\chocolatey-install.ps1
RUN powershell.exe `
-ExecutionPolicy bypass `
-InputFormat none `
-NoProfile `
C:\chocolatey-install.ps1
RUN setx PATH "%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
# Install Git
RUN choco install --yes --no-progress git
# FluentBit's Dockerfile.windows is based on the assumption that the pipeline building it does
# a clone of the source repository previously to the build.
RUN git clone -b v%FLUENTBIT_VERSION% https://github.com/fluent/fluent-bit /src
RUN echo Cloned branch v%FLUENTBIT_VERSION%
# -------------------------------------------------------------------------------------------------------------#
# #
# The following contents are copied from the original Fluent Bit repository, except: #
# - The FROM for the builder is specified above, so we can install Git and download #
# the source code prior to the build. #
# - Comment out the COPY as in the official Fluent Bit pipeline the source code is cloned externally #
# - At the very last step, we build and copy the New Relic plugin inside the resulting runtime image #
# -------------------------------------------------------------------------------------------------------------#
RUN setx /M PATH "%PATH%;C:\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;C:\WinFlexBison"
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
WORKDIR /local
# Install Visual Studio 2019
ADD https://aka.ms/vs/16/release/vs_buildtools.exe /local/vs_buildtools.exe
ADD https://aka.ms/vs/16/release/channel /local/VisualStudio.chman
RUN Start-Process /local/vs_buildtools.exe `
-ArgumentList '--quiet ', '--wait ', '--norestart ', '--nocache', `
'--installPath C:\BuildTools', `
'--channelUri C:\local\VisualStudio.chman', `
'--installChannelUri C:\local\VisualStudio.chman', `
'--add Microsoft.VisualStudio.Workload.VCTools', `
'--includeRecommended' -NoNewWindow -Wait;
ADD https://github.com/lexxmark/winflexbison/releases/download/v2.5.22/win_flex_bison-2.5.22.zip /local/win_flex_bison.zip
RUN Expand-Archive /local/win_flex_bison.zip -Destination /WinFlexBison; `
Copy-Item -Path /WinFlexBison/win_bison.exe /WinFlexBison/bison.exe; `
Copy-Item -Path /WinFlexBison/win_flex.exe /WinFlexBison/flex.exe;
# Technique from https://github.com/StefanScherer/dockerfiles-windows/blob/master/mongo/3.6/Dockerfile
WORKDIR /local
ADD https://aka.ms/vs/15/release/vc_redist.x64.exe /local/vc_redist.x64.exe
WORKDIR /fluent-bit/bin/
RUN Start-Process /local/vc_redist.x64.exe -ArgumentList '/install', '/quiet', '/norestart' -NoNewWindow -Wait; `
Copy-Item -Path /Windows/System32/msvcp140.dll -Destination /fluent-bit/bin/; `
Copy-Item -Path /Windows/System32/vccorlib140.dll -Destination /fluent-bit/bin/; `
Copy-Item -Path /Windows/System32/vcruntime140.dll -Destination /fluent-bit/bin/;
# Install Chocolatey and OpenSSL: https://github.com/StefanScherer/dockerfiles-windows/blob/main/openssl/Dockerfile
ENV chocolateyUseWindowsCompression false
RUN iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1')); `
choco feature disable --name showDownloadProgress ; `
choco install -y openssl;
# Build Fluent Bit from source - context must be the root of the Git repo
WORKDIR /src/build
# COPY . /src/
RUN cmake -G "'Visual Studio 16 2019'" -DOPENSSL_ROOT_DIR='C:\Program Files\OpenSSL-Win64\lib\VC\x64\MT' -DOPENSSL_INCLUDE_DIR='C:\Program Files\OpenSSL-Win64\include' -DCMAKE_BUILD_TYPE=Release ../;`
cmake --build . --config Release;
# Set up config files and binaries in single /fluent-bit hierarchy for easy copy in later stage
RUN New-Item -Path /fluent-bit/etc/ -ItemType "directory"; `
Copy-Item -Path /src/conf/fluent-bit-win32.conf /fluent-bit/etc/fluent-bit.conf; `
Copy-Item -Path /src/conf/parsers.conf /fluent-bit/etc/; `
Copy-Item -Path /src/conf/parsers_ambassador.conf /fluent-bit/etc/; `
Copy-Item -Path /src/conf/parsers_java.conf /fluent-bit/etc/; `
Copy-Item -Path /src/conf/parsers_extra.conf /fluent-bit/etc/; `
Copy-Item -Path /src/conf/parsers_openstack.conf /fluent-bit/etc/; `
Copy-Item -Path /src/conf/parsers_cinder.conf /fluent-bit/etc/; `
Copy-Item -Path /src/conf/plugins.conf /fluent-bit/etc/; `
Copy-Item -Path /src/build/bin/Release/fluent-bit.exe /fluent-bit/bin/; `
Copy-Item -Path /src/build/bin/Release/fluent-bit.dll /fluent-bit/bin/;
#
# Runtime Image - Windows Server Core
#
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_VERSION as runtime
ARG FLUENTBIT_VERSION
ARG IMAGE_CREATE_DATE
ARG IMAGE_SOURCE_REVISION
# Metadata as defined in OCI image spec annotations
# https://github.com/opencontainers/image-spec/blob/master/annotations.md
LABEL org.opencontainers.image.title="Fluent Bit" `
org.opencontainers.image.description="Fluent Bit is an open source and multi-platform Log Processor and Forwarder which allows you to collect data/logs from different sources, unify and send them to multiple destinations. It's fully compatible with Docker and Kubernetes environments." `
org.opencontainers.image.created=$IMAGE_CREATE_DATE `
org.opencontainers.image.version=$FLUENTBIT_VERSION `
org.opencontainers.image.authors="Eduardo Silva <eduardo@calyptia.com>" `
org.opencontainers.image.url="https://hub.docker.com/r/fluent/fluent-bit" `
org.opencontainers.image.documentation="https://docs.fluentbit.io/manual/" `
org.opencontainers.image.vendor="Fluent Organization" `
org.opencontainers.image.licenses="Apache-2.0" `
org.opencontainers.image.source="https://github.com/fluent/fluent-bit" `
org.opencontainers.image.revision=$IMAGE_SOURCE_REVISION
COPY --from=builder /fluent-bit /fluent-bit
RUN setx /M PATH "%PATH%;C:\fluent-bit\bin"
ENTRYPOINT [ "fluent-bit.exe" ]
COPY --from=nrBuilder /build/out_newrelic.dll /fluent-bit/bin/out_newrelic.dll
CMD ["fluent-bit.exe", "-i", "dummy", "-o", "stdout", "-e", "/fluent-bit/bin/out_newrelic.dll"]