本文主要是講述了如何基于Docker進行開發環境的搭建,避免應該Linux版本的差異導緻将時間浪費在環境的搭建上。另外在新人參與到開發時也可以不用重新搭建環境直接使用搭建好的Docker Image進行開發,
在Ubuntu虛拟機上如何安裝Docker
官方教程
- Install Docker Engine on Ubuntu
- Docker官方的Ubuntu Image
Docker安裝
- 進行ubuntu系統的更新并安裝相關軟體
[email protected]:~/Midea_Develop/Open_Source/Amazon/avs-device-sdk$ sudo apt-get update
[sudo] t 的密碼:
命中:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
命中:2 http://cn.archive.ubuntu.com/ubuntu bionic InRelease
命中:3 http://cn.archive.ubuntu.com/ubuntu bionic-updates InRelease
命中:4 http://cn.archive.ubuntu.com/ubuntu bionic-backports InRelease
正在讀取軟體包清單... 完成
[email protected]:~/Midea_Develop/Open_Source/Amazon/avs-device-sdk$ sudo apt-get install \
> apt-transport-https \
> ca-certificates \
> curl \
> gnupg \
> lsb-release
-
安裝docker的官方GPG Key
執行如下指令
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- 添加 Docker的倉庫位址
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 進行Docker Engine的安裝
[email protected]:~/Midea_Develop/Open_Source/Amazon/avs-device-sdk$ sudo apt-get install docker-ce docker-ce-cli containerd.io
- 在安裝完成後,基于Docker的示例Image - hello-world進行環境驗證
[email protected]:~/Midea_Develop/Open_Source/Amazon/avs-device-sdk$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:5122f6204b6a3596e048758cabba3c46b1c937a46b5be6225b835d091b90e46c
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
通過以上的操作,就完成了Ubuntu下的Docker環境搭建了,官方的文檔已經講述的很清楚了,希望更多的通過官網進行Docker的相關學習
在Docker上使用官網的ubuntu image和必要環境配置
如何拉取Ubuntu和建立container
- 從Docker官方倉庫拉取ubuntu iamge, 我這裡使用的是ubuntu 18.04.
sudo docker pull ubuntu:bionic-20210416
補充說明: bionic-20210416 為ubuntu的tag,對于需要安裝ubuntu不同的版本請參考官網文檔: https://hub.docker.com/_/ubuntu/ 修改不同的tag.
-
在執行pull指令進行ubuntu image的拉取後,通過運作docker的如下指令進行驗證,相關image是否正常拉取.
運作 sudo docker images檢視目前本地有幾個可使用的image
[email protected]:~/Midea_Develop/Open_Source/Amazon$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu bionic-20210416 4eb8f7c43909 3 weeks ago 63.1MB
hello-world latest d1165f221234 2 months ago 13.3kB
基于ubuntu image 建立container并挂載本地的AVS SDK源碼目錄
運作sudo docker run 相關指令,
sudo docker run -it --restart=always -p 10023:22 -v /home/Midea_Develop/Open_Source/Amazon/avs-device-sdk/ --name amazon_avs_sdk ubuntu:bionic-20210416 /bin/bash
執行成功後可以通過sudo docker ps 進行運作中的container檢視
[email protected]:~/Midea_Develop/Open_Source/Amazon$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0ac726fc6a1 ubuntu:bionic-20210416 "/bin/bash" 56 minutes ago Up 22 minutes 0.0.0.0:10023->22/tcp, :::10023->22/tcp amazon_avs_sdk
在退出Docker中的ubuntu後,可以通過執行sudo docker exec
[email protected]:~/Midea_Develop/Open_Source/Amazon$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0ac726fc6a1 ubuntu:bionic-20210416 "/bin/bash" 59 minutes ago Up 24 minutes 0.0.0.0:10023->22/tcp, :::10023->22/tcp amazon_avs_sdk
[email protected]:~/Midea_Develop/Open_Source/Amazon$ sudo docker exec -it b0ac726fc6a1 /bin/bash
[email protected]:/#
在進入到Docker Ubuntu界面後,可以看到根目錄自動建立了Amazon目錄,并挂載了Amazon AVS SDK的相關檔案
[email protected]:/# ls Amazon/avs
avs-device-sdk/ avs_sdk_devlop.tar
[email protected]:/# ls Amazon/avs-device-sdk/
ACL AVSGatewayManager CMakeLists.txt Captions Endpoints LICENSE.txt PlaylistParser Settings ThirdParty cmakeBuild pkg-config.pc.cmake
ADSL ApplicationUtilities CONTRIBUTING.md CertifiedSender Integration MediaPlayer README.md SpeechEncoder applications core shared
AFML BluetoothImplementations CapabilitiesDelegate ContextManager InterruptModel Metrics RegistrationManager Storage build doc tools
AVSCommon CHANGELOG.md CapabilityAgents Diagnostics KWD NOTICE.txt SampleApp SynchronizeStateSender capabilities issue_template.md
[email protected]:/#
補充說明: 在進行AVS C++ SDK 基于Docker的環境搭建時,我們的代碼檔案是放在主機的不會放在Docker環境,是以需要通過Docker相關指令将檔案夾挂載到Docker Ubuntu上
在前面運作的如下指令中, -v 指定了我們要挂載的目錄(也就是我們AVS C++ SDK解壓到的目錄),而源碼目錄後跟着的:/Amazon 是指在Docker Ubuntu下挂載到的目錄,該目錄會自動建立并挂載AVS C++ SDK源碼目錄.
而ubuntu:bionic-20210416是指我們要建立的container來源的iamge.
sudo docker run -it --restart=always -p 10023:22 -v /home/Midea_Develop/Open_Source/Amazon/avs-device-sdk/:/Amazon --name amazon_avs_sdk ubuntu:bionic-20210416 /bin/bash
Docker 下ubuntu ssh服務的搭建
在建立完AVS C++ SDK的Docker容器後,後需要的開發中一般該容器都是運作在背景的,是以需要搭建sshd的服務,支援遠端ssh的登入.
- 進入Docker Ubuntu 進行相關軟體的安裝
[email protected]:~/Midea_Develop/Open_Source/Amazon$ sudo docker exec -it b0ac726fc6a1 /bin/bash
# b0ac726fc6a1 為container id
-
安裝vim
在初始狀态直接進行安裝vim會報如下錯誤,需要進行apt-get倉庫的更新
[email protected]:/# apt-get install vim
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package vim
[email protected]:/# apt-get update
Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
vim安裝
在[email protected]:/# apt-get install vim
Reading package lists... Done
Building dependency tree
Reading state information... Done
-
ssh服務搭建
首先進行sshd-server的安裝
在成功安裝後,進行sshd配置檔案的修改,改為支援root使用者的登入
vim 打開sshd的配置檔案sshd_config
将配置檔案中的PermitRootLogin 修改為yes
#PermitRootLogin prohibit-password
PermitRootLogin yes
然後重新開機sshd服務
[email protected]:/# service ssh restart
* Restarting OpenBSD Secure Shell server sshd
重新開機完sshd服務後,還需要給root設定密碼,運作passwd設定密碼
後續ssh登入需要用到
在這[email protected]:/# passwd
Enter new UNIX password:
最後在執行完以上操作後,可以通過ssh進行docker ubuntu的登入了.
[email protected]:~/Midea_Develop/Open_Source/Amazon$ ssh [email protected] -p 10023
[email protected]'s password:
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-72-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
Last login: Wed May 19 02:38:52 2021 from 172.17.0.1
[email protected]:~#
補充說明,-p後面的10023是前面在運作docker run指令所指定的,和23端口的映射.
在完成基本環境的搭建後,常用的Docker指令說明
-
docker export
可以将已經完成環境搭建的Docker container導出為本地的image檔案
sudo docker export b0ac726fc6a1 -o avs_sdk_devlop.tar
b0ac726fc6a1 為container id, 可以通過docker ps -a進行檢視
-
docker ps
檢視目前運作中的container相關資訊的狀态
sudo docker ps
[sudo] t 的密碼:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0ac726fc6a1 ubuntu:bionic-20210416 "/bin/bash" About an hour ago Up 49 minutes 0.0.0.0:10023->22/tcp, :::10023->22/tcp amazon_avs_sdk
加-a參數,可以看到所有的container
-
docker container rm
進行指定container的删除
其它的指令,請查閱Docker官方文檔進行學習.
-
docker run --device=/dev/snd:/dev/snd …
在建立新的container的時候可以通過–device參數,将Host的聲霸卡映射到Docker Ubuntu下
Docker Ubuntu下AVS C++ SDK的編譯
Set Up the AVS Device SDK on Ubuntu
如上連結,Amazon Alexa的官方提供詳細的指導書,請将Docker Ubuntu 當做正常的ubuntu進行操作即可.
在編譯環境搭建完後,可以将對應的container導出生成新的image.
sudo docker export b0ac726fc6a1 -o avs_sdk_dev.tar
# b0ac726fc6a1 為container id
對avs_sdk_dev.tar的使用
sudo docker import avs_sdk_dev.tar
#執行上面指令後,可以通過sudo docker images 進行本地存在的image list進行檢視
sudo docker tag 6334ffd87859 avs_sdk:1.0
#6334ffd87859 為image id,為image打tag
# 最後在運作sudo docker run進行container的建立
sudo docker run --device=/dev/snd:/dev/snd -it --restart=always -p 10023:22 -v /home/t/Midea_Develop/Open_Source/Amazon/AVS_DEV/:/Amazon --name avs_dev avs_sdk:1.0 /bin/bash
總結
有任何關于AVS C++ SDK開發的問題,請及時留言溝通.
avs-device-sdk源碼位址
參考連結:
Docker官方 相關指令說明文檔