리눅스 가상머신과 WSL의 차이, 도커?

wltjd666의 이미지

안녕하세요. 요즘 리눅스 환경을 설정하려고 이것 저것 알아보고 있는데요.
너무 헷갈리는 부분이 있어서 질문 드려요.

리눅스를 설치하는 방법은 제가 이해한 바로는 이렇습니다.

1. 컴퓨터 자체에 운영체제 설치(멀티 OS)
2. 가상머신으로 리눅스 구동하기
3. 윈도우 WSL2로 리눅스 사용하기..

이렇게 세가지 정도 알고 있고, 1번과 2번은 확실하게 이해했고, 2번은 직접 해보기도 했습니다.
그런데 3번 WSL2가 조금 이해가 안가는 부분이 있어요.

1. 여기서 WSL은 리눅스를 구동할 수 있는 가상머신이라고 볼 수 있나요?
2. 가상머신이라고 볼 수 있다면, 2번과 다른 점은 무엇인가요? 왜 메모리 측면에서 더 좋나요?

3. 우분투 터미널을 사용하려면 무조건 WSL과 연동되어야 하는 건가요?
4. 도커를 사용하는 이유를 잘 이해하지 못했습니다. 컴퓨터 메모리를 아끼기 위함인가요?

academic의 이미지

이쪽에 지식이 모자라서 틀린 내용이 있을 겁니다. 그냥 제가 이해한 대로 적었으니 감안하고 봐주세요.

1. wsl은 가상 머신이긴 한데, 기존 VM과 같은 풀 스펙의 VM이 아니라 리눅스의 개별 프로그램을 윈도우에서 실행하기 위한 간단한 유틸리티 VM으로 이해하고 있습니다.

2. 기존 VM은 리눅스 OS를 부팅하죠. 부팅하느라 속도가 느립니다. 리눅스 OS를 모두 로드하느라 많은 리소스를 사용합니다. OS니 당연히 관리도 필요합니다.

WSL2는 기존 VM 환경과는 다릅니다. OS를 다 로딩할 필요가 없으니 기존 VM에 비교해서 빠르고 리소스를 덜 사용하며 관리할 필요가 없습니다. 그냥 리눅스 프로그램을 실행하는데 필요한 커널만 로딩한다고 알고 있습니다.

그래서 리눅스에서 윈도우 exe 파일을 실행시킬 수 있고 윈도우에서 리눅스 프로그램을 실행할 수도 있습니다.
예를 들어 다음과 같이 윈도우에서 리눅스의 grep 명령을 실행할 수 있습니다.

C:\> dir | wsl grep search_string

3. 아닙니다.

4. 도커를 사용하는 이유는 관리를 편하게 하기 위함입니다. 도커를 사용하지 않는 것에 비해 아주 조금의 오버헤드는 있겠지요. 그럼에도 불구하고 관리의 편의성이 크기 때문에 사용합니다.

----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

Necromancer의 이미지

가상머신(Virtualbox, VMware) - 하드웨어, 바이오스 레벨은 에뮬레이션해서 분리. 에뮬레이션은 전부 하는게 아니라 하드웨어 접근이나 시스템 콜 부분을 가로채서 다른 처리를 해서 다른 컴퓨터가 있는 것처럼 보이게 하는 방식.

도커 - 커널 공유하고 나머지는 분리. 커널이 시스템콜상에서 어느 도커 컨테이너가 콜 했느냐에 따라 다른 처리를 해서(메모리나 디스크 등의 접근 범위가 달라지는 등) 여러 머신이 한 머신에서 돌고 있는 듯하게 함. 가상머신보다 속도 빠름.

WSL - 윈도우에 리눅스 커널 API 흉내내는 기능 추가해서 리눅스의 바이너리를 돌림.

그냥 맛뵈기로 써보거나 리눅스 속을 들여다볼 필요 없는 웹서비스 개발 정도면 WSL도 상관 없겠지만, 정식서비스나 하드웨어 드라이버, 시스템콜을 low level로 다루는 개발 하겠다면 WSL은 절대 비추입니다. 정식서비스는 라이센스 문제가 있고, low level 개발 할경우는 WSL이 오리지널 리눅스 커널과 같을 수가 없거든요. read(), write() 같은 자주 쓰는 것들은 비슷하겠지만 ioctl() 같이 하드웨어 민감한 시스템콜들은 같을 수가 없습니다.

Written By the Black Knight of Destruction

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.