일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- Gazebo
- 티스토리챌린지
- RTK
- WSL
- WSL2
- ROS2
- turtlebot3
- ZED2
- 자율탐사
- 로봇
- turtlesim
- ROS
- Visual SLAM
- C++
- U-blox
- GUI
- Puck LITE
- 젯슨
- QT
- ubuntu
- Jetson
- Simulation
- GPS
- DevOps
- 인공지능
- 터틀심
- 오블완
- SLAM
- 강화학습
- 자율주행
- Today
- Total
직관적인느낌
Docker 명령어 정리 – 실전 가이드 본문
Docker를 사용하다 보면 컨테이너 실행, 관리, 이미지 저장 및 전송 등 여러 작업을 수행하게 됩니다. 이번 포스트에서는 실제로 사용했던 Docker 명령어들을 정리하고, 각 명령어의 역할과 사용 방법을 자세하게 소개합니다.
1. 컨테이너 실행 및 사용자 설정
1.1 기본 컨테이너 실행
Ubuntu 22.04 이미지를 사용하여 컨테이너를 실행할 때는 아래와 같이 실행합니다.
sudo docker run -it --name my_ubuntu -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix ubuntu:22.04 bash
- -it: 인터랙티브 모드와 터미널 연결
- --name: 컨테이너에 이름 부여
- -e DISPLAY=$DISPLAY & -v /tmp/.X11-unix:/tmp/.X11-unix: X11 GUI 애플리케이션 실행을 위한 설정
1.2 루트가 아닌 사용자(예: robot) 생성 및 전환
보안을 위해 루트가 아닌 일반 사용자로 작업하는 것이 좋습니다. 컨테이너 내부에서 아래 명령어로 사용자를 생성합니다.
# 컨테이너 내부 (root 상태)
adduser robot
생성 후, 필요한 경우 robot 사용자에게 sudo 권한을 부여합니다.
apt update && apt install -y sudo
usermod -aG sudo robot
echo 'robot ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
그 후, 사용자를 전환합니다.
su - robot
2. 컨테이너 관리 명령어
2.1 컨테이너 종료하기
컨테이너 내부에서 단순히 쉘을 종료하려면:
exit
또한, 호스트에서 컨테이너 전체를 종료할 때는:
sudo docker stop my_ubuntu
2.2 컨테이너 삭제하기
종료한 컨테이너를 완전히 삭제하려면:
sudo docker rm my_ubuntu
실행 중인 컨테이너를 강제로 삭제하려면:
sudo docker rm -f my_ubuntu
2.3 실행 중인 컨테이너 목록 확인
현재 실행 중이거나 종료된 컨테이너 목록을 보려면:
sudo docker ps -a
3. 이미지 생성 및 관리
3.1 컨테이너를 이미지로 커밋(저장)하기
현재 컨테이너의 상태를 새로운 Docker 이미지로 저장하려면 docker commit을 사용합니다.
sudo docker commit <컨테이너_ID> <새_이미지_이름>
예시:
sudo docker commit 975fc8b2e8d0 ubuntu_slamnav2_v2
3.2 이미지 목록 확인
저장된 Docker 이미지 목록을 확인하려면:
sudo docker images
3.3 이미지 파일로 저장하여 내보내기
Docker 이미지를 tar 파일로 내보내 Windows 등 다른 환경으로 전송할 수 있습니다.
sudo docker save -o ubuntu_slamnav2_v2.tar ubuntu_slamnav2_v2
3.4 이미지 파일 로드하기
다른 시스템(예: Windows)에서 이미지를 가져오려면 다음 명령어를 사용합니다.
docker load -i "C:\Users\lbj14\Documents\ubuntu_slamnav2_v2.tar"
※ Windows에서 파일 경로가 정확한지, 파일 소유권과 권한에 문제가 없는지 확인하세요.
3.5 사용하지 않는 이미지 삭제
불필요한 이미지를 삭제하여 디스크 공간을 확보할 수 있습니다.
sudo docker rmi <이미지_이름>
sudo docker rmi ubuntu_slamnav2_v2
sudo docker system prune -a
4. 컨테이너 리소스 및 환경 최적화
실시간 SLAM, Navigation과 같이 성능이 중요한 애플리케이션에서는 Docker 컨테이너의 오버헤드가 거의 없지만, 몇 가지 최적화 옵션을 적용할 수 있습니다.
4.1 CPU 및 메모리 할당 제한
컨테이너에 특정 CPU나 메모리 리소스를 할당하여 다른 프로세스와의 간섭을 줄일 수 있습니다.
docker run --cpuset-cpus="0,1" --cpu-shares=1024 ...
4.2 네트워크 및 I/O 최적화
실시간성이 중요하다면 --network host 옵션을 사용하여 네트워크 오버헤드를 줄일 수 있습니다.
docker run --network host ...
5. USB 카메라 연결 및 스트리밍 테스트
실시간 센서 데이터 처리가 중요한 경우, USB 카메라와 같은 장치도 Docker 컨테이너에 연결하여 사용할 수 있습니다.
5.1 USB 카메라 장치 확인 (호스트)
먼저 호스트에서 카메라 장치 확인:
ls /dev/video*
5.2 컨테이너 실행 시 USB 장치 마운트
예를 들어, /dev/video4와 /dev/video5를 전달하려면:
sudo docker run -it --name my_slamnav2 \ --device /dev/video4:/dev/video4 \ --device /dev/video5:/dev/video5 \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ ubuntu_slamnav2 bash
5.3 실시간 영상 스트리밍 테스트 (ffmpeg)
컨테이너 내부에서 ffmpeg를 설치한 후 스트리밍을 테스트합니다.
sudo apt update
sudo apt install -y ffmpeg
ffmpeg -f v4l2 -i /dev/video0 -vf "scale=640:480" -f sdl "Live Camera"
또는 GStreamer를 사용할 수도 있습니다.
sudo apt install -y gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink
6. 컨테이너 로그 외부 저장 방법
실행되는 애플리케이션의 로그를 컨테이너 내부가 아닌 호스트에 저장하려면 두 가지 방법이 있습니다.
6.1 호스트 디렉토리 마운트
컨테이너 실행 시 로그 저장 디렉토리를 마운트합니다.
sudo docker run -it --name my_slamnav2 \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /home/lee/docker_logs:/home/robot/slamnav2/logs \
ubuntu_slamnav2 bash
컨테이너 내부에서 생성되는 /home/robot/slamnav2/logs 파일은 호스트의 /home/lee/docker_logs에 실시간으로 저장됩니다.
6.2 표준 출력 리디렉션
컨테이너 실행 시 표준 출력을 파일에 기록하는 방법도 있습니다.
sudo docker run -it --name my_slamnav2 \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
ubuntu_slamnav2 bash | tee /home/lee/docker_logs/slamnav2_output.log
※ 단, 이 경우에는 호스트에 /home/lee/docker_logs 디렉토리가 미리 생성되어 있어야 합니다.
7. 마무리 및 참고 사항
이번 포스트에서는 Docker를 사용하여 Ubuntu 기반 SLAM/Navigation 환경을 구축하는 과정과 함께,
- 컨테이너 실행 및 사용자 설정
- 컨테이너 종료, 삭제 및 이미지 커밋
- 이미지 저장 및 Windows 전송 방법
- 리소스 최적화 및 USB 장치 연결, 영상 스트리밍 테스트
- 컨테이너 로그를 외부에 저장하는 방법
등을 자세하게 다루었습니다.
Docker는 가상 머신보다 오버헤드가 적어 실시간 애플리케이션에도 거의 네이티브 수준의 성능을 제공하지만,
리소스 제한, 네트워크 설정, I/O 최적화 등 몇 가지 추가 설정을 통해 보다 안정적인 운영 환경을 구축할 수 있습니다.
이 글이 Docker 기반 로봇 애플리케이션 개발 및 운영에 도움이 되길 바랍니다. 질문이나 추가 논의가 필요하다면 댓글이나 메일로 연락주세요!
'공학 > 시스템 설치 및 설정' 카테고리의 다른 글
Docker 컨테이너에서 설치한 패키지 및 라이브러리 – 자세한 정리 (0) | 2025.02.21 |
---|---|
Docker를 활용한 SLAMNAV2 환경 구축 및 이미지 관리 방법 (0) | 2025.02.20 |
DevOps 로드맵 (feat. DevOps 어떻게 시작할까?) - 1편 (0) | 2025.02.20 |
Conan 설치 가이드 (0) | 2025.02.19 |
로봇환경에 DevOps 도입하기 (0) | 2025.02.18 |