본문 바로가기
정글/C언어

MacOS에서 Ubuntu 개발 환경 설치하기(Docker)

by 위대한초밥V 2023. 5. 12.
💡 실습 환경
- MacBook Air Apple M1
- vscode

 

이번주차부터 C언어 학습을 시작한다.

프로젝트 시작에 앞서 Linux 환경 설정이 필요해 개발 환경을 설치한다.

가상 환경을 설치할 수 있는 방법으로 EC2를 할당받아 사용하는 방법도 있지만, 주변에서 Docker 이야기가 들리길래 전부터 궁금했던 기술이라 사용하기로 결정했다.

이 글은 크게 도커에 대한 소개와 개발 환경 구축 과정에 대해 다룬다.

도커란?

도커는 컨테이너 기반의 가상화 플랫폼이다.

그림의 고래 위에 여러 컨테이너 박스가 존재하는 것처럼 하나의 서버에 여러 컨테이너를 갖을 수 있다. 예를들어, Python, django, node.js, java 등 여러 컨테이너를 올려 독립적으로 관리한다.

소프트웨어 개발에서 컨테이너는 표준화된 소프트웨어 유닛을 의미하고 이 안에는 코드를 실행하는데 필요한 종속성과 도구등이 필요하다. 이러한 컨테이너를 관리해주는 것이 도커이다.

덕분에 하나의 서버에서 컨테이너를 이용해 프로젝트마다 개발 환경을 달리 할 수 있고, 독립적으로 개발하여도 서로가 동일한 환경을 구축할 수 있다. 또 실제 개발 환경과 배포 환경을 동일하게 구축할 수 있다는 장점이 있다.

Virtual Machine과 Docker Container

VMWare와 VirtualBox와 같은 가상화 기술은 이전부터 있었다. 그럼 이 둘의 차이는 무엇일까? 두 차이가 잘 나와있는 글이 있어 소개한다.

https://medium.com/@darkrasid/docker%EC%99%80-vm-d95d60e56fdd

 

Docker와 VM

Docker를 공부하면 가장 처음 등장하는 내용이 바로 `docker vs. vm`입니다. 사실 둘의 비교는 정확히는 `container vs. vm `이긴 한데, 이 포스트에서는 docker container와 vm은 서로 어떻게 다른지 장점…

medium.com

요약하자면 Container는 hypervisor 위에 Guest OS가 올라가는 VM에 비해 이미지가 작다. 그 자체도 장점이지만 네트워크를 덜 사용할 수 있다. 이미지를 받는데 시간이 적게 걸리는 만큼 네트워크를 덜 쓸 수 있고, 클라우드 환경이라면 비용과 직접적인 연결이 된다.

 

또 host os에서 분리된 형태로 운영되는 VM과 달리 io가 발생하는 통로가 많아 속도가 빠르다는 장점이 있다.

 

마지막으로 라이프사이클이다. 작업 내용을 배포할 때, 개발 환경에서 운영 환경 이미지를 만들어 배포하고, 원래 사용하던 것은 내리면 된다. 이점은 VM을 사용하여 배포할 때, VM에 접근해서 저장소를 pull 받고 변경하여 다시 배포하는 것과 차이가 있다.

하지만 Container가 완벽한 대안은 아니다.

 

보안적인 측면에서 container가 뚫리면 host 커널이 위험해진다. 또 멀티 os가 불가해, 호스터 os와 전혀 다른 os를 container로 올릴 수 없다. 예시로, linux 머신에서 window 서버를 올릴 수 없는 것이다.


개발 환경 설정하기

이제 본격적으로 도커를 사용하여 MacOS 환경에서 Linux 환경을 구축하겠다. 모든 명령어를 다루지 않고, 실습에 필요한 명렁어 위주로 설명하겠다.

도커 설치하기

자신의 환경에 맞춰 도커를 다운받는다.

https://docs.docker.com/desktop/install/mac-install/

 

Install Docker Desktop on Mac

 

docs.docker.com

 

설치가 완료되면 docker version으로 설치된 Docker 버전을 확인한다.

다음과 같이 나오면 잘 설치된 것이다.

docker run 명령어로 hello-world Image를 Pull 받아서 Container에서 생성 후 실행한다.

만약 hello-world Image가 이미 존재한다면 Pull 받을 필요 없이 실행만 하면 된다.

Ubuntu 이미지 내려받기

다운받으려는 이미지가 존재하는지 확인한다. 이미지들의 이름, 설명, 별점 등을 한번에 확인할 수 있다.

docker search ubuntu

원하는 이미지를 내려받는다. 특정 버전을 내려받으려면 버전명을 명시해줘야 한다.

docker pull ubuntu:20.04

가장 최신 안정화 버전을 내려받는다면 latest를 추가해준다. 별도로 버전명을 붙이지 않아도 기본값은 latest이다.

docker pull ubuntu:latest

다운받은 이미지를 확인한다.

docker images

컨테이너 생성하기

다운받은 이미지로 컨테이너를 생성하는 방법은 다양하다. 이 글에서는 단일 컨테이너를 실행할 것이므로 docker run 커맨드를 사용하겠다.

기본 포맷은 다음과 같다.

docker run (<옵션>) <이미지 식별자> (<명령어>) (<인자>)

실습을 위한 환경 설정을 위한 명령어는 다음과 같다.

docker run -it —-cap-add SYS_PTRACE -—security-opt seccomp:unconfined —-name ubuntu -d ubuntu:20.04 /bin/bash

옵션

  • --cap-add SYS\_PTRACE --security-opt seccomp:unconfined
    gdb로 디버깅하기 위해 필요하다.
  • --name
    컨테이너에 이름을 부여해주면 해당 이름으로 컨테이너를 식별한다.
  • -d
    컨테이너를 백그라운드에서 실행하기 위해 사용한다. 컨테이너가 detached 모드에서 실행되고, 실행 결과로 컨테이너 ID가 출력된다.
  • /bin/bash
    ubuntu 이미지를 컨테이너로 생성한 뒤 ubuntu 이미지 안의 /bin/bash를 실행한다.

VSCode에서 컨테이너 실행하기

다운받은 도커 이미지를 VSCode 환경에서 실행한다.

 

1. Remote Explorer를 설치한다. Remote - SSH, Remote Development도 함께 설치되는 것을 확인할 수 있다.

2. 사용할 컨테이너를 클릭한다. 이때 컨테이너가 실행 중인 상태여야 한다.

3. 해당 컨테이너로 이동하여 개발을 시작하면 된다.

Reference

반응형