Docker 탐구

[Docker 탐구 - 1] Docker를 이용한 ARM OS 사용

겨울꿈개발자 2021. 4. 6. 23:08

만약 어떠한 프로그램 코드를 ARM 보드에서 크로스 컴파일하여 실행 파일을 만들었으나, 어떠한 이유로 인해 해당 보드가 없는 상황이라고 가정해봅시다. 기존의 방법이라면, 해당 실행 파일은 테스트할 수 없습니다.

 

하지만 해당 ARM 보드의 실행 환경을 개발 PC에서 구할 수 있다면, 해당 실행 파일을 테스트할 수 있습니다. 저는 이를 위해 Docker를 사용해봤습니다.

 

해당 글에서는 Windows 10 운영체제가 돌아가는 PC에서 ARM OS 환경을 사용하기 위한 Docker의 기본 사용법을 소개하고 있습니다.


1. Windows 환경에서 Docker 설치

아래 사이트에서 Docker를 설치합니다.

www.docker.com/

 

Empowering App Development for Developers | Docker

Learn how Docker helps developers bring their ideas to life by conquering the complexity of app development.

www.docker.com

Docker를 설치한 이후에 Docker Desktop을 실행하면, Linux WSL(?)을 설치해야 한다는 안내창이 출력됩니다.

해당 안내창에서 안내하는 url로 가서 설치하고, PC를 재부팅합니다.

 

Docker Desktop에서는 image와 container 목록을 볼 수 있습니다.

저는 이미 몇몇 image와 container를 가지고 있습니다. 처음 설치할 경우에 해당 화면은 비어있습니다.

 

Docker image 목록
Docker container 목록

2. Docker image 가져오기

Docker Container가 실제로 사용자가 직접 사용하는 환경입니다. Docker image는 이러한 container들을 만들 수 있는 뼈대라고 생각합니다. Docker image로부터 container들을 생성하고, 해당 container에서 추가적으로 사용자가 필요한 환경들을 추가할 수 있다고 볼 수 있습니다.

 

Docker Hub에서 여러 사용자들이 공유하고 있는 image가 있습니다.

hub.docker.com/

 

Docker Hub

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

저는 해당 Hub에서 ARM 환경을 만들 수 있는 image를 가져오려고 합니다. 찾아보니 armv7/armhf-ubuntu image가 눈에 들어옵니다. 10만명 이상 사용했으니, 안정적인 image라고 볼 수 있습니다. 해당 홈페이지에서 docker image를 가져오기 위한 명령어도 알려주고 있습니다. 해당 명령어를 입력해보도록 하겠습니다.

docker image: armv7/armhf-ubuntu

명령 프롬프트를 열고 다음 명령어를 입력합니다. 태그를 입력하지 않았기에 latest 태그를 기본으로 가져옵니다. 만약 원하는 특정 버전이 있을 경우에 뒤에 태그를 붙여서 명령어를 입력합니다. (docker pull armv7/armhf-ubuntu:13.10)

 

docker pull armv7/armhf-ubuntu

 

잠시후 해당 image를 성공적으로 가져온것을 확인할 수 있으며, 현재 설치된 image는 docker desktop 또는 아래 명령어를 입력하여 확인할 수 있습니다.

docker images

명령 프롬프트를 통해 docker image 가져오기
docker desktop을 통해 현재 설치된 image 확인

3. Docker container 생성 및 실행

가져온 image를 통해 container를 생성해봅시다.

docker desktop에서 RUN 버튼을 눌러서 container를 생성하고, container 목록에서 직접 실행할 수 있습니다.

또는 아래 명령어를 통해 container를 생성과 동시에 실행할 수 있습니다.

docker run -it 이미지식별자(REPOSITORY 또는 ID) /bin/bash

저는 image id를 통해 실행하였습니다. 뒤에 /bin/bash를 붙였기에 /bin/bash를 통해 해당 container에 접속합니다.

위의 명령어를 입력하면 아래와 같이 ARM 환경을 Windows PC에서 실행한 것을 확인할 수 있습니다.

Windows 환경에서 실행했다고 경고문이 떴으나, 제가 간단히 컴파일한 실행파일이 돌아간 것을 확인했습니다.

명령 프롬프트를 통한 docker container 생성 및 실행

저는 크로스 컴파일한 실행 파일을 직접 container에 넣기 위해 공유 폴더를 만들었습니다.

아래 명령어는 공유 폴더 위치를 지정함과 동시에 container를 생성 및 실행하는 명령어입니다.

docker run -it -v 호스트환경에서의폴더절대경로:컨테이너상에서의절대경로 이미지식별자

위의 명령어를 입력할 경우 container가 생성되며, 기존에 해당 image를 통해 생성된 container에도 해당 경로에 공유 폴더가 생성됩니다.

공유 폴더 생성 결과 (Windows 내 파일 탐색기를 통해 본 폴더의 내용과 container 내 폴더 내용이 같다)

해당 공유 폴더를 통해 크로스 컴파일된 arm 실행 파일을 container로 옮겼고, 이를 실행한 결과 잘됨을 확인하였습니다! (단순히 printf("Hello world"); 하는 코드이며, 크로스 컴파일되었기에 일반 x86환경에서는 바로 실행이 안됩니다.)

이를 확인한 것만으로도 충분히 docker는 매력적입니다.