올해는 컨테이너 및 마이크로서비스를 적극적으로 업무에 사용하기 위해 숙달하려고 합니다.
docker는 프로세스 격리 기술을 이용합니다. 위키백과에 도커 웹 페이지의 기능은 다음 같습니다.
도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다. 이는 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증한다.
결국에 이러한 이점을 이용해서 개발 시점에서 테스트 하는 환경과 실제 운영 환경을 동일하게 구성할 수 있습니다.
1개의 좋아요
윈도에서 docker(앞으로 도커) 환경을 구성하려면 Docker Desktop
을 설치하면 됩니다. 하지만 라이센스의 변화로 걸리는 점이 있습니다. 이 부분은 포럼에서도 언급이 되었었는데요,
도커 데스크톱의 유료화 정책의 영향을 받지 않고 WSL 2를 이용하여 도커를 무료로 계속 사용할 수 있는 방법을 정리한 미디엄 아티클을 공유합니다.
정현님이 아주 자세하게 WSL2에 도커를 직접 설치해서 활용하는 글을 작성해주셨습니다. 이글을 통해 학습을 진행합니다.
2개의 좋아요
가이드에 따라 도커를 설치하고 링크된 문서를 통해 도커 그룹에 사용자를 포함해서 설정하는것까지 진행합니다.
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
그리고 잘 동작하는지를 확인하기 위해 docker run hello-world
를 실행해봅니다. (이 때 데몬이 동작중이여야 합니다)
정현님의 문서대로 테스트를 해도 됩니다.
$ sudo service docker start
$ docker run -i --rm hello-world
1개의 좋아요
WSL 자동으로 서비스가 실행되지 않습니다. 하지만 윈도우 11의 WSL 2에는 해당 기능이 들어 있고 정현님을 글을 따라 관련 설정을 해봅니다.
$ sudo nano /etc/wsl.conf
command
속성은 한번만 사용할 수 있으므로 별도의 셸 스크립트로 만듭니다.
/etc/wsl.conf
[boot]
command=/etc/autorun.sh
$ sudo nano /etc/autorun.sh
/etc/autorun.sh
#!/bin/sh
sudo service docker start
$ sudo chmod +x /etc/autorun.sh
이후 WSL에서 나온 뒤 wsl --shutdown
이후 다시 WSL로 진입해서, docker ps
명령이 동작하면 도커 서비스가 정상적으로 동작하는 것입니다.
1개의 좋아요
다음으로 호스트 컴퓨터에서 WSL2의 도커 데몬 포트에 접근하기 위해, 다음처럼 도커 데몬 설정을 변경합니다.
$ sudo naneo /etc/docker/daemon.json
/etc/docker/daemon.json
{"features": { "buildkit": true }, "hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"]}
이후 도커 데몬을 재시작한후,
$ sudo service docker restart
잘 실행되는지를 확인하기 위해 docker ps
및 호스트 컴퓨터에서 `telnet 127.0.0.1 2375’가 잘 접속되는지를 확인합니다.
상세한 내용은 정현님의 글을 꼭 참조하세요!
1개의 좋아요
정현님의 글을 따가 최종적으로 python에서 Flask를 이용해 Hello World
를 출력하는 서비스를 도커를 통해 확인해 볼 수 있었습니다.
PS> docker build -t pythonapp:latest .
PS> docker.exe run -d --rm -p 5000:5000 pythonapp:latest
PS> curl.exe http://localhost:5000
Hello, Docker!
1개의 좋아요
Visual Studio 2022에서 Blazor Server
프로젝트 템플릿을 이용해 Docker
사용을 선택하고 실행했는데,
도커 빌드는 잘되는데 실행이 되지 않습니다.
1>docker run -dt -v "C:\Users\dimohy\vsdbg\vs2017u5:/remote_debugger:rw" -v "C:\Users\dimohy\AppData\Roaming\Microsoft\UserSecrets:/root/.microsoft/usersecrets:ro" -v "C:\Users\dimohy\AppData\Roaming\ASP.NET\Https:/root/.aspnet/https:ro" -v "W:\Enjoy\BlazorApp7\BlazorApp7:/app" -v "W:\Enjoy\BlazorApp7:/src/" -v "C:\Users\dimohy\.nuget\packages\:/root/.nuget/fallbackpackages" -v "p:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages:/root/.nuget/fallbackpackages2" -e "ASPNETCORE_LOGGING__CONSOLE__DISABLECOLORS=true" -e "ASPNETCORE_ENVIRONMENT=Development" -e "ASPNETCORE_URLS=https://+:443;http://+:80" -e "DOTNET_USE_POLLING_FILE_WATCHER=1" -e "NUGET_PACKAGES=/root/.nuget/fallbackpackages" -e "NUGET_FALLBACK_PACKAGES=/root/.nuget/fallbackpackages;/root/.nuget/fallbackpackages2" -P --name BlazorApp7 --entrypoint tail blazorapp7:dev -f /dev/null
1>docker: Error response from daemon: invalid volume specification: 'C:\Users\dimohy\AppData\Roaming\ASP.NET\Https:/root/.aspnet/https:ro'.
도커는 결국에 WSL2에서 실행될 것이므로 저 경로가 올바르지 않을 것입니다.
Visual Studio 2022에서 도커에서 디버깅 하는 환경은 좀 더 조사해봐야 겠습니다.
1개의 좋아요
WSL2에 도커 데몬이 잘 동작하고 있고 WSL에서는 도커가 잘 실행되는데 갑자기 호스트에서 도커가 안됩니다. 혹시나 해서 telnet 127.0.0.1 2375
로 연결확인을 해봤는데 연결이 안되네요… WSL2의 네트워크 오동작으로 보입니다.
1개의 좋아요
일단 Visual Studio에서 도커 환경에서 디버깅을 하는 것은 현재로서는 뾰족한 수는 없는 것 같습니다.
아쉽지만 WSL 디버그 환경을 이용하는게 최선인 것 같고요,
이와는 별개로 게시를 했을 때 도커 이미지를 만들어주는 방법은
https://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&pageno=0&detail=1&wid=11708
Visual Studio Code에는 커맨드 수준으로 설정이 가능하기 때문에 도커 생성 및 도커 디버그 환경으로 실행이 가능합니다. 관련 학습을 할 때 좀 더 자세히 전개해보겠습니다.
1개의 좋아요