blob: 1e01ef2e5e27fd66338e4bbdb37d73f47356c1d4 [file] [view]
---
title: Quick Doris Development Environment with Docker
language: en
description: Quickly set up an Apache Doris development environment with Docker, including a Dockerfile example and VSCode Remote configuration.
keywords:
- Apache Doris
- Docker
- development environment
- Dockerfile
- VSCode Remote
- SYS_PTRACE
---
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# Quick Doris Development Environment with Docker
This article describes how to use Docker to build a Doris development image, compile and run FE/BE, and combine it with VSCode Remote for development and debugging.
<!-- Knowledge type: Procedure -->
<!-- Use case: IDE configuration / Containerized development environment -->
## Related Detailed Documents
- [Compile with the Docker Development Image](/community/source-install/compilation-with-docker)
- [Deployment](/docs/dev/install/deploy-manually/integrated-storage-compute-deploy-manually)
- [VSCode BE Development and Debugging](./be-vscode-dev)
## 1. Environment Preparation
| Component | Description |
| ------------- | --------------------------------- |
| Docker | Installed and running |
| VSCode | Latest stable version |
| Remote plugin | VSCode Remote - Containers / SSH |
## 2. Build the Image
### 2.1 Create the Dockerfile
Create a `Dockerfile` in the working directory. In VSCode, you can use Ctrl+D to replace the following placeholders:
| Placeholder | Meaning |
| ------------------------------- | ----------------------------- |
| `<!!! your user !!!>` | Username created in the container |
| `<!!! your user password !!!>` | Password for that user |
| `<!!! root password !!!>` | Password for the root user |
| `<!!! your git email !!!>` | Email for git configuration |
| `<!!! your git username !!!>` | Username for git configuration |
```dockerfile
FROM apache/incubator-doris:build-env-latest
USER root
WORKDIR /root
RUN echo '<!!! root password !!!>' | passwd root --stdin
RUN yum install -y vim net-tools man wget git mysql lsof bash-completion \
&& cp /var/local/thirdparty/installed/bin/thrift /usr/bin
# For better safety, create a user instead of using root
RUN yum install -y sudo \
&& useradd -ms /bin/bash <!!! your user !!!> && echo <!!! your user password !!!> | passwd <!!! your user !!!> --stdin \
&& usermod -a -G wheel <!!! your user !!!>
USER <!!! your user !!!>
WORKDIR /home/<!!! your user !!!>
RUN git config --global color.ui true \
&& git config --global user.email "<!!! your git email !!!>" \
&& git config --global user.name "<!!! your git username !!!>"
# Optionally install zsh and oh my zsh for easier use; remove if not needed
USER root
RUN yum install -y zsh \
&& chsh -s /bin/zsh <!!! your user !!!>
USER <!!! your user !!!>
RUN wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh \
&& git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions \
&& git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
```
### 2.2 Build the Image
```shell
docker build -t doris .
```
### 2.3 Run the Image
<!-- Knowledge type: Configuration parameters -->
For mount options, refer to [Docker Compilation Mount Notes](../source-install/compilation-with-docker). It is recommended to run the image by mounting the local Doris source directory.
:::caution Windows users
On Windows, mounting involves cross-filesystem access issues. Configure at your own discretion.
:::
The `--cap-add SYS_PTRACE` parameter allows the use of ptrace inside Docker, which helps with ptrace and GDB remote debugging:
```shell
docker run -it --cap-add SYS_PTRACE doris:latest /bin/bash
```
| Parameter | Purpose |
| --------------------- | ------------------------------------------------ |
| `--cap-add SYS_PTRACE` | Allows calling ptrace inside the container (required by GDB) |
| `-it` | Interactive TTY |
| `-v <local>:<container>` | Mount a local source directory (as needed) |
### 2.4 Configure zsh (Optional)
If you chose to install zsh, replace the plugins line in `~/.zshrc`:
```bash
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
```
### 2.5 Pull the Doris Source Code
```shell
su <your user>
mkdir code && cd code
git clone https://github.com/apache/doris.git
cd doris
git submodule update --init --recursive
```
## 3. Compile
:::caution First-time compilation
For the first compilation, use the following command to force a clean build:
```shell
sh build.sh --clean --be --fe --ui
```
The `build-env-for-0.15.0` image upgraded thrift (0.9 to 0.13), so you must use `--clean` to force the new version of thrift to generate the code files, otherwise incompatible code will appear.
:::
After that, compile Doris normally:
```shell
sh build.sh
```
## 4. Run
### 4.1 Prepare the Metadata Directory
Manually create the `meta_dir` directory for metadata storage. The default value is `${DORIS_HOME}/doris-meta`:
```shell
mkdir meta_dir
```
### 4.2 Start FE
```shell
cd output/fe
sh bin/start_fe.sh --daemon
```
### 4.3 Start BE
```shell
cd output/be
sh bin/start_be.sh --daemon
```
### 4.4 Connect with mysql-client
```shell
mysql -h 127.0.0.1 -P 9030 -u root
```
## 5. FAQ
<!-- Knowledge type: Troubleshooting -->
### Q1: GDB reports `ptrace: Operation not permitted`
The container was not started with `--cap-add SYS_PTRACE`. Restart the container with that parameter added.
### Q2: Compilation reports thrift version mismatch
The first compilation did not include `--clean`. Clean up and recompile using the command in section 3.
### Q3: FE / BE exits immediately after starting
Check whether `meta_dir` and `storage_root_path` have been created, whether the ports are unoccupied, and whether `priority_networks` covers the container IP.
### Q4: VSCode Remote container cannot attach to a process for debugging
The `SYS_PTRACE` capability was not added, or the VSCode C/C++ plugin does not specify a suitable `miDebuggerPath`.