Skip to content

Commit 33274a7

Browse files
committed
update the default build args to match the latest grpc version, protobuf version and compatible abseil version from ci. Override the base image's entrypoint to support running just an interactive bash session in docker. Add a readme with config details.
1 parent bb90b1c commit 33274a7

File tree

4 files changed

+106
-52
lines changed

4 files changed

+106
-52
lines changed

.devcontainer/Dockerfile.dev

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,19 @@
33

44
FROM otel/cpp_format_tools
55

6-
ARG USER_NAME=devuser
76
ARG USER_UID=1000
87
ARG USER_GID=1000
98
ARG INSTALL_PACKAGES=
109

11-
ARG CXX_STANDARD=14
12-
ARG GRPC_VERSION=v1.49.2
13-
ARG PROTOBUF_VERSION=21.3
14-
ARG ABSEIL_CPP_VERSION=20240116.1
10+
ARG CXX_STANDARD=17
11+
ARG ABSEIL_CPP_VERSION=20230125.3
12+
ARG PROTOBUF_VERSION=23.3
13+
ARG GRPC_VERSION=v1.55.0
1514

16-
ENV PROTOBUF_VERSION=${PROTOBUF_VERSION}
15+
ENV CXX_STANDARD=${CXX_STANDARD}
1716
ENV ABSEIL_CPP_VERSION=${ABSEIL_CPP_VERSION}
17+
ENV PROTOBUF_VERSION=${PROTOBUF_VERSION}
1818
ENV GRPC_VERSION=${GRPC_VERSION}
19-
ENV CXX_STANDARD=${CXX_STANDARD}
2019

2120
COPY ci /opt/ci
2221

@@ -29,23 +28,29 @@ RUN apt update && apt install -y wget \
2928
RUN cd /opt/ci && bash setup_cmake.sh
3029
RUN cd /opt/ci && bash setup_ci_environment.sh
3130
RUN cd /opt && bash ci/setup_googletest.sh \
31+
&& bash ci/install_abseil.sh \
3232
&& bash ci/install_protobuf.sh \
33-
&& bash ci/setup_grpc.sh -r $GRPC_VERSION -s $CXX_STANDARD -p protobuf
33+
&& bash ci/setup_grpc.sh -r $GRPC_VERSION -s $CXX_STANDARD -p protobuf -p abseil
3434

3535
ADD https://github.com/bazelbuild/bazelisk/releases/download/v1.22.1/bazelisk-linux-amd64 /usr/local/bin
3636

3737
RUN git config --global core.autocrlf input \
3838
&& chmod +x /usr/local/bin/bazelisk-linux-amd64
3939

4040
ENV INSTALL_PACKAGES=${INSTALL_PACKAGES}
41-
ENV USER_NAME=${USER_NAME}
41+
ENV USER_NAME=devuser
4242
ENV USER_UID=${USER_UID}
4343
ENV USER_GID=${USER_GID}
4444
ENV IS_CONTAINER_BUILD=true
45+
4546
COPY ./.devcontainer/customize_container.sh /tmp/opentelemetry_cpp/devcontainer/customize_container.sh
4647
RUN /tmp/opentelemetry_cpp/devcontainer/customize_container.sh
47-
4848
RUN apt install -y npm && npm install -g markdownlint-cli
4949

50-
USER ${USER_NAME}
50+
USER devuser
51+
52+
WORKDIR /workspaces/opentelemetry-cpp
53+
54+
ENTRYPOINT []
55+
5156
CMD ["/bin/bash"]

.devcontainer/README.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Customizing Your Dev Container
2+
3+
Customize your dev container using build arguments (for direct Docker builds) or
4+
environment variables (for evaluation in `devcontainer.json`).
5+
6+
* **CXX standard:**
7+
This is the C++ standard to build from (eg: 17, 20, ...). (Default: 17)
8+
* Docker ARG:
9+
`CXX_STANDARD`
10+
* Host Environment Variable:
11+
`OTEL_CPP_DEVCONTAINER_CXX_STANDARD`
12+
13+
* **abseil-cpp version:**
14+
This is the version of abseil-cpp that will be used to build protobuf, gRPC,
15+
and opentelemetry-cpp (when WITH_ABSEIL is set).
16+
* Docker ARG:
17+
`ABSEIL_CPP_VERSION`
18+
* Host Environment Variable:
19+
`OTEL_CPP_DEVCONTAINER_ABSEIL_CPP_VERSION`
20+
21+
* **Protobuf version:**
22+
* Docker ARG:
23+
`PROTOBUF_VERSION`
24+
* Host Environment Variable:
25+
`OTEL_CPP_DEVCONTAINER_PROTOBUF_VERSION`
26+
27+
* **gRPC version:**
28+
* Docker ARG:
29+
`GRPC_VERSION`
30+
* Host Environment Variable:
31+
`OTEL_CPP_DEVCONTAINER_GRPC_VERSION`
32+
33+
* **User ID (UID):**
34+
User ID (Default: `1000`)
35+
* Docker ARG:
36+
`USER_UID`
37+
* Host Environment Variable:
38+
`OTEL_CPP_DEVCONTAINER_USER_UID`
39+
40+
* **Group ID (GID):**
41+
User group ID (Default: `1000`)
42+
* Docker ARG:
43+
`USER_GID`
44+
* Host Environment Variable:
45+
`OTEL_CPP_DEVCONTAINER_USER_GID`
46+
47+
* **Install Packages:**
48+
These are the additional packages that will be installed via `apt install` in the devcontainer. This is a space separated list.
49+
* Docker ARG:
50+
`INSTALL_PACKAGES` (Default: ``)
51+
* Host Environment Variable:
52+
`OTEL_CPP_DEVCONTAINER_INSTALL_PACKAGES` (Default: ``)
53+
54+
## Examples
55+
56+
* `docker build --build-arg CXX_STANDARD="20" --build-arg INSTALL_PACKAGES="nano gitk"...`
57+
* `export OTEL_CPP_DEVCONTAINER_CXX_STANDARD=20`
58+
* `export OTEL_CPP_DEVCONTAINER_INSTALL_PACKAGES="nano gitk"`

.devcontainer/devcontainer.json

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,13 @@
88
"context": "..",
99
"dockerfile": "Dockerfile.dev",
1010
"args": {
11-
"USER_NAME":"${localEnv:OTEL_CPP_DEVCONTAINER_USER_NAME:devuser}",
1211
"USER_UID": "${localEnv:OTEL_CPP_DEVCONTAINER_USER_UID:1000}",
1312
"USER_GID": "${localEnv:OTEL_CPP_DEVCONTAINER_USER_GID:1000}",
1413
"INSTALL_PACKAGES": "${localEnv:OTEL_CPP_DEVCONTAINER_INSTALL_PACKAGES:}",
15-
"CXX_STANDARD": "14",
16-
"GRPC_VERSION": "v1.49.2",
17-
"PROTOBUF_VERSION": "21.3",
18-
"ABSEIL_CPP_VERSION":"20240116.1"
14+
"CXX_STANDARD": "${localEnv:OTEL_CPP_DEVCONTAINER_CXX_STANDARD:17}",
15+
"GRPC_VERSION": "${localEnv:OTEL_CPP_DEVCONTAINER_GRPC_VERSION:v1.55.0}",
16+
"PROTOBUF_VERSION": "${localEnv:OTEL_CPP_DEVCONTAINER_PROTOBUF_VERSION:23.3}",
17+
"ABSEIL_CPP_VERSION":"${localEnv:OTEL_CPP_DEVCONTAINER_ABSEIL_CPP_VERSION:20230125.3}"
1918
}
2019
},
2120
"customizations": {
@@ -26,10 +25,10 @@
2625
"ms-vscode.cpptools-extension-pack"
2726
],
2827
"settings": {
29-
"terminal.integrated.shell.linux": "/bin/bash"
28+
"terminal.integrated.shell.linux": "/bin/bash",
3029
}
3130
}
3231
},
3332

34-
"remoteUser": "${env:USER_NAME}"
33+
"remoteUser": "devuser"
3534
}

CONTRIBUTING.md

Lines changed: 26 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -89,40 +89,8 @@ Before getting started, ensure you have the following installed:
8989
files provided (e.g., `.devcontainer/devcontainer.json`). This setup will install
9090
required dependencies, tools, and environment variables needed for the project.
9191

92-
#### Customizing Your Dev Container
93-
94-
Customize your dev container using build arguments (for direct Docker builds) or
95-
environment variables (for evaluation in `devcontainer.json`).
96-
97-
* **Username:**
98-
* Docker ARG:
99-
`USER_NAME` (Default: `devuser`)
100-
* Environment Variable:
101-
`OTEL_CPP_DEVCONTAINER_USER_NAME` (Default: `devuser`)
102-
103-
* **User ID (UID):**
104-
* Docker ARG:
105-
`USER_UID` (Default: `1000`)
106-
* Environment Variable:
107-
`OTEL_CPP_DEVCONTAINER_USER_UID` (Default: `1000`)
108-
109-
* **Group ID (GID):**
110-
* Docker ARG:
111-
`USER_GID` (Default: `1000`)
112-
* Environment Variable:
113-
`OTEL_CPP_DEVCONTAINER_USER_GID` (Default: `1000`)
114-
115-
* **Install Packages:**
116-
* Docker ARG:
117-
`INSTALL_PACKAGES` (Default: ``)
118-
* Environment Variable:
119-
`OTEL_CPP_DEVCONTAINER_INSTALL_PACKAGES` (Default: ``)
120-
121-
##### Examples
122-
123-
* `docker build --build-arg USER_NAME=myuser --build-arg INSTALL_PACKAGES="nano gitk"...`
124-
* `export OTEL_CPP_DEVCONTAINER_USER_NAME=myuser`
125-
* `export OTEL_CPP_DEVCONTAINER_INSTALL_PACKAGES="nano gitk"`
92+
* **Container Customization**:
93+
See `.devcontainer/README.md` for devcontainer configuration options.
12694

12795
#### Available Commands
12896

@@ -180,6 +148,30 @@ If you encounter issues:
180148
* **Bazelisk Documentation**: [https://github.com/bazelbuild/bazelisk](https://github.com/bazelbuild/bazelisk)
181149
* **VSCode DevContainer Documentation**: [https://code.visualstudio.com/docs/remote/containers](https://code.visualstudio.com/docs/remote/containers)
182150

151+
### Docker Development Image
152+
153+
To build a development docker image you can use `.devcontainer/Dockerfile.dev` dockerfile with the following command.
154+
155+
```
156+
docker build -t opentelemetry-cpp-dev -f ./.devcontainer/Dockerfile.dev .
157+
```
158+
159+
You can customize the image using build arguments. Commonly you should set your user id and group id.
160+
161+
```
162+
docker build -t opentelemetry-cpp-dev \
163+
--build-arg USER_UID="$(id -u)" \
164+
--build-arg USER_GID="$(id -g)" \
165+
-f ./.devcontainer/Dockerfile.dev .
166+
167+
```
168+
169+
Run an interactive bash session binding your host opentelemetry-cpp directory to the container:
170+
171+
```
172+
docker run -it -v "$PWD:/workspaces/opentelemetry-cpp" opentelemetry-cpp-dev bash
173+
```
174+
183175
## Pull Requests
184176

185177
### How to Send Pull Requests

0 commit comments

Comments
 (0)