如何使用 Docker 进行编译和开发

简介: 本文主要为大家讲解不同环境下如何使用docker进行日常开发和编译。

112.jpg
镜像下载、域名解析、时间同步请点击 阿里巴巴开源镜像站

一、Linux环境开发

适用于Linux环境开发者,有专门代码服务器或虚拟机

1. 安装docker

$ sudo apt-get install docker-ce

2. 获取docker镜像

$ docker pull registry.cn-hangzhou.aliyuncs.com/alios_things/rtos:latest

3. 启动docker

为其命名alios-docker:

$ docker run -it --privileged --name alios-docker registry.cn-hangzhou.aliyuncs.com/alios_things/rtos /bin/bash

注意:

  • 退出docker后,可用以下命令重新启动已有docker:
$ docker container start -ia alios-docker
  • 镜像更新前,需要备份有用的代码,重新获取新镜像并启动

二、Mac环境开发

适用于无专门代码服务器或虚拟机,习惯mac本机开发

适用场景一:有linux经验,代码编辑与编译均可在docker环境下进行

1. 下载mac环境下的docker工具包并安装

打开https://docs.docker.com/toolbox/overview/#whats-in-the-box
5.png
安装后打开Toolbox的DOCKER CLI, 实际上进入mac 的Terminal, 再继续下面的操作

2. 获取docker镜像

$ docker pull registry.cn-hangzhou.aliyuncs.com/alios_things/rtos:latest

3. 启动docker

为其命名alios-docker:

$ docker run -it --privileged --name alios-docker registry.cn-hangzhou.aliyuncs.com/alios_things/rtos bin/bash

4. 获取代码

  1. 组件化工具获取:按需选择适当组件获取需要的代码 本地zip文件,或 wget http链接(根据所选组件生成源码下载的链接) 获取
  2. github获取:将获取全量代码
git clone https://github.com/alibaba/AliOS-Things.git -b <release_branch_name>

注意:

  • 退出docker后,可用以下命令重新启动已有docker:
$ docker container start -ia alios-docker
  • 需要烧机时,配置docker USB设备,参考Windows下的USB设备配置,启动docker命令中无需-v参数

适用场景二:代码编辑和调试在mac,编译和烧录在docker下进行

与mac场景一比较,需要建立共享目录,完成代码在两种环境中的共享。

1. 下载docker工具

同上

2. 获取docker镜像

同上

3. 获取代码

推荐组件化工具获取,将zip包解压到本机某个目录下, 如 /Users/xxx/alios

4. 启动docker

为其命名alios-docker,并指定本机与docker的目录映射关系: 使用-v 参数 -v <本机代码所在目录名>:<docker中映射名>

$ docker run -it --privileged --name alios-docker -v /Users/xxx/alios:/workspace registry.cn-hangzhou.aliyuncs.com/alios_things/rtos bin/bash

至此,可以达到对/Users/xxx/alios中的代码进行本地编辑和调试,而编译时, 转入docker中的/workspace下,执行

# aos2.1.0以及后续版本
aos make <app>@<board> -c config && aos make 
# aos2.1.0之前版本
aos make <app>@<board>

注意: 需要烧机时,配置docker USB设备,参考Windows下的USB设备配置, 启动docker命令中-v 参数稍有差别

三、Windows环境开发

适用于无专门代码服务器或虚拟机, 习惯Windows本机开发

适用场景一:有linux经验,可工作于linux虚拟机

1. 下载Windows环境下的docker工具包并安装

打开https://docs.docker.com/toolbox/overview/#whats-in-the-box下载windows下的docker工具
6.png
Toolbox将默认安装VirtualBox,之后打开Docker Quickstart Terminal进行下面的操作

2. 获取docker 镜像

$ docker pull registry.cn-hangzhou.aliyuncs.com/alios_things/rtos:latest

3. 启动docker

$ docker run -it --privileged --name alios-docker registry.cn-hangzhou.aliyuncs.com/alios_things/rtos bash

4. 获取代码

  1. 组件化工具获取:按需选择适当组件获取需要的代码 本地zip文件,或 wget http链接(根据所选组件生成源码下载的链接) 获取
  2. github获取:将获取对应发布分支的代码 git clone https://github.com/alibaba/AliOS-Things.git -b <release_branch_name>

注意: 

  • 退出docker后,可用以下命令重新启动已有docker:
$ docker container start -ia alios-docker
  • 需要烧录设备时, 参考Windows场景二中的USB设备配置,docker启动时,无需-v参数

适用场景二:代码编辑和调试在windows,编译和烧录在docker下进行

与场景一比较,需要建立共享目录,完成代码在两种环境中的共享。

1. 下载docker工具

同上

2. 获取docker镜像

同上

3. 获取代码

推荐组件化工具获取,将zip包解压到本机某个目录下, 如d:\work

4. 启动docker, 带目录共享能力

方式一:创建共享目录的docker
执行如下脚本,按要求copy命令并执行后即可 set_share_folder.zip
例如:需要做 d:\work与 docker中的/workspace的目录共享,执行脚本后,命令如下:
1)脚本执行后,自动停在虚拟机终端:

$ sudo mkdir –parents /d/work
$ sudo mount –tvboxsf d/work /d/work/
$ exit

2)退出后回到windows命令行,启动AliOS docker:

$ docker run -it --privileged --name alios-docker -v /d/work:/workspace/ registry.cn-hangzhou.aliyuncs.com/alios_things/rtos bash

这样就启动了一个AliOS Things的docker, 之后可以在docker环境里进行编译开发.
注意:Windows下取消共享目录命令:

C:/Program Files/Oracle/VirtualBox/VBoxManage.exe sharedfolder remove default --name d/work

方式二:利用samba服务的docker
1)创建存储volume, 便于与docker下的目录共享:

$ docker volume create --name aos-vol

2)启动docker:为其命名alios-docker,并-v指定volume目录映射到docker中的/workspace

$ docker run -it --privileged -p445:445 --name alios-docker -v aos-vol:/workspace/ registry.cn-hangzhou.aliyuncs.com/alios_things/rtos bash

3)安装samba并配置, 此时已进入docker环境:

$ apt install samba
$ vim /etc/samba/smb.conf   #在文件最后添加以下内容
[alios]
   path = /workspace
   public = yes
   case sensitive = yes
   map archive = no
   only guest = yes
   writable = yes
   force user = aosuser
   force group = aosuser
$ groupadd -g 1000 aosuser             #添加分组,与上面指定的分组名保持一致
$ useradd -m -u 1000 -g 1000 aosuser   #添加用户,与上面指定的用户名保持一致

4)启动samba daemon:

$ /usr/sbin/smbd

5)获取docker的虚拟IP: 回到Docker Quickstart Terminal里查看ip

$ docker-machine ip
192.168.99.100

6)配置网络连接:在windows下按win+R键,调出运行窗口,输入ip
7.png
此时,在windows下可访问docker里的内容, 亦可随意添加内容到docker目录里:
8.png

四、配置docker_usb设备

注:如果无烧录需求, 可忽略此步骤
1)打开Docker Quickstart Terminal (Mac时,可直接使用mac terminal),停止缺省虚拟机:

$ docker-machine stop default

2)打开VirtualBox的管理界面,设置->usb设备->点选“启用usb控制器”->添加usb设备->确认
9.png
3)重新运行缺省虚拟机:

$ docker-machine start default

或者打开一个新的Docker Quickstart Terminal

$ docker-machine ssh default

4)检测usb设备:连线后使用下面命令进行检测

$ dmesg | grep1 usb
........
[   19.942282] usb 1-2: cp210x converter now attached to ttyUSB0

5)欲使用usb设备的功能,启动docker时需添加新的启动参数--privileged,而-v参数根据目录共享需要添加:

$ docker run -it --privileged --name alios-things -v /d/work:/workspace/ registry.cn-hangzhou.aliyuncs.com/alios_things/rtos bash

6)编译代码,使用aos命令烧写: 比如烧写适配developerkit板子的helloworld应用的image:

$ aos upload helloworld@developerkit
.......
[INFO]: Firmware upload succeed!
阿里巴巴开源镜像站 提供全面,高效和稳定的镜像下载服务。钉钉搜索 ' 21746399 ‘ 加入镜像站官方用户交流群。”
相关文章
|
5月前
|
资源调度 前端开发 Shell
[docker] DevContainer高效开发(第二篇):前端开发体验
上面的配置只是最基本的配置,大部分情况我们是需要自定义配置,让容器更符合我们的需求。自定义配置就需要用到 Dockerfile,这个文件是 docker 的配置文件,可以在里面安装软件,配置环境等等。Dockerfile 的语法可以参考 官方文档。然后根据自己的需求编写 Dockerfile# 设置变量,由 .devcontainer.json 中的 args 传入# 指定 node 版本# 设置编码# 设置工作目录# 挂载 volume# 设置 bash 为默认 shell。
144 0
|
1月前
|
应用服务中间件 nginx Docker
Docker镜像-基于DockerFile制作编译版nginx镜像
这篇文章介绍了如何基于Dockerfile制作一个编译版的nginx镜像,并提供了详细的步骤和命令。
165 17
Docker镜像-基于DockerFile制作编译版nginx镜像
|
29天前
|
持续交付 开发者 Docker
掌握 Docker:容器化技术在现代开发中的应用
Docker 是一个开源容器化平台,使开发者能够将应用程序及其依赖项封装在轻量级容器中,确保跨平台的一致性。本文介绍了 Docker 的基本概念、核心组件及优势,并展示了其在快速部署、一致性、可移植性和微服务架构中的应用。通过示例说明了 Docker 在本地开发环境搭建、服务依赖管理和 CI/CD 流程中的作用,以及多阶段构建、资源限制和网络模式等高级特性。掌握 Docker 可大幅提升开发效率和应用管理能力。
|
2月前
|
机器学习/深度学习 Kubernetes Docker
机器学习开发的灵药:Docker容器
机器学习开发的灵药:Docker容器
|
2月前
|
Android开发 Docker 容器
docker中编译android aosp源码,出现Build sandboxing disabled due to nsjail error
在使用Docker编译Android AOSP源码时,如果遇到"Build sandboxing disabled due to nsjail error"的错误,可以通过在docker run命令中添加`--privileged`参数来解决权限不足的问题。
213 1
|
2月前
|
容器 C# Docker
WPF与容器技术的碰撞:手把手教你Docker化WPF应用,实现跨环境一致性的开发与部署
【8月更文挑战第31天】容器技术简化了软件开发、测试和部署流程,尤其对Windows Presentation Foundation(WPF)应用程序而言,利用Docker能显著提升其可移植性和可维护性。本文通过具体示例代码,详细介绍了如何将WPF应用Docker化的过程,包括创建Dockerfile及构建和运行Docker镜像的步骤。借助容器技术,WPF应用能在任何支持Docker的环境下一致运行,极大地提升了开发效率和部署灵活性。
53 0
|
4月前
|
敏捷开发 API 持续交付
阿里云云效产品使用问题之流水线编译docker时,如何把已经定义好的token传入编译参数
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
阿里云云效产品使用问题之流水线编译docker时,如何把已经定义好的token传入编译参数
|
2月前
|
jenkins 网络安全 持续交付
Jenkins Pipeline 流水线 - 上传文件 Publish over SSH + Docker 编译 + 上传到阿里仓库
Jenkins Pipeline 流水线 - 上传文件 Publish over SSH + Docker 编译 + 上传到阿里仓库
54 0
|
2月前
|
jenkins 持续交付 开发工具
自动化开发之旅:Docker携手Jenkins,与Git和Tomcat共舞持续集成
【8月更文挑战第13天】在软件开发中,持续集成(CI)通过自动化构建、测试与部署提升效率与稳定性。Docker、Jenkins、Git和Tomcat构成CI的黄金组合:`git push`触发Jenkins作业,利用Docker确保环境一致性,最终将应用部署至Tomcat。首先配置Git Webhooks以触发Jenkins;接着在Jenkins中创建作业并使用Docker插件模拟真实环境;通过Maven构建项目;最后部署至Tomcat。这套流程减少人为错误,提高开发效率,展示了技术的力量与流程的革新。
62 0
|
2月前
|
人工智能 Kubernetes Cloud Native
AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效
AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效
37 0