Automatically Docker Daemon Boot on Windows Subsystem Linux(WSL에서 docker 데몬 자동 시작)

동기



windows10 home에 wsl2로 docker를 도입하고, 드디어 docker-compose도 쌓아 최고의 개발 환경을 만들려고 했지만, 한번 전원을 끄면 로그온할 때마다 수동으로 daemon 군을 다시 시작하지 않아 해야 할 일을 깨달았다. docker-compose.yml 에서 restart:always 하고 있는 관계상, 가능하면 Win10이 재기동해 버려도 로그온 하면 곧바로 daemon 군에게는 일어나고 싶으면…

TL; DR



cf. Docker Running Seamlessly in Windows Subsystem Linux

1. sudo vi /usr/local/sbin/start_docker.sh
/usr/local/sbin/start_docker.sh
#!/usr/bin/env bash

# The first command will setup cgroups mounts on the subsystem
# (this only needs to be done once per reboot), and the second 
# will bring up the docker service using systemd.

sudo cgroupfs-mount
sudo service docker start

2. 실행 권한 부여
$ sudo chmod +x /usr/local/sbin/start_docker.sh
# Lock down edit privileges
$ sudo chmod 755 /usr/local/sbin/start_docker.sh

3. sudo vi /etc/sudoers

  • 하단에 다음 항목 추가


  • /etc/sudoers
    # Enable docker services to start without sudo
    yourUserName ALL=(ALL:ALL) NOPASSWD: /bin/sh /usr/local/sbin/start_docker.sh
    

    4. 작업 스케줄러로 로그온할 때 wsl에서 docker를 시작합니다.
  • 일반
  • 최상위 권한으로 실행 확인

  • 트리거
  • 로그인 할 때 약간의 시간 차이로 시작
  • 동시에하면 의도하지 않고 사고 할 수 있기 때문에

  • 조작
  • 프로그램: C:\Windows\System32\bash.exe
  • 인수 추가: -c "sudo /bin/sh /usr/local/sbin/start_docker.sh"

  • 조건
  • "AC 전원으로 ~"선택 해제

  • 설정
  • 원하는대로


  • 5. 재부팅하고 다시 로그온한 후 sudo service docker status에서 동작 확인
    $ sudo service docker status
     * Docker is running
    

    사적 해석 (자기 중심 해설)



    1. sudo vi /usr/local/sbin/start_docker.sh


    start_docker.sh라는 쉘 스크립트가 /usr/local/sbin라는 디렉토리에 있습니다. 쓰기에는 루트 권한이 필요합니다. vi 로 열면 읽어들이기 한정이 되어 있으므로, :w !sudo tee % 하면 좋을 것 같아? (에디터 초보자 병감)

    2. 실행 권한 부여


    chmod 명령을 사용하여 /usr/local/sbin/start_docker.sh 권한을 변경 중입니다. 옵션에 +x 를 사용하고 있으므로, "eXecution"을 추가한 것이 된다. 이것을 단순히 부여할 뿐만 아니라 대상마다 숫자로 지정하는 방법이 chmod OOO 라는 것이다.
    이 조작에 의해, /usr/local/sbin에 놓여져 있는 스크립트를 시스템측으로부터 실행할 수 있게 된다.

    3. sudo vi /etc/sudoers


    /etc/sudoers에는 sudo 주위의 이것이 설정되어 있다 (실행 가능 사용자라든지 명령등). 이 파일에의 변경은 즉시 반영되므로 :w !sudo tee % 하기 전에 오자 탈자등이 없는지 염두에 확인하는 것 (이패). 실수하면 sudo를 사용할 수 없습니다 → 구성 파일에 오류가 있습니다! 가 되어 포장한다.
    만약 그렇게 되었다면, 패스워드를 재설정할 때와 마찬가지로, powershell 또는 cmd.exe에서 wsl -u root로 root 로그인하는 해결책이 있다(sudo 없이 /etc/sudoers를 변경할 수 있는 사용자로 한 루트 군에게 물어 수정)
  • 참조: wsl로 암호를 잊어 버렸을 때의 해결 - Qiita

  • 4. 작업 스케줄러로 로그온할 때 wsl에서 docker 시작











    실은 /usr/local/sbin/start_docker.sh 의 내용은 docker 기동 커멘드에 한정하지 않고 어떤 것이든 실행할 수 있다 (예를 들어 service 에 등록되어 있는 것 등, 항상 sudo 가 필요한 것 모두). 인터랙티브 실행이 되지 않도록 주의하면서, sshcron 등을 여기에 추기해 두는 것으로, 거의 보통의 서버와 변함없는 행동을 시킬 수 있다.
    위의 공정 각각에서 파일명을 /usr/local/sbin/WSL_autostart.sh 등으로 변경하고, 그 파일에 적절히 필요한 명령을 추기해 나가면 좋을 것이다.

    참조:


  • Docker Running Seamlessly in Windows Subsystem Linux
  • wsl로 암호를 잊어 버렸을 때의 해결 - Qiita
  • 좋은 웹페이지 즐겨찾기