-
-
Notifications
You must be signed in to change notification settings - Fork 380
/
Dockerfile
103 lines (76 loc) · 6.57 KB
/
Dockerfile
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
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# IMAGE BUILD
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# base image
# myrtille works with all versions of Windows (desktop and server), starting from Windows 7 and Windows Server 2008; choose the base image you want to use (size may vary)
# the myrtille installer will anyway install the roles and features required by myrtille (see Install.ps1), if they are not already installed on the base image
FROM mcr.microsoft.com/windows/servercore:ltsc2019
#FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8
#FROM mcr.microsoft.com/windows:1909
# copy the installer into the container
ADD myrtille.msi /myrtille.msi
# run the installer within the container
# passing params to msiexec to override the default settings of the installer doesn't work; the custom actions just ignore them
# TODO: dig this issue, maybe use orca to change that unwanted behavior?
#RUN msiexec /i myrtille.msi /quiet PDFPRINTER=""
RUN msiexec /i myrtille.msi /quiet
# open http and https ports on the container
EXPOSE 80
EXPOSE 443
# entry point
SHELL ["powershell"]
RUN Invoke-WebRequest -UseBasicParsing -Uri 'https://dotnetbinaries.blob.core.windows.net/servicemonitor/2.0.1.6/ServiceMonitor.exe' -OutFile 'C:\ServiceMonitor.exe'
ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# NOTES AND LIMITATIONS
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# Docker must be configured to use Windows containers, with Hyper-V isolation (see https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/hyperv-container)
# if you want to run Docker within a VM, you will need to enable nested virtualization with Hyper-V (see https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/nested-virtualization)
# the host can be Windows 10 Pro or Windows Server 2016 or greater
# printer and audio redirection through RDP is not supported by Windows containers at the moment
# the myrtille installer used by this Dockerfile must be built with the PDF printer option unchecked
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# DATA PERSISTENCE
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# the myrtille image will use the default settings, empty database and logs
# every new container based on it will have the same default settings, empty database and logs
# if you intend to have custom settings, manage your hosts or keep track of the logs, you can (non-exhaustively):
# - create a Dockerfile with myrtille as a base image and copy your modified files over the original ones (replacing them)
# - commit a modified container into a new image (i.e.: "myrtille_custom") that will be your new image reference
# the 1st method is preferred because it will help you to keep track of your changes
# this will be helpful when you want to use a newer myrtille version (using a different tag) and report these changes
# for example, you could set the myrtille admin password (bin\myrtille.services.exe.config, "LocalAdminPassword") once for all
# regarding the hosts management, you could use an external database (bin\myrtille.services.exe.config, "enterpriseDBConnection"), so that every container will share the same data
# build your Dockerfile with a different image name (i.e.: "myrtille_custom")
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# USEFUL COMMANDS
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# IMPORTANT! if you have a ~ 15 secs delay on each Docker command under Windows, disable NETBIOS over TCP/IP on each of your network adapters (TCP/IP v4 Properties)
# see https://github.com/docker/for-win/issues/2131#issuecomment-505286617
# to list the network adapters available to Docker:
# docker network ls
# to build the myrtille image (using Docker Desktop or Toolbox), have this Dockerfile and the myrtille installer (.msi file) into a folder, move into this folder then run this command:
# you also need to provide a network adapter able to download the service monitor during the build. Optionally, you can add a version tag to the image (useful to manage different versions of myrtille)
# docker build --network="<network adapter>" -t myrtille(:tag) .
# to list the images:
# docker images
# to run an image (in detached mode) and provide the resulting container a network adapter able to connect your hosts:
# docker run -d --network="<network adapter>" <image name>(:tag)
# to list the containers:
# docker ps -a
# to open a shell into a container (and be able to explore it, check its ip address, logs, etc.):
# docker exec -it <container ID> cmd
# docker exec -it <container ID> powershell
# to stop a container:
# docker stop <container ID>
# to commit a container into a new image (and be able to persist its config, data and logs):
# docker commit <container ID> <image name>(:tag)
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# DISK CLEANUP
# -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# after a while, you might want to clean the unused containers and images to free some space
# remove all containers (powershell):
# docker rm $ (docker ps -a -q)
# remove all dangling images:
# docker image prune
# more help: https://docs.docker.com/