지난번에는 MacOS에 도커(Docker Desktop)을 설치하고, 컨테이너에 nginx도 올리는 것도 해보았는데, 밤도 늦고 해서 컨테이너를 정리하지 않고 그냥 내버려두었다.


컨테이너 이미지를 실행하는 것을 복습할겸해서 다시 정리한다. 

사실 설치와 리소스를 정리하는 내용은 "docker.com"에 있는 Getting started를 참조하면 바로 알수 있다.

  

    Getting Started : "https://docs.docker.com/docker-for-mac/#explore-the-application"



지난번에 했던 내용을 복습하는 측면에서 정리를 해보면, 먼저 버전을 확인한다.

"docker", "docker-compose", "docker-machine"의 버전을 아래과 같이 Terminal에서 확인할 수 있다.

mymac$ docker --version

Docker version 18.09.0, build 4d60db4

mymac$ docker-compose --version

docker-compose version 1.23.2, build 1110ad01

mymac$ docker-machine --version

docker-machine version 0.16.0, build 702c267f


또는 상단에 떠 있는 "Docker Dasktop" 의 고래 아이콘을 클릭하면 뜨는 메뉴창중에 "About Docker Desktop" 메뉴를 클릭하면 

다음과 같은 화면이 나타난다. 

설치되어 있는 시스템 모듈의 버전들이 보인다.


 지난번에 설치해서 실행한 컨테이너는 "hello-world"와 "eginx" 였다.

mymac$ docker run hello-world

mymac$ docker run -d -p 80:80 --name webserver nginx


Local Repository에 설치되어 있는 이미지가 있다면, 그대로 사용하고, 없다면 공용 Repository에서 최신버전을 다운받아서 실행을 하게 된다. 여기까지가 지난번에 수행했던 작업이다.


"docker run"을 실행할때 옵션 정보를 알려면 "docker run --help"를 터미널창에서 실행하면 된다.

여기서 "-d" 옵션은 background에서 실행하라는 옵션이다 (컨테이너 ID를 화면에 찍고).

그리고, "-p" 옵션은 컨테이너의 port와 호스트의 port를 매핑해 주는 옵션이다. 위에서는 80포트를 80 포트로 매핑하는 역할을 한다. 

-d, --detach                   Run container in background and print container ID

-p, --publish list             Publish a container's port(s) to the host


실행되고 있는 컨테이너의 리스트는 "docker container ls" 명령으로 아래가 같이 가져올수 있다.

mymac$ docker container ls

CONTAINER ID   IMAGE  COMMAND                  CREATED            STATUS           PORTS                         NAMES

5301571351c7      nginx  "nginx -g 'daemon …"   9 minutes ago   Up 9 minutes   0.0.0.0:80->80/tcp   webserver


세부적인 명령에 대한 도움말은 "docker container --help" 를 이용해서 볼 수 있다.

도움말을 보년 "a"옵션은 전체를 보여주라는 옵션인데, 실행하면 아래와 같은 내용을 볼수 있다.

mymac$ docker container ls -a

CONTAINER ID   IMAGE         COMMAND               CREATED          STATUS              PORTS                NAMES

5301571351c7    nginx     "nginx -g 'daemon…"   17 minutes ago   Up 17 minutes       0.0.0.0:80->80/tcp   webserver

29094fd263cf   hello-world   "/hello"                20 minutes ago   Exited (0) 20 ...                                  quirky_ptolem


 

위 실행 결과를 보면 삭제하려는 컨테이너와 이미지는 "nginx"와 '"hello-world"인데, "nginx"는 지금 백그라운드에서 실행중이라는 것을 알수 있다.


Terminal에서 "docker container stop webserver"를 입력하여 실행되는 컨테이너을 중단시키고, 그 결과를 조금전에 수행했던 "docker container ls -a"명령을 이용해서 확인해 보면 다음과 같이 나타난다.

mymac$ docker container stop webserver

webserver


mymac$ docker container ls -a

CONTAINER ID        IMAGE               COMMAND                  CREATED                STATUS                      

5301571351c7        nginx               "nginx -g 'daemon of…"   28 minutes ago      Exited (0) 4 minutes ago 

29094fd263cf      hello-world      "/hello"                 31 minutes ago              Exited (0) 31 minutes ago 


이어서 컨네이너와 이미지를 삭제한다.


먼저 컨테이너를 삭제한다. 컨테이너 리스트에서 보았던 "NAMES" 필드값을 이용하면 된다.

mymac$ docker image rm webserver

mymac$ docker image rm quirky_ptolemy


실행된 결과의 확인은 다시 "docker container ls -a"명령을 확인하면 된다.


다음으로는 이미지를 삭제하는 방법인데, 먼저 "docker image ls" 명령을 사용해서 리스트를 가져온다.

mymac$ docker image ls

REPOSITORY      TAG        IMAGE ID         CREATED          SIZE

nginx           latest     568c4670fa80     13 days ago      109MB

hello-world     latest     4ab4c602aa5e     3 months ago     1.84kB


이미지를 삭제하기 위해서는 옵션으로 "IMAGE ID"가 필요하기 때문이다.

"hello-world" 와 'nginx'의 이미지는 다음과 같이 " docker image rm" 명령을 이용하여 삭제할 수 있다. 

mymac$ docker image rm 4ab4c602aa5e

Untagged: hello-world:latest

Untagged: hello-world@sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788

Deleted: sha256:4ab4c602aa5eed5528a6620ff18a1dc4faef0e1ab3a5eddeddb410714478c67f

Deleted: sha256:428c97da766c4c13b19088a471de6b622b038f3ae8efa10ec5a37d6d31a2df0b


mymac$ docker image rm 568c4670fa80

Untagged: nginx:latest

Untagged: nginx@sha256:5d32f60db294b5deb55d078cd4feb410ad88e6fe77500c87d3970eca97f54dba

Deleted: sha256:568c4670fa800978e08e4a51132b995a54f8d5ae83ca133ef5546d092b864acf

Deleted: sha256:ac0442c0fafd48e24a96fa3099ea7ad20012c8759e1dd03dd387dbfbe382984c

Deleted: sha256:6b9d35d8d75115937cd78da275f527cccef672cbd71f34062dffe2e930fd7e13

Deleted: sha256:ef68f6734aa485edf13a8509fe60e4272428deaf63f446a441b79d47fc5d17d3


이에 대한 실행 결과는 "docker image ls"를 이용해서 확인하면 된다.


Posted by 행복상자

새로운 과제를 위해서 Docker의 사용을 검토하고 있는 와중에, 얼마전에는 Google Cloud 기반의 "Kubernates" 사용을 위한 교육도 참여하였다. 몇년전에 Docker에 대해서 검토할때도 각 Cloud 서비스를 제공하는 업체에서, 지금처럼 지원이 가능한 솔루션들이 많이 없었는데, 현재는 "Kubernates"를 기본 Docker관리 플랫폼으로 사용하려고 듯하다. "AWS", "MS" 그리고 "Google Cloud"에서 "Kubernates"를 지원한다.

구글에서는 컨테이너 기반으로 서비스를 운영하고 있다고 한다.


오늘은 며칠전부터 마음 먹었던 일을 하려고 한다. 개인용 PC에 도커를 설치해 보려고 한다. 집에서 사용하고 있는 MacOS에 설치하려고 한다.


Docker에 대해서는 며칠전부터 책을 보고 있는데, 나무위키에서는 다음과 같이 간단하게 잘 설명해 주고 있다.

도커는 LXC(리눅스 컨테이너)라는 커널 컨테이너 기술을 이용하여 만든 컨테이너 기술 중에 하나이다.


가상화와 관련된 여러 기술들이 있지만, 도커는 리눅스 기반의 기술에서 비롯되었다고 이해하면 된다.


Docker는 "https://www.docker.com"에 접속하면 자세한 정보들을 볼수 있는데, 나는 여기서 오늘은 MacOS에서 구동이 가능한 "Docker Desktop"을 설치하려고 한다.


Docker 웹사이트의 "Products" 메뉴에서 "Docker Desktop"을 찾아가거나 다음의 URL로 직접 접속해서 다운을 받아도 된다. 


Docker Desktop : https://www.docker.com/products/docker-desktop


아래와 같은 화면을 볼수 있을 것인데, 여기서 Mac용 설치 파일을 받으면 된다.





그런데, 바로 다운을 할수가 없다. ^^;;  

로그인을 위한 회원가입이 선행이 되어야 한다.

가입은 로그인 계정에 사용할 id와 인증을 위한 email 계정을 넣으면 쉽게 할수 있다. 인증 email을 받아서 내용을 보면, 아래와 같이 "Confirm Your Email" 버튼이 보이는데, 이를 클릭하면, 인증은 끝나고, 바로 다운로드를 받을 수 있다. 

MacOS 에서는 "Docker.dmg" 파일이 다운로드 받게 되어있다. 

이제 다운로드한 "Docker.dmg"을 Finder를 열고, 더블 클릭을 하게 되면 아래와 같은 화면이 나타나는데, 아래 창에서 보이는 그대로 "Docker" 이미지를 마우스로 드래그 & 드롭해서 "Applications"폴다 이미지에 가져다 놓으면 설치가 진행된다.

설치가 완료되고 실행을 시키면 아래와 같은 화면이 나타난다.

그리고 화면 상단에는 다음과 같이 도커 이미지가 표시가 될 것이다.



위 화면에서 "Next" 버튼을 누르면, 아래와 같이 권한에 대한 요청 메시지를 볼수 있는데, "OK"버튼을 클릭하고, 시스템 관련 Password를 입력하면 된다.

패스워드를 입력하면, 사용할 준비는 끝나게 되는데, 이와 동시에 화면 상단에 로그인 하라는 화면이 아래와 같이 나타날 것이다.

조금 아까 다운로드 받기위해서 만들었던,  id 와 password 를 입력하게 되면, 아래와 같이 사용이 가능하다는 화면이 나타나게 된다.

설치된 Docker Dasktop을 한번 테스트겸 사용해 보자.

간단하게 위의 화면처럼 Terminal을 하나 열고 "docker run hello-world"를 실행해 보자.

그러면 다음과 같이 화면에 표시가 될 것이다.

mymac$ docker run hello-world

Unable to find image 'hello-world:latest' locally

latest: Pulling from library/hello-world

d1725b59e92d: Pull complete 

Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788

Status: Downloaded newer image for hello-world:latest


Hello from Docker!

This message shows that your installation appears to be working correctly.


To generate this message, Docker took the following steps:

 1. The Docker client contacted the Docker daemon.

 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.

    (amd64)

 3. The Docker daemon created a new container from that image which runs the

    executable that produces the output you are currently reading.

 4. The Docker daemon streamed that output to the Docker client, which sent it

    to your terminal.


To try something more ambitious, you can run an Ubuntu container with:

 $ docker run -it ubuntu bash


Share images, automate workflows, and more with a free Docker ID:

 https://hub.docker.com/


For more examples and ideas, visit:

 https://docs.docker.com/get-started/


설치된 Docker의 버전은 "docker --version"을 이용해서 알수 있다.

mymac$ docker --version

Docker version 18.09.0, build 4d60db4


 이번에는 Webserver를 한번 띄우겠다. "docker run -d -p 80:80 --name webserver nginx" 라고 terminal에 입력한다.

mymac$ docker run -d -p 80:80 --name webserver nginx

Unable to find image 'nginx:latest' locally

latest: Pulling from library/nginx

a5a6f2f73cd8: Pull complete 

1ba02017c4b2: Pull complete 

33b176c904de: Pull complete 

Digest: sha256:5d32f60db294b5deb55d078cd4feb410ad88e6fe77500c87d3970eca97f54dba

Status: Downloaded newer image for nginx:latest

08f27af460e9d6d3521104729fdeda7f4fba9ff7b69187bbf7fb588307c4fc71


이미지가 로컬에 없다면, 다운받아서 설치가 될 것이다. 


설치된 이미지와 컨테이너의 동작을 보기 위해서 아래가 같이 "docker container ls" 명령은 준다. 

결과가 잘 나왔다.

mymac$ docker container ls

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES

08f27af460e9        nginx               "nginx -g 'daemon of…"   38 seconds ago      Up 37 seconds       0.0.0.0:80->80/tcp   webserver


이번에는 정상적으로 동작하는지 확인해 볼거다. Terminal에서 "curl -X GET http://localhost:80"을 입력하고 실행해보면 아래와 같이 출력이 될 것이다. 정상적으로 잘 동작하는 것이다. 물론 브라우저에서도 가능하다. 

mymac$ curl -X GET http://localhost:80

<!DOCTYPE html>

<html>

<head>

<title>Welcome to nginx!</title>

<style>

    body {

        width: 35em;

        margin: 0 auto;

        font-family: Tahoma, Verdana, Arial, sans-serif;

    }

</style>

</head>

<body>

<h1>Welcome to nginx!</h1>

<p>If you see this page, the nginx web server is successfully installed and

working. Further configuration is required.</p>


<p>For online documentation and support please refer to

<a href="http://nginx.org/">nginx.org</a>.<br/>

Commercial support is available at

<a href="http://nginx.com/">nginx.com</a>.</p>


<p><em>Thank you for using nginx.</em></p>

</body>

</html>



웹브라우저에서 "http://localhost" 또는 "http://localhost:80"을 실행해보면 다음과 같은 화면을 볼수 있을 것이다.




처음으로 docker dasktop을 설치해 보았는데, 설치는 별로 어렵지 않았는데, 로그인을 해야 한다라는 사실이 좀 생소하였다. 이후는 수월하게 설치할 수 있었다.


아참, 아까 띄워놓은 컨테이너는 어떻게하지, 아직도 동작하고 있을 텐데...

오늘은 늦었으니, 내일 다시 마무리 해야겠다.

 



Posted by 행복상자

Visual Studio Code의 단축키들을 정리한 파일들이다. 가끔식 확인이 필요하거나 책상에 프린트에서 붙여 놓으면, 참고하는데 도움이 될 것이다.  VS Code의 메뉴상에서는 "도움말" > "바로가기 키참조"에서 확인 가능하다.


아래는 각 OS별로 작성된 Shortcut 키 매핑에 대한 파일들의 링크와 위치이다.



[MacOS용 Shortcut 파일] 

   https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf






[Windows용 Shortcut 파일

    https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf





[Linux용 Shortcut 파일]

    https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf



'Tip & Tips > VS Code Tip & Tips' 카테고리의 다른 글

Visual Studio Code : Shortcuts(단축키)  (0) 2018.12.03
Visual Studio Code의 Text Font 바꾸기  (0) 2018.11.11
Posted by 행복상자

최근에 Microsoft에서 주최했던, AI 컨포런스에 다녀오고 나서 읽기 시작한 책이다.

마이크로 소프트의 CEO인 "사티아 나델라" 이 사람에 대해서, 지난 몇년 동안 많은 매스미디어에 노출이 되었지만, 그가 누군지에 대해서는 잘 알지 못하였다. 단지 인도 출신의 성공한 개발자라는 생각할 뿐이었다.


책을 보면서, 여러가지 다른 관점에서 그에 대해서 바라보게 되었다.

이전에 내가 알고 있었던 얇팍한 지식으로 알고있던 그는 슈퍼 히어로와 같았다. 어느날 갑자기 나타나서 위기에 빠진 마이크로소프트를 구해내었던 초인으로 알고 있었다. 그러나 그에게 영향을 주었던 사람들과 그가 좋아하던 것을 알게되면서, 미디어에서 볼수 없었던 순전히 인간적인 면모로부터 그를 이해할 수 있었다.


오래전인것 같다. 내가 처음 Programing을 배웠던 그 때에는, "빌게이츠"와 "스티브 잡스"가 가장 유명했던 개발자였다. 물론 Norton Utilities를 만들었던 "피터 노턴"도 인상 깊었지만, 이 두 사람 만큼 만은 아니었다.


그중에서 빌게이츠가 만든 마이크로소프트사는 개인용 컴퓨터 소프트웨어 시장에서 단연 독보적인 회사였고, 서버 영역까지 확장에 확장을 하고 있었다. 네트워크와 인터넷 시대가 도래하면서, 위기가 찾아 오기도 하였지만, 특유의 저력과 집중력으로 위기를 이겨내고, 새로운 비전을 향해 나아가던 도전자의 모습을 가졌었다.  


그런데 어느날 "빌게이츠"가 CEO에서 물러나고, 그와 같이 마이크로 소프트의 창업과 사업 동참하였던, "스티브 발머"가 회사 경영을 맡고나서는 마이크로소프트는 경쟁자들에게 밀려 한단계씩 아래로 추락하던 참이었다. 이때 등장했던 이가 마이크로소프트의 세번째 CEO인 "사티아 나델라" 였다.


사티아 나델라는 인도에서 태어난 개발자 출신의 이민자라는 사실만이 내가 아는 그에 대한 전부였기에, 그가 어떤 사람인지에 대해서 알고 싶은 마음이 컸다.  내가 이터넷을 검색하다 찾아본 "히트 리프레시"는 그의 부모와 그리고 아내와 자녀에 대한 여러가지 사실들을 알려주고 있는데, 이 책은 어떤 의미로는 그의 "리더십"에 대해서 말하기도 하지만, 지금 우리가 필요한 리더십이 무엇인지를 알려주기도 한다.


"빌게이츠"는 서문에

 미래에는 다른 이들에게 능력을 부여하는 사람이 리더가 될 것이다.

라고 말하고 있다.




"사티아 나델라"는 1992년도 마이크로소프트에 입사하였다. 그는 마이크로소프트가 PC혁명을 일으킨 주역이었으며 유일무이한 성공을 거둔 회사였지만, 관료주의와 사내정치로 추락하고 있다고 이야기를 시작한다.


2014년 2월 마이크로소프트사의 CEO가 된 그는 

"세상을 변화시키겠다는 목표로 다시 돌아가기 위해 혁신을 가로 막는 장벽을 제거하겠다"

라고 이야기를 한다. 

이당시의 마이크로소프트사는 이전에 가졌던 "개발회사"의 이미지는 없어지고 IBM과 같은 비즈니스 또는 컨설팅회사 같이 세련된 비즈니스 회사의 이미지가 강한 회사었다. (나의 느낌일지 모르지만...)


그의 리더십은 "공감능력"에서 출발했지만, 처음부터 공감능력을 충분히 갖춘 사람은 아니었다. 그의 입사 면접에서 한가지 질문을 받았는데, "만약 아이가 거리에 누워서 울고 있다면 어떻게 할 겁니까?" 라는 질문이었다.

어떻게 해야할까? "그는 911을 부를 겁니다"라고 대답을 하였는데, 적절한 대답은 아니었다.

질문자에게 "당신은 공감능력이 부족합니다"라는 이야기를 들어야 했던 그였다.

그 이후에 여러가지 일들 로부터 그에게 부족했던 "공감능력"을 키우면서, 리더로서의 자질도 키울수가 있었다.   


그는 이렇게 책에서 이야기 한다.

"나는 공감 능력이 리더의 가장 중요한 덕목이라고 생각한다. 그것은 자신이 이끄는 구성원들의 자신감을 키우기 때문이다."


책은 마이크로소프트의 혁신에 대해서 이야기한다.

인공지능과 혼합현실 그리고, 클라우드와 양자 컴퓨팅등 새로운 기술들로 인해 인간의 역할이 어떻게 바뀌고, 어떠한 윤리와 도적적인 기준이 필요한지에 대해서 각계각층에서 광범위한 논의가 일어나고 있는 시대에 우리는 살고 있다. (아직 구체적이지 않은 도입을 위한 준비 단계라는 이야기이다.)


그의 아버지는 공무원이었고, 어머니는 산스크리트어 학자였는데,  어려서부터 강압적이던 다른 부모들과는 달리 자유로웠던 유년시절을 보냈었다. 그는 크라켓을 좋아하고, 컴퓨터를 좋아하는 아이였었다. 그는 인도 공과 대학교 입학시험에 낙방하고, 마니팔 공과대학교 전기공학과에 입학하였는데, 전기공학을 계속한다면, 언젠가는 좋아하는 컴퓨터와 소프트웨어를 할 수 있을 것이라는 꿈이 있었다. 

결과적으로 그는 마이크로소프트에서 그의 꿈을 이루게 된다.


내가 바라본 바로는,

마이크로소프트사의 CEO인 그는 여러가지 다른 변화된 모습으로 조직과 개발자들에게 나타났는데, 그중에 가장 커다란 변화는 다음의 2가지를 보면 알수 있듯이, 지난 35년동안 보여주었던 모습과는 완전히 다르다.

관점과 패러다임의 변화는 어떤 한사람이 시작하였는지는 모르지만, 이전과는 전혀 다른 모습으로 새로운 역사를 써 내려가고 있다. 


첫째로 기술 리더로서의 기술 지향적인 개발사의 이미지 변화였다.  윈도우즈 중심에서서 클라우드 퍼스트와 모바일 퍼스트 정책을 펴면서, Azure를 통해 Cloud의 주도권을 찾아가고 있다. 물론 아직은 AWS에 뒤진 2위 업체이지만, 지난 몇년간의 성장과 발전은 정말 눈부시다. 마이크로소프트사는 역대 최대의 성과를 올렸는데, 연간 1000억불의 매출을 올렸다고 지난 7월에 발표했다.


그리고, 두번째는 오픈소스에 대한 무한 사랑이다. 바라보는 이들이 거북할 정도록 애정을 보여주고 있는데, 이전에 리눅스와 오픈소스를 바라보는 관점과는 완전히 달라지면서, 새로운 모습을 보이고 있다. 지난 2015년도에 사티아 나델라는 "마이크로소프트는 리눅스를 사랑한다"라고 발표하기도 했다.

최근에 오픈소스 공유사이트인 Github를 75억달라에 인수하기로 하였는데, Github상의 오픈소스 기여자가 가장많은 회사가 마이크로소프트이다.



 


Posted by 행복상자