Очень упрощенно говоря, Docker это способ запуска приложения в такой песочнице, в какой приложение думает, что кроме него на компьютере ничего не установлено. Появился Docker в мире Linux, стал популярным и через некоторое время в мире Windows тоже захотели себе такую игрушку. Областью применения является веб и консольные приложения.
Этот пост для тех, кто далек от мира Linux, кому интересен Docker для Windows, и, тех кто по какой-то причине до сих пор не вник в эту тему.
Под управлением Windows Server появился Docker лишь в Windows Server 2016. Появился он в крайне сыром виде. Почти ничего не умел и годился разве что "для посмотреть на чудо заморское". Позже выходили Windows Server version 1709, затем 1803. Все это время Docker рос. Рос-рос и вот, наконец, вышли Windows Server 2019 и Windows Server version 1809. Docker вырос. Конечно, он еще не умеет многого из того, что хотелось бы, но, того, что уже есть, достаточно для готового решения.
Docker можно установить как на клиентскую ОС, так и на серверную ОС. Далее я буду иметь ввиду Windows 10 1809 и Windows Server 1809. Для работы Docker необходимо предварительно установить компонент системы Containers. Для Windows 10 в данном случае требуется установить Hyper-V. Для Windows Server это не является обязательным, но желательным шагом.
Поскольку Docker продолжает развиваться и в нем постоянно что-то дорабатывается, я предпочитаю использовать ночные сборки как на Windows 10, так и на Windows Server. Тем не менее рекомендовать такой подход для всех я не могу.
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy
{
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem)
{
return true;
}
}
"@
$AllProtocols = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
Write-Host "Download packages..."
Invoke-WebRequest -Uri https://master.dockerproject.com/windows/x86_64/docker.zip -OutFile "$env:TEMP\docker.zip"
Write-Host "Update Docker Engine..."
Expand-Archive -Path "$env:TEMP\docker.zip" -DestinationPath "C:\Program Files\." -Force
[System.Environment]::SetEnvironmentVariable("PATH", "$env:PATH;C:\Program Files\Docker", "Machine")
Set-Location "C:\Program Files\Docker"
.\dockerd.exe --experimental --register-service
Write-Host "Restarting..."
Restart-Computer
Для того, чтобы проверить что сервис установлен и работает, выполним команду в терминале:
docker version
получим что-то похожее
Client:
Version: master-dockerproject-2018-11-26
API version: 1.40
Go version: go1.11.1
Git commit: 2d692aed
Built: Mon Nov 26 23:50:37 2018
OS/Arch: windows/amd64
Experimental: false
Server:
Engine:
Version: master-dockerproject-2018-11-26
API version: 1.40 (minimum version 1.24)
Go version: go1.11.2
Git commit: ed37f60
Built: Mon Nov 26 23:59:05 2018
OS/Arch: windows/amd64
Experimental: true
Итак, у нас есть Windows Server 2019 с установленным Docker. Можно начинать играться.