owned this note
owned this note
Published
Linked with GitHub
# Dockerisation MD
## Setup PC
### Programmes à installer
- Installer [Wsl2]
- Installer [Docker]
[Wsl2]: https://docs.microsoft.com/fr-fr/windows/wsl/install-win10
[Docker]: https://desktop.docker.com/win/stable/Docker%20Desktop%20Installer.exe
### Configuration Sql Server
Pour que les containers puissent communiquer avec un Sql Server local, il faut configurer ce dernier.
Pour ce faire :
- Taper **Windows+R**, et saisir **mmc.exe**
- Puis taper **Ctrl+M**
- Sélectionner le composant **SQL Server Configuration Manager**, et cliquer sur **Ajouter**, puis sur **Ok**
- Dans le panneau de gauche, cliquer sur le composant **SQL Server Configuration Manager**, puis sur **Configuration du réseau SQL Server**
- Dans le panneau de droite, cliquer avec le bouton droit sur **TCP/IP**, puis dans le menu contextuel, cliquer sur **Activer**
- Ensuite, double-cliquer sur **TCP/IP**, cliquer sur l'onglet **Adresses IP** et scroller jusqu'à l'entrée **IPAll**. Dans **Ports TCP dynamiques**, saisir **52057**
## Développment
### Environnement
- Les settings de l'environnement Development, l'environnement traditionnel par défaut, valorisent une configuration pour une utilisation des applications en mode container (Docker).
- Pour travailler en mode classique Windows, il faut configurer les [LaunchSettings](#launch-settings) pour que les profils de debug Project et IISExpress initialise la variable ASPNETCORE_ENVIRONMENT à DevWindows.
- Pour passer d'un mode classique Windows à un mode Docker, et vice-versa quitter Visual Studio et lancer la commande clean.bat.
### Azure
Pour builder les images Docker, il faut qu'il puisse télécharger les images et les différents packages utilisés dans nos Dockerfiles.
Ce qui implique d'être connecté à Azure.
Pour ce faire, lancer les commandes suivantes :
```
az login
az acr login --name medecindirect
```
### Dockerfile
```dockerfile
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
#
# SETUP
#
FROM ubuntu:20.04 AS base
ARG env=Development
ARG urls=http://+
ARG https_port
ENV ASPNETCORE_ENVIRONMENT=${env}
ENV ASPNETCORE_URLS=${urls}
ENV ASPNETCORE_HTTPS_PORT=${https_port}
ENV TZ=Europe/Paris
ENV DOTNET_RUNNING_IN_CONTAINER=true
RUN apt-get update && apt-get install -y wget
RUN wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
RUN dpkg -i packages-microsoft-prod.deb
RUN apt-get update && apt-get install -y \
vim \
apt-transport-https \
dotnet-sdk-3.1 \
aspnetcore-runtime-3.1
EXPOSE 80
EXPOSE 443
WORKDIR /app
RUN apt-get update -yq \
&& apt-get -yq install curl gnupg ca-certificates \
&& curl -L https://deb.nodesource.com/setup_12.x | bash \
&& apt-get install -yq nodejs \
&& npm install --global yarn \
&& rm -rf /var/lib/apt/lists/*
#
# BUILD
#
FROM base AS build
WORKDIR /src
COPY ["MD.React.Patient/MD.React.Patient.csproj", "MD.React.Patient/"]
COPY ["MD.Tools.Shared.Hosting/MD.Tools.Shared.Hosting.csproj", "MD.Tools.Shared.Hosting/"]
COPY ["MD.Tools.Shared/MD.Tools.Shared.csproj", "MD.Tools.Shared/"]
RUN dotnet restore "MD.React.Patient/MD.React.Patient.csproj"
COPY . .
WORKDIR "/src/MD.React.Patient"
RUN dotnet build "MD.React.Patient.csproj" -c Release -o /app/build
#
# PUBLISH
#
FROM build AS publish
RUN dotnet publish "MD.React.Patient.csproj" -c Release -o /app/publish
RUN cp -rf /src/MD.React.Patient/ClientApp /app/publish
RUN cp -f /src/MD.React.Patient/ClientApp/configs/.env.${ASPNETCORE_ENVIRONMENT} /app/publish/ClientApp/configs/.env
#
# FINALIZE IMAGE
#
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
WORKDIR "/app/ClientApp"
RUN yarn install
RUN yarn
RUN yarn run build:${ASPNETCORE_ENVIRONMENT}
WORKDIR /app
ENTRYPOINT ["dotnet", "MD.React.Patient.dll"]
```
### Launch Settings
```json
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:5022/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "DevWindows"
}
},
"MD.React.Patient": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "DevWindows"
},
"applicationUrl": "http://localhost:5022/"
},
"Docker": {
"commandName": "Docker",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_URLS": "http://+",
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:5022/"
}
}
}
```
### Possibles dépannages
#### Le processus Vmmem prend trop de ressources mémoire.

**Vmmem** est un processus virtuel que le système synthétise pour représenter la mémoire et les ressources processeur consommées par vos machines virtuelles. En d'autres termes, si vous voyez que vmmem consomme beaucoup de mémoire et de ressources CPU, cela signifie que vos machines virtuelles consomment beaucoup de mémoire et de ressources CPU.
*[Source](https://devblogs.microsoft.com/oldnewthing/20180717-00/?p=99265)*
En effet **Docker** utilise **wsl2** pour l'exécution des containers Linux. Donc vmmem est utilisé.
Il est néanmoins possible d'ajouter des contraintes sur les ressources prises par vmmem en créant un fichier %UserProfile%\.wslconfig.
L'exemple si dessous limite la mémoire alloué à la machine virtuelle à 6GB :
```
[wsl2]
memory=6GB
```
*D'autres configurations sont possibles. Pour plus d'informations, consultez l'article Microsoft à ce sujet [ici](https://docs.microsoft.com/fr-fr/windows/wsl/wsl-config#configure-global-options-with-wslconfig).*