1
- FROM nvcr.io/nvidia/isaac-sim:4.1.0
1
+ # Base Image: https://catalog.ngc.nvidia.com/orgs/nvidia/containers/isaac-sim/tags
2
+ FROM nvcr.io/nvidia/isaac-sim:4.1.0 AS amd64
3
+ # Base Image: https://catalog.ngc.nvidia.com/orgs/nvidia/containers/isaac-sim/tags
4
+ FROM nvcr.io/nvidia/isaac-sim:4.1.0 AS arm64
5
+
6
+ # Use docker automatic platform args to select the base image.
7
+ # It may be `arm64` or `amd64` depending on the platform.
8
+ # Ref: https://docs.docker.com/reference/dockerfile/#automatic-platform-args-in-the-global-scope
9
+ FROM $TARGETARCH
10
+ ARG TARGETARCH
11
+
12
+ # Arguments for the default user
13
+ ARG USERNAME=user
14
+ ARG USER_UID=1000
15
+
16
+ # Keep downloaded packages for caching purposes
17
+ # Ref: https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/reference.md#example-cache-apt-packages
18
+ RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
19
+
20
+ # Upgrade packages
21
+ # Ref: https://pythonspeed.com/articles/security-updates-in-docker/
22
+ # Ref: https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/reference.md#example-cache-apt-packages
23
+ # Ref: https://github.com/moby/buildkit/issues/1673#issuecomment-1264502398
24
+ # Ref: https://github.com/moby/buildkit/issues/1673#issuecomment-1987107404
25
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
26
+ apt-get update && apt-get upgrade -y \
27
+ && rm -rf /var/lib/apt/lists/*
2
28
3
29
# Ref: https://github.com/j3soon/docker-ros-humble-desktop-full/blob/master/Dockerfile
4
30
5
31
# ros-core
6
32
# Ref: https://github.com/osrf/docker_images/blob/master/ros/humble/ubuntu/jammy/ros-core/Dockerfile
7
33
# setup timezone
8
- RUN echo 'Etc/UTC' > /etc/timezone && \
34
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
35
+ echo 'Etc/UTC' > /etc/timezone && \
9
36
# ln -s /usr/share/zoneinfo/Etc/UTC /etc/localtime && \
10
- apt-get update && \
11
- apt-get install -q -y --no-install-recommends tzdata && \
37
+ apt-get update && apt-get install -q -y --no-install-recommends tzdata && \
12
38
rm -rf /var/lib/apt/lists/*
13
39
# install packages
14
- RUN apt-get update && apt-get install -q -y --no-install-recommends \
40
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
41
+ apt-get update && apt-get install -q -y --no-install-recommends \
15
42
dirmngr \
16
43
gnupg2 \
17
44
&& rm -rf /var/lib/apt/lists/*
@@ -24,14 +51,16 @@ ENV LANG C.UTF-8
24
51
ENV LC_ALL C.UTF-8
25
52
ENV ROS_DISTRO humble
26
53
# install ros2 packages
27
- RUN apt-get update && apt-get install -y --no-install-recommends \
28
- ros-humble-ros-core=0.10.0-1* \
54
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
55
+ apt-get update && apt-get install -y --no-install-recommends \
56
+ ros-$ROS_DISTRO-ros-core=0.10.0-1* \
29
57
&& rm -rf /var/lib/apt/lists/*
30
58
31
59
# ros-base
32
60
# Ref: https://github.com/osrf/docker_images/blob/master/ros/humble/ubuntu/jammy/ros-base/Dockerfile
33
61
# install bootstrap tools
34
- RUN apt-get update && apt-get install --no-install-recommends -y \
62
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
63
+ apt-get update && apt-get install --no-install-recommends -y \
35
64
build-essential \
36
65
git \
37
66
python3-colcon-common-extensions \
@@ -50,51 +79,105 @@ RUN colcon mixin add default \
50
79
https://raw.githubusercontent.com/colcon/colcon-metadata-repository/master/index.yaml && \
51
80
colcon metadata update
52
81
# install ros2 packages
53
- RUN apt-get update && apt-get install -y --no-install-recommends \
54
- ros-humble-ros-base=0.10.0-1* \
82
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
83
+ apt-get update && apt-get install -y --no-install-recommends \
84
+ ros-$ROS_DISTRO-ros-base=0.10.0-1* \
55
85
&& rm -rf /var/lib/apt/lists/*
56
86
57
87
# ros-desktop
58
88
# Ref: https://github.com/osrf/docker_images/blob/master/ros/humble/ubuntu/jammy/desktop/Dockerfile
59
89
# install ros2 packages
60
- RUN apt-get update && apt-get install -y --no-install-recommends \
61
- ros-humble-desktop=0.10.0-1* \
90
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
91
+ apt-get update && apt-get install -y --no-install-recommends \
92
+ ros-$ROS_DISTRO-desktop=0.10.0-1* \
62
93
&& rm -rf /var/lib/apt/lists/*
63
94
64
95
# ros-desktop-full
65
96
# Ref: https://github.com/osrf/docker_images/blob/master/ros/humble/ubuntu/jammy/desktop-full/Dockerfile
66
97
# install ros2 packages
67
- RUN apt-get update && apt-get install -y --no-install-recommends \
68
- ros-humble-desktop-full=0.10.0-1* \
69
- && rm -rf /var/lib/apt/lists/*
70
-
71
- # Isaac Sim ROS 2 Optional Dependencies
72
- # Ref: https://docs.omniverse.nvidia.com/isaacsim/latest/installation/install_ros.html#running-native-ros
73
- RUN apt-get update && apt-get install -y --no-install-recommends \
74
- ros-humble-vision-msgs \
75
- ros-humble-ackermann-msgs \
98
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
99
+ apt-get update && apt-get install -y --no-install-recommends \
100
+ ros-$ROS_DISTRO-desktop-full=0.10.0-1* \
76
101
&& rm -rf /var/lib/apt/lists/*
77
102
78
- # Reset isaac sim docker image entrypoint
79
- ENTRYPOINT []
80
-
81
103
# ros-core
82
104
# Ref: https://github.com/osrf/docker_images/blob/master/ros/humble/ubuntu/jammy/ros-core/Dockerfile
83
105
# setup entrypoint
84
106
# COPY ./thirdparty/ros_entrypoint.sh /
85
107
# ENTRYPOINT ["/ros_entrypoint.sh"]
86
- CMD ["bash" ]
108
+ # CMD ["bash"]
109
+
110
+ # Install sudo and create a user with sudo privileges
111
+ # Ref: https://stackoverflow.com/a/65434659
112
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
113
+ apt-get update && apt-get install -y sudo \
114
+ && useradd -m -s /bin/bash -u $USER_UID -G sudo $USERNAME \
115
+ && echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers \
116
+ && rm -rf /var/lib/apt/lists/*
87
117
88
118
# Install common tools
89
- RUN apt-get update && apt-get install -y \
119
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
120
+ apt-get update && apt-get install -y \
90
121
curl \
91
122
git \
92
- git-extras \
93
123
htop \
124
+ iputils-ping \
125
+ nano \
94
126
net-tools \
95
127
tmux \
128
+ tree \
129
+ unzip \
96
130
vim \
97
131
wget \
132
+ zip \
98
133
&& rm -rf /var/lib/apt/lists/*
99
134
100
- COPY .bashrc /root/.bashrc
135
+ # Install Python pip
136
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
137
+ apt-get update && apt-get install -y \
138
+ python3-pip \
139
+ && rm -rf /var/lib/apt/lists/*
140
+
141
+ # Install custom tools
142
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
143
+ apt-get update && apt-get install -y \
144
+ git-extras \
145
+ && rm -rf /var/lib/apt/lists/*
146
+
147
+ # Install ROS2 Gazebo packages for amd64
148
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
149
+ if [ "$TARGETARCH" = "amd64" ]; then \
150
+ apt-get update && apt-get install -y \
151
+ ros-$ROS_DISTRO-gazebo-ros-pkgs \
152
+ ros-$ROS_DISTRO-gazebo-ros2-control \
153
+ && rm -rf /var/lib/apt/lists/*; \
154
+ fi
155
+
156
+ # Install ROS2 RVIZ and other custom ROS2 packages
157
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
158
+ apt-get update && apt-get install -y \
159
+ ros-$ROS_DISTRO-rviz2 \
160
+ && rm -rf /var/lib/apt/lists/*
161
+
162
+ # TODO: Add more commands here
163
+ # For example, to install additional packages, uncomment the following lines and add the package names
164
+ # RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
165
+ # apt-get update && apt-get install -y \
166
+ # $OTHER_PACKAGES \
167
+ # && rm -rf /var/lib/apt/lists/*
168
+ # Isaac Sim ROS 2 Optional Dependencies
169
+ # Ref: https://docs.omniverse.nvidia.com/isaacsim/latest/installation/install_ros.html#running-native-ros
170
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=private \
171
+ apt-get update && apt-get install -y --no-install-recommends \
172
+ ros-$ROS_DISTRO-vision-msgs \
173
+ ros-$ROS_DISTRO-ackermann-msgs \
174
+ && rm -rf /var/lib/apt/lists/*
175
+
176
+ USER $USERNAME
177
+ # Create Gazebo cache directory with correct ownership to avoid permission issues after volume mount
178
+ RUN mkdir /home/$USERNAME/.gazebo
179
+ # TODO: Run additional commands as non-root user here
180
+ COPY .bashrc /home/$USERNAME/.bashrc
181
+ # TODO: Copy additional files here
182
+ ENTRYPOINT []
183
+ CMD ["/bin/bash" ]
0 commit comments