개요
리눅스 시스템 등을 공부하면서 x86, x64 환경을 사용해야할 일이 대부분이고, MAC을 사용하는 입장으로써 아주아주 불편했다.
지금까지는 UTM과 같은 가상머신으로 애뮬레이터를 돌리거나, 로컬에서 QEMU를 사용하여 ssh로 연결하는 등의 과정을 통해서 x64 기반의 시스템을 활용해왔다.
CTF 문제들 중에 도커를 사용하는 문제들도 존재하고, 아예 독립적인 도커 환경에서 환경을 설정해보고자 시작하게 되었다.
Docker
도커는 컨테이너 기반 가상화 도구로, 리눅스 상에서 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있도록 한다.
도커를 사용한다면, 이미지를 기반으로 컨테이너를 실행할 수 있으며, 해당 이미지를 관리하기 쉽다.
Docker Image
컨테이너를 만드는 데 사용되는 읽기 전용 템플릿
컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 도커 파일을 만든 후 이를을 빌드한다.
Docker Container
도커 이미지를 실행한 상태
이미지로 컨테이너를 생성하게 되면 두 가지가 생성이 된다.
- 파일 시스템
- 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립 공간
이것을 도커 컨테이너라고 한다.
도커 컨테이너는 읽기 전용인 이미지에 변경된 사항을 저장하는 컨테이너 계층(Layer)에 저장한다.

Dockerfile
도커 설치 확인
docker --version
mac m1,m2의 경우 rosetta가 필요할 수도 있기 때문에 설치해준다.
softwareupdate --install-rosetta
qemu 설치 및 설정 초기화
brew install qemu
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
dockerfile 작성
# Ubuntu x86_64 기반으로 컨테이너 설정
FROM ubuntu:24.04
# 필수 패키지 설치
RUN apt-get update && apt-get install -y \
gcc-multilib-x86-64-linux-gnu \
qemu-user-static \
binutils \
make \
build-essential \
cmake \
gdb \
git \
vim
# 크로스 컴파일 환경 변수 설정
ENV CC=x86_64-linux-gnu-gcc
ENV LD=x86_64-linux-gnu-ld
ENV OBJCOPY=x86_64-linux-gnu-objcopy
# 작업 디렉터리 설정
WORKDIR /workspace
CMD ["/bin/bash"]
Docker build
docker build -t cross-compile-x86 .
이후 실행하려면
docker run -it --rm cross-compile-x86
해당 명령어로 실행할 수 있다.
크로스 컴파일러를 확인하고 싶다면
x86_64-linux-gnu-gcc --version
해당 명령어를 실행했을 때,
x86_64-linux-gnu-gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
버전이 제대로 출력되면 된다.