본문 바로가기
IT

[리눅스 기초 #33] 서버가 컨테이너 속으로? 도커(Docker) 기초 명령어로 환경 완벽 제어하기

by sunyjiny 2026. 2. 6.
반응형

리눅스 기초 시리즈의 33번째 시간입니다! 지난 시간에는 Neovim을 활용해 터미널 에디터를 나만의 IDE로 변신시키는 과정을 다뤘습니다. 이제 강력한 도구를 갖췄으니, 우리가 짠 코드가 어디서든 동일하게 돌아가게 할 '환경의 표준화'가 필요할 때입니다.

오늘의 주제는 현대 개발 인프라의 핵심인 도커(Docker)입니다. WSL2 환경에서 도커를 어떻게 조종하고, 컨테이너를 자유자재로 다루는지 저의 생생한 경험담과 함께 기초 명령어들을 정리해 보겠습니다.


1. 나의 경험담: "의존성 지옥(Dependency Hell)에서의 탈출"

최근 제 사이트인 sunyjini.com을 업데이트하면서 새로운 라이브러리를 추가했습니다. 로컬 윈도우(WSL2)에서는 완벽하게 돌아갔는데, 정작 운영 서버로 옮기자마자 파이썬 버전과 특정 패키지 충존 문제로 서버가 뻗어버렸죠. 이른바 의존성 지옥에 빠진 것입니다.

이때 저를 구원해준 것이 도커였습니다. 환경 전체를 컨테이너라는 박스에 담아버리니, "내 컴퓨터에선 되는데 왜 서버에선 안 되지?"라는 고질적인 고민이 사라졌습니다. 이제는 어떤 서버든 도커 엔진만 깔려 있다면 단 한 줄의 명령어로 0.1초 만에 동일한 실행 환경을 띄울 수 있게 되었습니다.


2. Before: 지저분하게 꼬인 시스템 패키지들

도커를 쓰기 전에는 새로운 기술을 시도할 때마다 시스템에 직접 패키지를 설치했습니다. 그러다 보니 나중에는 어떤 패키지가 왜 깔려 있는지 알 수 없게 되었고, 시스템 자체가 무거워지는 것을 지켜만 봐야 했죠.

(▲ Before: 리눅스 본체에 모든 소프트웨어를 때려 박던 시절입니다. 버전 하나만 틀려도 전체 시스템을 다시 깔아야 할 것 같은 불안감 속에서 작업하곤 했습니다.)


3. Action: 도커 컨테이너를 부리는 필살 명령어

이제 본격적으로 도커 컨테이너를 생성하고 관리하는 핵심 명령어들을 익혀보겠습니다. 이 네 가지만 알아도 도커의 80%는 정복한 셈입니다.

핵심 도커 명령어:

Bash Terminal
# 1. 이미지 다운로드 및 컨테이너 실행 (예: nginx 웹 서버) docker run -d -p 80:80 --name my-web nginx

2. 현재 실행 중인 컨테이너 목록 확인
docker ps

3. 모든 컨테이너 목록(중지된 것 포함) 확인
docker ps -a

4. 실행 중인 컨테이너 중지 및 삭제
docker stop my-web docker rm my-web 

(▲ Action: 'docker run' 한 줄로 순식간에 독립적인 웹 서버가 탄생했습니다. 더 이상 시스템 설정 파일을 건드릴 필요가 없습니다.)


4. After: 언제든 갈아 끼울 수 있는 '레고' 같은 서버

도커를 도입한 뒤, 제 서버 환경은 마치 레고 블록처럼 유연해졌습니다. 이제 환경이 마음에 들지 않으면 그냥 컨테이너를 지우고 새로 띄우면 그만입니다.

달라진 점들:

  • 환경 격리: 각 앱이 독립된 컨테이너에서 돌아가므로 서로의 라이브러리가 충돌할 일이 없습니다.
  • 이식성 극대화: "내 컴퓨터에서는 된다"는 말이 실제 서버 배포 시에도 유효해졌습니다.
  • 리소스 관리: 사용하지 않는 컨테이너는 즉시 중지하여 시스템 자원을 아낄 수 있습니다.

5. 실험 요약 및 팁

명령어 역할 비유
docker run 이미지를 컨테이너로 실행 설계도를 보고 집 짓기
docker ps 실행 중인 컨테이너 보기 현재 거주 중인 집 확인하기
docker stop 실행 중인 컨테이너 중지 잠시 외출하며 불 끄기
docker rm 중지된 컨테이너 삭제 철거하기

6. 마치며: 컨테이너 시대를 항해할 준비가 되셨나요?

리눅스 기초 33단계를 거치며 우리는 이제 시스템 내부의 파일 하나가 아닌, '시스템 전체'를 패키징하고 관리하는 능력을 갖췄습니다. 도커는 더 이상 특별한 기술이 아닌, 개발자의 상식입니다. 이 작은 컨테이너들이 모여 거대한 서비스의 인프라를 지탱하고 있습니다.

오늘의 인사이트: "환경을 탓하는 개발자가 되지 마라. 도커로 환경 자체를 창조하고 지배하라."


33번째 이야기를 마칩니다. 이제 우리만의 '컨테이너 함대'를 구축할 기본기가 준비되었습니다. 다음 시간에는 이 수많은 도커 명령어를 한 줄의 파일로 정의하여 자동화하는 '도커 컴포즈(Docker Compose)로 멀티 컨테이너 관리하기'에 대해 다뤄보겠습니다.

이 글이 여러분의 도커 입문에 큰 도움이 되었나요? 혹시 컨테이너를 실행했는데 접근이 안 된다면 포트 포워딩(-p 옵션) 설정을 다시 확인해 보세요!

다음 포스팅에서는 여러분을 '도커 마스터'로 만들어줄 실전 네트워크 설정 팁으로 돌아오겠습니다. 궁금한 점은 언제든 댓글로 남겨주세요!

반응형