3 분 소요

도커에 C/C++개발환경을 구축해보았다.

Page1.윈도우10에 도커 설치하기

일단 도커는 리눅스를 기반으로 하기 때문에 도커를 효율적으로 사용하기 위해서는 WSL을 설치해야 한다고 들었다. 그래서 WSL을 설치하고 그 위에 도커를 올리고 거기다가 Dockerfile을 통해 리눅스를 탑재후 C/C++을 개발할 수 있는 환경을 구축해보려고 한다. (오늘 또 엄청난 삽질을 할거라고 나의 몸이 직감하고 있다. 뭐 그래도 삽질하고 나면 남는게 있으니까, 그리고 교수님께서 사주진 터틀봇에다가도 도커로 개발을 진행해야 하기 때문에, 이 부분에 대해서는 피해갈 수 있는 명분이 없다. 후딱 해치워버리자!!)

1.일단 WSL을 설치해주었다.

찾아보니 wsl을 윈도우환경에서 활성화시켜주는 숨은 명령어가 있다고 한다.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

POWERPNT_rcQ01Ngpv6

그리고 VirtualMachinePlatform 기능을 활성화시켜주는 숨은 명령어도 적어주었다(두개는 서로 다른거니 오해하지 말자!)

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

POWERPNT_UbVFLTUymf

이후 WSL을 재부팅해주었다.

재부팅후에 파워셸에 wsl을 입력했더니 아래와 같이 배포판을 MS Store에서 설치하는 문구가 떴다.

POWERPNT_HMvovYSqRu

그래서 바로 설치할려고 했는데, 블로그를 찾아보니 우분투 배포판을 설치하기 전에 리눅스 커널을 업데이트 해주라는 글을 보았다.

리눅스 커널 업데이트 패키지 다운로드(링크)

POWERPNT_KxLH3x8AAG

이후 wsl_update를 실행시켜주었다.

POWERPNT_n5DZ9TbqkI

이후 설치가 되었으면, ‘윈도우 기능 켜기/끄기’에 들어가서 Hyper-v항목, Linux용 Windows 하위시스템 항목을 활성화시켜주었다.

이후, WSL2를 기본버전으로 설정해주었다. 아래 명령어을 붙여넣었다.

wsl --set-default-version 2

POWERPNT_cGlRQaPTQ5

이제 본격적으로 MS Store에 들어가서 Ubuntu 20.04 LTS버전을 설치해주었다.

5분정도 기다렸나? 유튜브로 WQER채널 영상 보다보니 어느새 버튼명이 [열기]로 바뀌어 있었다.

제대로 설치가 된것 같다. 흠흠

POWERPNT_tpSlyxyp3Y

이후 [열기]를 눌렀더니, 아래와 같이 새롭게 유저를 등록하라네?ㅋㅋㅋ

까라면 까야지, 그래서 하라는 대로 했다.

POWERPNT_8ixL93i2uv

Username과 password를 등록해주었다.

2.도커 설치하기

이제 본격적으로 Docker를 설치해주었다. 아래 링크를 들어가면 바로 설치가 가능한 것 같다.(링크)

POWERPNT_l5POCw19EX

위 설치파일은 도커허브라는라는 곳에서 제공하는 ‘Docker Desktop for Windows’이라 카더라..(머꼬??)

바~~로 설치 드갔다.

POWERPNT_UNDVmzUdam

아래와 같이 설치중인 화면이 뜨고 나서, [Installation succeeded]가 뜨는 것을 볼 수 있었다.(와우!!)

POWERPNT_Tyl1f1QcuT

그 다음에 개인정보 동의같은 서약서가 뜨길래 바로 [Accept]를 클릭했다.(설마 내가 실수한거 아니겠지? 갑자기 컴퓨터 해킹당하고 이러면 ㄹㅈㄷ)

POWERPNT_jlvYBP3crc

삽질끝에 드디어 구축했다!!(원래 예전에 이미 한번 설치한 경험이 있지만 잘 기억이 안나서 이번에 또 해멨다.)

POWERPNT_swlVKz90ff

(이전부터 계속 브라우저 창을 여러개 띄웠을때 버벅거리는 문제가 있어서 이번에 큰마음을 먹고 수리센터에 가서 램 8기가를 달았다. 총12기가가 되었다. 아무래도 67만원짜리 컴퓨터다 보니 4기가짜리 램으로 버티는 건, 여기까지인가 보다라는 생각과 함께 중요한 자료를 옮기고 나서 컴퓨터 포맷을 했기 때문에 지금 내가 도커를 다시 설치하고 있는 것이다ㅋㅋㅋ)

암튼! 이제 도커가 제대로 설치되었는지 확인하기 위해 터미널을 열고 docker -v를 쳐주었다.



제대로 설치가 되었는지 버전정보가 정상적으로 뜨더라! 이후 실행이 제대로 되는지 테스트를 해보았다.

docker run hello-world



3.도커 이미지 빌드하기

도커파일에 대해 다루는 명령어를 몇개 찾아보았다. 이런게 있더라!

1.도커파일 생성할때!

touch Dockerfile

2.도커파일 편집할때!

nano Dockerfile

3.Dockerfile편집창에 들어가서 아래 내용 넣어주기!

FROM ubuntu:latest
RUN apt-get -qq update \
&& apt-get -qq install -y g++ cmake \
&& apt-get clean

EXPOSE 8000
ENTRYPOINT ["/bin/bash"]

FROM ubuntu:latest		
RUN apt-get -qq update \
&& apt-get -qq install -y g++ cmake \
&& apt-get clean

EXPOSE 8000	
ENTRYPOINT ["/bin/bash"]	
  • FROM ubuntu:latest -> Docker OS를 선택하는 거라 보면 됨. 즉 시작부분임ㅇㅇ

  • RUN apt-get -qq update \ ->빌드하는 명령어인 듯?ㅇㅇ
  • EXPOSE 8000 -> 8000번 포트번호와 연결한다는 뜻, 즉 호스트와 연결한다는 거임
  • ENTRYPOINT [“/bin/bash”] -> 빌드 후 이미지를 생성할때 실행될 명령어

나도 아직 잘 이해를 못했지만 대락적을 이런 느낌인 것 같다.



이제 이미지를 만들 준비작업은 다 끝난것 같다. 이걸 기반으로 이미지를 생성해보았다.

docker build --rm -t cpp-builder .

예전에 pip install -e .에서 뒤에 반드시 온점(.)을 붙여주어야 현재위치에 있는 전체항목을 체크하는 기능을 하게 되는 것처럼 여기서도 무조건 cpp-builder 뒤에 온점(.)을 넣어주어야 한다. (안그러면 안돼ㅜㅜ)

빌드가 되는 동안 (여자)아이들 뮤비를 보았다.(아 이건 쓸데없는 내용이니 패스 ㅋㅋㅋ)

빌드가 다 되고 이제 docker images명령어를 통해 이미지가 존재하는지 확인해보았다.

POWERPNT_nPeeWDFZMA

4.만든 이미지로 컨테이너 실행하기

컨테이너를 생성하기 전에 Docker와 Vscode를 같이 사용하려면 저장공을 공유(Mount)해야 한다고 한다.

그래서 사용자(user명: js)인 내가 로컬저장소(OSX)에서 원하는 위치에 폴더를 생성한다.

그리고 다음 형태로 명령어를 입력했다. 문법은 다음과 같더라..

docker run -d -it --rm -v [사용자의 로컬 저장소 경로]:[컨테이너 속 마운트 할 경로] [Image name]

위 명령어는 공식문서에 있던건데, 나는 아래와 같이 명령어를 박아넣었다.

docker run -d -it --rm -v /c/Users/jacksmith/Documents/playground/docker_workspace:/home/C++ cpp-builder

이후 다음 명령어로 컨테이너 실행여부를 확인해주었다.

docker ps

POWERPNT_5U0ZER6Np7

(내가 아직 wsl의 하위 리눅스구조가 이해가 안되서 좀 살펴보았다.)

WindowsTerminal_Rv2GtPqksa

현재 나의 경로는 윈도우와 달리 home아래 jacksmith라는 사용자명이다. 근데 한가지 의문인게 나의 윈도우에서의 사용자명은 jacksmith가 아니라 js이다.(엥??ㄷㄷ??). 이거는 차츰 이해해보고, 그리고 jacksmith아래에 touch명령어를 이용해서 만든 도커파일들을 있더라 그리고 save파일들이 있더라, 대충 아래같은 구조인듯하다ㅇㅇ

POWERPNT_xXEAmJa3fC

Page2.C/C++ 개발환경 구축하기

1.각종 플러그인 설치하기

이제 도커를 vscode에서 작업하기 위해 각종 플러그인들을 설치해줬다.

1.Docker

vscode에서 도커개발을 용이하게 해주는 확장플러그인정도로만 생각해주고 일단 설치!

POWERPNT_6I3zEvT418

2.C/C++

vscode에서 C/C++개발을 용이하게 해주는 확장플러그인정도로만 생각해주고 일단 설치!

POWERPNT_HbuArsZvut

3.Remote Development

[vscode]와 [localhost의 도커 컨테이]와 연동해주는 확장플러그정도로만 생각해주고 일단 설치!

POWERPNT_ngJwfV2evI

2. Vscode를 Docker와 연동하기

플러그인 설치가 완료되었으면, vscode에서 [ctrl]+[shift]+[p]를 입력하고, Remote-containers: attach to running container..를 클릭했다. 그리고 [Got it]클릭!

POWERPNT_J16CRRxzAr

로딩이 되고 나서 [Open Folder] 버튼이 활성화되었더라, 도커속 우분투에 가상접근이 가능해진 것 같다.

일단 루트경로에 들어가주었다.

POWERPNT_N4scdye6uX

이렇게 /root/경로에 들어와서, 아까 전에 연동된(mounted) 디렉토리로 이동해주었다.

POWERPNT_HvXBZQ1Kz3

정상적으로 ‘/home/C++’경로에 들어온 것을 확인하고 나서 test용 코딩을 해보았다.

POWERPNT_xnIGpKzR55

위에 처럼 코딩하고 현재상태에서 [ctrl]+[shift]+[b]를 눌러주었다. 첫번쨰 옵션을 클릭했다.



그랬더니! 아래와 같이 hello라고 하는 실행파일이 만들어진 것을 확인할 수 있었다.

(또는 cmd창에 ‘gcc -m64 -o hello.c’라고 적어도 실행파일이 만들어지더라.)

POWERPNT_9nqeTLfEQ5

이후 cmd창으로 저 파일이 있는 곳으로 가서 ‘./hello’를 입력했더니만,

POWERPNT_pbtm56QTSt

정상적으로 빌드가 된 것을 확인할 수가 있었다.

※추가적으로 hello.cpp파일도 만들어서 테스트해보았다.

POWERPNT_KejerKlOOD

잘 되더라!ㅎㅎ!

언어:

카테고리:

업데이트:

댓글남기기