1# Docker Environment<a name="EN-US_TOPIC_0000001055701144"></a> 2 3## Introduction<a name="section107932281315"></a> 4 5OpenHarmony provides the following two types of Docker environments for you to quickly get the development environment ready: 6 7- Standalone Docker environment: applicable when using Ubuntu or Windows to build a distribution 8- HPM-based Docker environment: applicable when using the HarmonyOS Package Manager \(HPM\) to build a distribution 9 10**Table 1** Docker image 11 12<a name="table11986917191214"></a> 13<table><thead align="left"><tr id="row149861417121215"><th class="cellrowborder" valign="top" width="15.831583158315832%" id="mcps1.2.6.1.1"><p id="p798611714124"><a name="p798611714124"></a><a name="p798611714124"></a>Docker Environment</p> 14</th> 15<th class="cellrowborder" valign="top" width="13.97139713971397%" id="mcps1.2.6.1.2"><p id="p1698661751219"><a name="p1698661751219"></a><a name="p1698661751219"></a>System Type</p> 16</th> 17<th class="cellrowborder" valign="top" width="18.61186118611861%" id="mcps1.2.6.1.3"><p id="p1798671761217"><a name="p1798671761217"></a><a name="p1798671761217"></a>Operating Platform</p> 18</th> 19<th class="cellrowborder" valign="top" width="35.8935893589359%" id="mcps1.2.6.1.4"><p id="p20526205414295"><a name="p20526205414295"></a><a name="p20526205414295"></a>Docker Image Repository</p> 20</th> 21<th class="cellrowborder" valign="top" width="15.69156915691569%" id="mcps1.2.6.1.5"><p id="p1833001309"><a name="p1833001309"></a><a name="p1833001309"></a>Tag</p> 22</th> 23</tr> 24</thead> 25<tbody><tr id="row1798661751216"><td class="cellrowborder" rowspan="2" align="center" valign="top" width="15.831583158315832%" headers="mcps1.2.6.1.1 "><p id="p1898631791213"><a name="p1898631791213"></a><a name="p1898631791213"></a>Standalone Docker environment</p> 26</td> 27<td class="cellrowborder" valign="top" width="13.97139713971397%" headers="mcps1.2.6.1.2 "><p id="p1598617177128"><a name="p1598617177128"></a><a name="p1598617177128"></a>Mini and small systems</p> 28</td> 29<td class="cellrowborder" valign="top" width="18.61186118611861%" headers="mcps1.2.6.1.3 "><p id="p898614178122"><a name="p898614178122"></a><a name="p898614178122"></a>Ubuntu or Windows</p> 30</td> 31<td class="cellrowborder" valign="top" width="35.8935893589359%" headers="mcps1.2.6.1.4 "><p id="p12667431305"><a name="p12667431305"></a><a name="p12667431305"></a>swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker</p> 32</td> 33<td class="cellrowborder" valign="top" width="15.69156915691569%" headers="mcps1.2.6.1.5 "><p id="p143320173017"><a name="p143320173017"></a><a name="p143320173017"></a>1.0.0</p> 34</td> 35</tr> 36<tr id="row998612174129"><td class="cellrowborder" valign="top" headers="mcps1.2.6.1.1 "><p id="p1998617172126"><a name="p1998617172126"></a><a name="p1998617172126"></a>Standard system</p> 37</td> 38<td class="cellrowborder" valign="top" headers="mcps1.2.6.1.2 "><p id="p1598641741215"><a name="p1598641741215"></a><a name="p1598641741215"></a>Ubuntu</p> 39</td> 40<td class="cellrowborder" valign="top" headers="mcps1.2.6.1.3 "><p id="p552616549297"><a name="p552616549297"></a><a name="p552616549297"></a>swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker</p> 41</td> 42<td class="cellrowborder" valign="top" headers="mcps1.2.6.1.4 "><p id="p1633303300"><a name="p1633303300"></a><a name="p1633303300"></a>1.0.0</p> 43</td> 44</tr> 45<tr id="row5986201731214"><td class="cellrowborder" align="center" valign="top" width="15.831583158315832%" headers="mcps1.2.6.1.1 "><p id="p136981216143"><a name="p136981216143"></a><a name="p136981216143"></a>HPM-based Docker environment</p> 46</td> 47<td class="cellrowborder" valign="top" width="13.97139713971397%" headers="mcps1.2.6.1.2 "><p id="p969831161416"><a name="p969831161416"></a><a name="p969831161416"></a>Mini and small systems</p> 48</td> 49<td class="cellrowborder" valign="top" width="18.61186118611861%" headers="mcps1.2.6.1.3 "><p id="p18821161052214"><a name="p18821161052214"></a><a name="p18821161052214"></a>Ubuntu or Windows</p> 50</td> 51<td class="cellrowborder" valign="top" width="35.8935893589359%" headers="mcps1.2.6.1.4 "><p id="p1652616548294"><a name="p1652616548294"></a><a name="p1652616548294"></a>swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker</p> 52</td> 53<td class="cellrowborder" valign="top" width="15.69156915691569%" headers="mcps1.2.6.1.5 "><p id="p1433130173010"><a name="p1433130173010"></a><a name="p1433130173010"></a>0.0.3</p> 54</td> 55</tr> 56</tbody> 57</table> 58 59 60 61 62 63 64 65 66## Preparations<a name="section7337134183512"></a> 67 68Before using the Docker environment, perform the following operations: 69 701. Install Docker. For details, see [Install Docker Engine](https://docs.docker.com/engine/install/). 712. Obtain the OpenHarmony source code. For details, see [Source Code Acquisition](sourcecode-acquire.md). 72 73 > **NOTE:** 74 >You do not need to obtain the source code for the HPM-based Docker environment. 75 76 77## Standalone Docker Environment<a name="section2858536103611"></a> 78 79The Docker image of OpenHarmony is hosted on [HUAWEI CLOUD SWR](https://console.huaweicloud.com/swr/?region=cn-south-1&locale=en-us#/app/warehouse/warehouseMangeDetail/goldensir/openharmony-docker/openharmony-docker?type=ownImage). Using the Docker image will help simplify environment configurations needed for the building. The following describes the detailed procedure. 80 81### Setting Up the Docker Environment for Mini-System Devices \(reference memory ≥ 128 KB\) and Small-System Devices \(reference memory ≥ 1 MB\)<a name="section319412277287"></a> 82 831. Obtain the Docker image. 84 85 ``` 86 docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0 87 ``` 88 892. Go to the root directory of OpenHarmony code and run the following command to access the Docker build environment: 90 91 Run the following command in Ubuntu: 92 93 ``` 94 docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0 95 ``` 96 97 Run the following command in Windows \(assuming that the source code directory is **D:\\OpenHarmony**\): 98 99 ``` 100 docker run -it -v D:\OpenHarmony:/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0 101 ``` 102 103 104### Building for Mini-System Devices \(reference memory ≥ 128 KB\) and Small-System Devices \(reference memory ≥ 1 MB\)<a name="section631485163615"></a> 105 106The following uses the Hi3516 platform as an example to describe the build procedure. 107 108Set the build path to the current path. 109 110``` 111hb set 112``` 113 114**Figure 1** Setting page<a name="fig7947145854013"></a> 115 116 117> **NOTE:** 118>The mapping between the development board and the building GUI: 119> 120>- Hi3861: wifiiot\_hispark\_pegasus@hisilicon 121>- Hi3516: ipcamera\_hispark\_taurus@hisilicon 122>- Hi3518: ipcamera\_hispark\_aries@hisilicon 123 1241. Select **ipcamera\_hispark\_taurus@hisilicon** and press **Enter**. 1252. Start building. 126 127 ``` 128 hb build -f 129 ``` 130 1313. View the build result. 132 133 The files will be generated in the **out/hispark\_taurus/ipcamera\_hispark\_taurus** directory. 134 135 136### Setting Up the Docker Environment for Standard-System Devices \(reference memory ≥ 128 MB\)<a name="section13585262391"></a> 137 1381. Obtain the Docker image. 139 140 ``` 141 docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:1.0.0 142 ``` 143 1442. Go to the root directory of OpenHarmony code and run the following command to access the Docker build environment: 145 146 ``` 147 docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0 148 ``` 149 150 151### Building for Standard-System Devices \(reference memory ≥ 128 MB\)<a name="section193711513406"></a> 152 153Run the following script to start building for standard-system devices \(reference memory ≥ 128 MB\). 154 155``` 156./build.sh --product-name {product_name} --ccache 157``` 158 159**product\_name** indicates the platform supported by the current distribution, for example, Hi3516DV300 and rk3568. 160 161Files generated during building are stored in the **out/{device_name}/** directory, and the generated image is stored in the **out/{device_name}/packages/phone/images/** directory. 162 163 164> **NOTE:** 165>You can exit Docker by simply running the **exit** command. 166 167## HPM-based Docker Environment<a name="section485713518337"></a> 168 169**docker\_dist** is a template component in the [HPM](https://hpm.harmonyos.com/#/en/home) system. It helps to quickly initialize an HPM project and use the Docker image to quickly build a distribution of OpenHarmony, greatly simplifying environment configurations needed for building. After configuring the Ubuntu and hpm-cli development environments, perform the following steps to access the Docker environment: 170 171### Setting Up the Docker Environment<a name="section3295842510"></a> 172 1731. Initialize the installation template by running the following command in any of the working directories: 174 175 ``` 176 hpm init -t @ohos/docker_dist 177 ``` 178 1792. Modify the **publishAs** field. 180 181 The obtained bundle is of the template type. Open the **bundle.json** file in the current directory and change the value of **publishAs** from **template** to **distribution** as needed. 182 183 184### Obtaining and Building Source Code<a name="section69141039143518"></a> 185 186Start building. Docker can be automatically installed only in Ubuntu. If you are using any other operating system, manually install Docker before pulling the image. 187 188- **Automatically Installing Docker \(Ubuntu\)** 189 190 Running the following command will automatically install Docker, pull the Docker image, and start the pulling and building of the corresponding solution in the container. 191 192 **Method 1:** 193 194 Add a parameter to specify the solution. For example: 195 196 ``` 197 hpm run docker solution={product} 198 ``` 199 200 **\{product\}** indicates the solution, for example, **@ohos/hispark\_taurus**, **@ohos/hispark\_aries**, and **@ohos/hispark\_pegasus**. 201 202 **Method 2:** 203 204 Set an environment variable to specify the solution, and then run the build command. 205 206 1. Select the desired solution. 207 208 ``` 209 export solution={product} 210 ``` 211 212 **\{product\}** indicates the solution, for example, **@ohos/hispark\_taurus**, **@ohos/hispark\_aries**, and **@ohos/hispark\_pegasus**. 213 214 2. Obtain and build the source code. 215 216 ``` 217 hpm run docker 218 ``` 219 220 This example uses the **@ohos/hispark\_taurus** solution for illustration. If the execution is successful, the output is as follows: 221 222 ``` 223 ... 224 ohos ipcamera_hispark_taurus build success! 225 @ohos/hispark_taurus: distribution building completed. 226 ``` 227 228 229- **Manually Installing Docker \(Non-Ubuntu\)** 230 231 Perform the following operations to install Docker: 232 233 ``` 234 # Pull the image. 235 docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.3# Compile the Docker image in the Linux environment. 236 hpm run distWithDocker solution={product} 237 # When using Windows, make sure to configure the Git Bash. 238 hpm config set shellPath "Git Bash path" 239 hpm run distWithDocker solution={product} 240 ``` 241 242