Start a Docker Container
This guide explains the basic operations for creating, starting, and managing Docker containers. It includes settings for using GUI applications (VS Code, RViz, etc.) within Docker.
Initial Setup
X11 Forwarding Configuration
To use GUI applications within Docker, enable X11 forwarding:
xhost +
About X11 Forwarding
This setting allows you to run VS Code, RViz, and other GUI applications inside Docker containers.
Security Notice
xhost +
allows X11 connections from all hosts. For production environments, consider using xhost +local:
for better security.
Container Creation
Creating GUI-Enabled Containers
sudo docker run -it -v <local_path>:/data \
--device=/dev/dri \
--group-add video \
--volume=/tmp/.X11-unix:/tmp/.X11-unix \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--name=<container_name> \
<image_name>:<tag> \
/bin/bash
Parameter Explanation
Parameter | Description |
---|---|
-it | Enable interactive mode and TTY |
-v <local_path>:/data | Mount local directory to container |
--device=/dev/dri | Access to GPU/graphics device |
--group-add video | Add to video group (graphics permissions) |
--volume=/tmp/.X11-unix:/tmp/.X11-unix | Mount X11 socket |
--env="DISPLAY=$DISPLAY" | Set display environment variable |
--env="QT_X11_NO_MITSHM=1" | Avoid Qt application display issues |
--name=<container_name> | Assign name to container |
Example Usage
sudo docker run -it -v /home/user/workspace:/data \
--device=/dev/dri \
--group-add video \
--volume=/tmp/.X11-unix:/tmp/.X11-unix \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--name=ros_container \
ros:humble \
/bin/bash
Verify Mounted Directory
Check mounted directory inside the container:
cd /data
ls -la
Environment Setup Inside Container
Update Package Management System
sudo apt update
sudo apt upgrade
Install Basic Tools
Install Tmux
apt install tmux
Tmux is a useful tool for managing multiple terminal sessions.
Install Git
apt install git
Essential tool for version control systems.
Additional Package Examples
# Editors
apt install vim nano
# Network tools
apt install curl wget net-tools
# Development tools
apt install build-essential cmake
Container Management
Start Existing Container
sudo docker start -ia <container_id>
Parameter explanation:
-i
: Interactive mode-a
: Attach mode
Check Container Status
Check running containers
docker ps
Check all containers
docker ps -a
Check available images
docker images
Commonly Used Docker Commands
Container Operations
# Stop container
docker stop <container_id>
# Remove container
docker rm <container_id>
# Connect to container (if running)
docker exec -it <container_id> /bin/bash
# Check container logs
docker logs <container_id>
Image Operations
# Remove image
docker rmi <image_id>
# Remove unused images
docker image prune
# Remove all unused resources
docker system prune
Troubleshooting
Common Issues and Solutions
-
GUI applications don't display
# Check X11 forwarding
echo $DISPLAY
# Check xhost settings
xhost +local: -
Permission errors
# Add user to docker group
sudo usermod -aG docker $USER
# Logout/login or
newgrp docker -
Port access issues
# Add port mapping when creating container
docker run -p <host_port>:<container_port> ...
Best Practices
Data Persistence
Always use volume mounts for important data:
-v /host/data:/container/data
Resource Limits
# Memory limit
--memory="2g"
# CPU limit
--cpus="1.5"
Network Configuration
# Use custom network
docker network create mynetwork
docker run --network=mynetwork ...
For Efficient Development
- Create development Dockerfiles with pre-installed necessary tools
- Use Docker Compose to simplify multi-container management
- Use .dockerignore files to reduce build time