Difference between revisions of "IoTGateway/Docker"
Daniel.hung (talk | contribs) |
Jems.cheng (talk | contribs) |
||
(9 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
+ | |||
Use Docker to set up build environment more safely & quickly | Use Docker to set up build environment more safely & quickly | ||
Line 21: | Line 22: | ||
=== Get base image === | === Get base image === | ||
− | To get the images we provided, you can use ''docker pull | + | To get the images we provided, you can use ''docker pull <IMAGE REPOSITORY>'' to get the images in the ''[[#Image_List|image list]]''. |
$ docker pull advrisc/u12.04-imx6lbv3:20160303 | $ docker pull advrisc/u12.04-imx6lbv3:20160303 | ||
Line 75: | Line 76: | ||
89e9548a0d40 advrisc/u12.04-imx6lbv3:20160303 "/bin/bash" 27 seconds ago Exited (0) 4 seconds ago dreamy_jennings | 89e9548a0d40 advrisc/u12.04-imx6lbv3:20160303 "/bin/bash" 27 seconds ago Exited (0) 4 seconds ago dreamy_jennings | ||
− | To enter the container that you've created, you need to do ''docker start | + | To enter the container that you've created, you need to do ''docker start <CONTAINER ID>'' & ''docker attach <CONTAINER ID>''. |
$ docker start 89e9548a0d40 | $ docker start 89e9548a0d40 | ||
Line 87: | Line 88: | ||
There are two ways to share data with host OS. | There are two ways to share data with host OS. | ||
− | *data volume | + | *data volume |
− | *docker cp | + | *docker cp |
You have to assign data volumes when creating the container. Use ''docker run'' with '''-v''' options to enable data volume. In the case below, we mount the BSP directory (/home/root/imx6LBV5080_2016-02-03) from your Docker daemon’s host into a container. So, you can access the source code at /home/adv/BSP in the container. | You have to assign data volumes when creating the container. Use ''docker run'' with '''-v''' options to enable data volume. In the case below, we mount the BSP directory (/home/root/imx6LBV5080_2016-02-03) from your Docker daemon’s host into a container. So, you can access the source code at /home/adv/BSP in the container. | ||
Line 97: | Line 98: | ||
adv@7bc2d878c870:~$ sudo chown adv:adv -R BSP | adv@7bc2d878c870:~$ sudo chown adv:adv -R BSP | ||
− | Alternatively, you can also access data in containers after the container is created. Use ''docker cp | + | Alternatively, you can also access data in containers after the container is created. Use ''docker cp <CONTAINER:PATH> <LOCALPATH>'' to pull out data from the container, or ''docker cp <LOCALPATH> <CONTAINER:PATH>'' to push data into the container. |
// Copy sdcard image from container to host | // Copy sdcard image from container to host | ||
Line 107: | Line 108: | ||
=== Remove image or container === | === Remove image or container === | ||
− | Once you do not need the container, you can use ''docker rm | + | Once you do not need the container, you can use ''docker rm <CONTAINER ID>'' to remove it. |
$ docker rm 89e9548a0d40 | $ docker rm 89e9548a0d40 | ||
89e9548a0d40 | 89e9548a0d40 | ||
− | If you want to remove Docker base image, use ''docker rmi | + | If you want to remove Docker base image, use ''docker rmi <IMAGE ID>'' |
$ docker rmi advrisc/u12.04-imx6lbv3:20160303 | $ docker rmi advrisc/u12.04-imx6lbv3:20160303 | ||
Line 120: | Line 121: | ||
It's very easy to build our BSP in Docker environment. | It's very easy to build our BSP in Docker environment. | ||
− | #Get BSP source code | + | #Get BSP source code |
− | #Run a Docker container with data volume sharing for the BSP, or you can use ''docker cp'' to put BSP into the container. | + | #Run a Docker container with data volume sharing for the BSP, or you can use ''docker cp'' to put BSP into the container. |
− | #In the container, go to BSP folder and follow the same introductions as you do on normal computer. | + | #In the container, go to BSP folder and follow the same introductions as you do on normal computer. |
− | #Finally, copy your images from container to host. | + | #Finally, copy your images from container to host. |
== Image List == | == Image List == | ||
Line 139: | Line 140: | ||
| 20170103 | | 20170103 | ||
| Ubuntu 12.04 | | Ubuntu 12.04 | ||
− | | Freescale i.MX6 Yocto 1.5 (fsl-yocto-3.10.17_1.0.x)<br/>Freescale i.MX6 Yocto 1.7 (fsl-yocto-3.14.28_1.0.0)<br/>Freescale i.MX6 Yocto 1.8 (fsl-yocto-3.14.52_1.1.0)<br/>Freescale i.MX6 Yocto 2.0 (fsl-yocto-4.1.15_1.1.0)<br/>Freescale i.MX6 Yocto 2.1 (fsl-yocto-4.1.15_2.0.0) | + | | Freescale i.MX6 Yocto 1.5 (fsl-yocto-3.10.17_1.0.x)<br/> Freescale i.MX6 Yocto 1.7 (fsl-yocto-3.14.28_1.0.0)<br/> Freescale i.MX6 Yocto 1.8 (fsl-yocto-3.14.52_1.1.0)<br/> Freescale i.MX6 Yocto 2.0 (fsl-yocto-4.1.15_1.1.0)<br/> Freescale i.MX6 Yocto 2.1 (fsl-yocto-4.1.15_2.0.0) |
|- | |- | ||
| [https://hub.docker.com/r/advrisc/u12.04-quarklbv2 advrisc/u12.04-quarklbv2] | | [https://hub.docker.com/r/advrisc/u12.04-quarklbv2 advrisc/u12.04-quarklbv2] | ||
| 20160621 | | 20160621 | ||
| Ubuntu 12.04 | | Ubuntu 12.04 | ||
− | | Intel Quark Yocto 1.4.2 (Intel Quark BSP 1.0.4)<br/>Intel Quark Yocto 1.7.2 (Intel Quark BSP 1.2.0) | + | | Intel Quark Yocto 1.4.2 (Intel Quark BSP 1.0.4)<br/> Intel Quark Yocto 1.7.2 (Intel Quark BSP 1.2.0) |
|- | |- | ||
| [https://hub.docker.com/r/advrisc/u12.04-imx6abv1 advrisc/u12.04-imx6abv1] | | [https://hub.docker.com/r/advrisc/u12.04-imx6abv1 advrisc/u12.04-imx6abv1] | ||
Line 154: | Line 155: | ||
| 20160809 | | 20160809 | ||
| Ubuntu 12.04 | | Ubuntu 12.04 | ||
− | | Freescale i.MX6 Android 4.3 (android_JB4.3_1.1.0)<br/>Freescale i.MX6 Android 4.4.2 (android_KK4.4.2_1.0.0) | + | | Freescale i.MX6 Android 4.3 (android_JB4.3_1.1.0)<br/> Freescale i.MX6 Android 4.4.2 (android_KK4.4.2_1.0.0) |
|- | |- | ||
| [https://hub.docker.com/r/advrisc/u14.04-imx6abv4 advrisc/u14.04-imx6abv4] | | [https://hub.docker.com/r/advrisc/u14.04-imx6abv4 advrisc/u14.04-imx6abv4] | ||
| 20170310 | | 20170310 | ||
| Ubuntu 14.04 | | Ubuntu 14.04 | ||
− | | Freescale i.MX6 Android 5.0.0 (android_L5.0.0_1.0.0)<br/>Freescale i.MX6 Android 5.1.1 (android_L5.1.1_2.1.0)<br/>Freescale i.MX6 Android 6.0.1 (android_M6.0.1_1.0.0) | + | | Freescale i.MX6 Android 5.0.0 (android_L5.0.0_1.0.0)<br/> Freescale i.MX6 Android 5.1.1 (android_L5.1.1_2.1.0)<br/> Freescale i.MX6 Android 6.0.1 (android_M6.0.1_1.0.0) |
|- | |- | ||
| [https://hub.docker.com/r/advrisc/u16.04-imx6abv5 advrisc/u16.04-imx6abv5] | | [https://hub.docker.com/r/advrisc/u16.04-imx6abv5 advrisc/u16.04-imx6abv5] | ||
| 20170523 | | 20170523 | ||
| Ubuntu 16.04 | | Ubuntu 16.04 | ||
− | | Freescale i.MX6 Android 7.0.0 (android_N7.1.1_1.0.0)<br/>Rockchip RK3399 Android 7.1.2 | + | | Freescale i.MX6 Android 7.0.0 (android_N7.1.1_1.0.0)<br/> Rockchip RK3399 Android 7.1.2 |
|- | |- | ||
| [https://hub.docker.com/r/advrisc/u14.04-410clbv1 advrisc/u14.04-410clbv1] | | [https://hub.docker.com/r/advrisc/u14.04-410clbv1 advrisc/u14.04-410clbv1] | ||
| 20170717 | | 20170717 | ||
| Ubuntu 14.04 | | Ubuntu 14.04 | ||
− | | Qualcomm db410c Yocto 2.0 (oe-rpb-manifest ''jethro'')<br/>Qualcomm db410c Yocto 2.1 (oe-rpb-manifest ''krogoth'')<br/>Qualcomm db410c Yocto 2.2 (oe-rpb-manifest ''morty'') | + | | Qualcomm db410c Yocto 2.0 (oe-rpb-manifest ''jethro'')<br/> Qualcomm db410c Yocto 2.1 (oe-rpb-manifest ''krogoth'')<br/> Qualcomm db410c Yocto 2.2 (oe-rpb-manifest ''morty'') |
|- | |- | ||
| [https://hub.docker.com/r/advrisc/u14.04-am57lbv1/ advrisc/u14.04-am57lbv1] | | [https://hub.docker.com/r/advrisc/u14.04-am57lbv1/ advrisc/u14.04-am57lbv1] | ||
Line 205: | Line 206: | ||
If your '''repo''' command is upgraded to v2.0 and above, you have to upgrade '''git''' & '''python3'''. | If your '''repo''' command is upgraded to v2.0 and above, you have to upgrade '''git''' & '''python3'''. | ||
− | *Git | + | *Git |
− | :Update to 2.10.2 or later. | + | :Update to 2.10.2 or later. |
+ | sudo apt-get update | ||
sudo apt-get install -y libcurl4-openssl-dev | sudo apt-get install -y libcurl4-openssl-dev | ||
sudo apt-get install -y tk gettext | sudo apt-get install -y tk gettext | ||
− | wget [https://github.com/git/git/archive/v2.25.0.tar.gz https://github.com/git/git/archive/v2. | + | wget [https://github.com/git/git/archive/v2.25.0.tar.gz https://github.com/git/git/archive/v2.32.0.tar.gz] |
− | tar zxvf v2. | + | tar zxvf v2.32.0.tar.gz |
− | cd git-2. | + | cd git-2.32.0/ |
− | + | <pre>sudo apt-get install autoconf | |
− | + | sudo apt install git | |
− | + | make configure | |
− | + | ./configure --prefix=/usr | |
− | + | sudo apt-get install asciidoc | |
− | + | make all doc | |
− | + | sudo make install install-doc install-html | |
+ | |||
+ | git --version | ||
+ | </pre> | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
− | *Python3 | + | *Python3 |
− | :Update to 3.6 or later. | + | :Update to 3.6 or later. |
sudo apt-get install -y python-software-properties | sudo apt-get install -y python-software-properties | ||
Line 232: | Line 241: | ||
sudo add-apt-repository -y ppa:deadsnakes/ppa | sudo add-apt-repository -y ppa:deadsnakes/ppa | ||
+ | or | ||
+ | sudo add-apt-repository ppa:fkrull/deadsnakes | ||
sudo apt-get update | sudo apt-get update | ||
sudo apt-get install -y python3.6 | sudo apt-get install -y python3.6 | ||
Line 250: | Line 261: | ||
curl [https://raw.githubusercontent.com/rockchip-linux/repo/stable/repo https://raw.githubusercontent.com/rockchip-linux/repo/stable/repo] > ${HOME}/bin/repo | curl [https://raw.githubusercontent.com/rockchip-linux/repo/stable/repo https://raw.githubusercontent.com/rockchip-linux/repo/stable/repo] > ${HOME}/bin/repo | ||
+ | |||
== References == | == References == | ||
− | + | | |
+ | |||
+ | *External Link | ||
− | + | #[https://philipzheng.gitbooks.io/docker_practice/content/index.html Docker Introduction (Chinese)] | |
+ | #[https://askubuntu.com/questions/865554/how-do-i-install-python-3-6-using-apt-get software installation - How do I install Python 3.6 using apt-get? - Ask Ubuntu] | ||
− | |||
[[Category:Technique]] | [[Category:Technique]] |
Latest revision as of 04:38, 2 May 2024
Use Docker to set up build environment more safely & quickly
Contents
Overview
To deliver a clean build environment for customer development, we are used to provide a VMWare image. However, this kind of hypervisor mechanism is bigger and always comes worse performance.[1] Fortunately, we have an alternative way for this now. We put the build environment into a container. In a container, performance for building process is similar as native computer[2], and it also provides process isolation & resource limitation for security and stability.
We adopt Docker to achieve this feature.
Requirement
Before you use Docker to develop, you have to install Docker on your platform. Please refer to Docker Installation Guide. You are able to install Docker on Linux, Cloud, Windows, and OS X. In general, you may choose to install on Ubuntu.[3]
Usage
If you would like to use Docker as a non-root user, you should now consider adding your user to the "docker" group with something like:
$ sudo usermod -aG docker $your_user
Note: You may need to login again to activate.
Get base image
To get the images we provided, you can use docker pull <IMAGE REPOSITORY> to get the images in the image list.
$ docker pull advrisc/u12.04-imx6lbv3:20160303 20160303: Pulling from advrisc/u12.04-imx6lbv3 6df68bc875bf: Pull complete 20f5595aa1a4: Pull complete 93b424f526d8: Pull complete c877b3e9524f: Pull complete 29a731492f99: Pull complete 3701b127b54b: Pull complete 15247541bc49: Pull complete 729f8eff6afb: Pull complete 130b818ebc2f: Pull complete 7239f480205c: Pull complete fbcbd43c9696: Pull complete 3f211662827e: Pull complete 65fa0f0910df: Pull complete fda959c610b9: Pull complete 85fd678cfd54: Pull complete 0c63b8fa6a0f: Pull complete 87e1750c6c91: Pull complete 837fb16417bc: Pull complete d72b58a6026b: Pull complete 597115359768: Pull complete 92116cadf140: Pull complete Digest: sha256:603bff4244d016d8318c59218296dc145fd32f7e4f8f4f5c94decca11941dbdf Status: Downloaded newer image for advrisc/u12.04-imx6lbv3:20160303
You can check the image stored locally by docker images.
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE advrisc/u12.04-imx6lbv3 20160303 92116cadf140 30 minutes ago 1.443 GB
Create a container
You can create a new container with a prompt by docker run. If you did not pull the Docker base image before, it will try to download it from the DockerHub repository first.
$ docker run -it advrisc/u12.04-imx6lbv3:20160303 /bin/bash adv@89e9548a0d40:~$
To leave a container, type exit to stop it or use Ctrl + P + Q to detach the container.
adv@89e9548a0d40:~$ exit exit
You can check the container status by docker ps.
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 89e9548a0d40 advrisc/u12.04-imx6lbv3:20160303 "/bin/bash" 27 seconds ago Exited (0) 4 seconds ago dreamy_jennings
To enter the container that you've created, you need to do docker start <CONTAINER ID> & docker attach <CONTAINER ID>.
$ docker start 89e9548a0d40 89e9548a0d40 $ docker attach 89e9548a0d40 adv@89e9548a0d40:~$
There are two ways to share data with host OS.
- data volume
- docker cp
You have to assign data volumes when creating the container. Use docker run with -v options to enable data volume. In the case below, we mount the BSP directory (/home/root/imx6LBV5080_2016-02-03) from your Docker daemon’s host into a container. So, you can access the source code at /home/adv/BSP in the container.
$ docker run -it --name docker_test -v /home/root/imx6LBV5080_2016-02-03:/home/adv/BSP:rw advrisc/u12.04-imx6lbv3:20160303 /bin/bash // Let adv get access permission adv@7bc2d878c870:~$ sudo chown adv:adv -R BSP
Alternatively, you can also access data in containers after the container is created. Use docker cp <CONTAINER:PATH> <LOCALPATH> to pull out data from the container, or docker cp <LOCALPATH> <CONTAINER:PATH> to push data into the container.
// Copy sdcard image from container to host $ docker cp 89e9548a0d40:/home/adv/imx6LBV5080_2016-02-03/build_all/tmp/deploy/images/imx6qrsb4410/fsl-image-x11-imx6qrsb4410.sdcard . // Copy BSP source code into container $ docker cp imx6LBV5080_2016-02-03.tgz 89e9548a0d40:/home/adv
Remove image or container
Once you do not need the container, you can use docker rm <CONTAINER ID> to remove it.
$ docker rm 89e9548a0d40 89e9548a0d40
If you want to remove Docker base image, use docker rmi <IMAGE ID>
$ docker rmi advrisc/u12.04-imx6lbv3:20160303
BSP Building
It's very easy to build our BSP in Docker environment.
- Get BSP source code
- Run a Docker container with data volume sharing for the BSP, or you can use docker cp to put BSP into the container.
- In the container, go to BSP folder and follow the same introductions as you do on normal computer.
- Finally, copy your images from container to host.
Image List
All our images are stored in DockerHub. You can explore and find the image as listed below.
Image Repository | Image Tag | Base OS | Supported Platforms |
---|---|---|---|
advrisc/u12.04-imx6lbv3 | 20170103 | Ubuntu 12.04 | Freescale i.MX6 Yocto 1.5 (fsl-yocto-3.10.17_1.0.x) Freescale i.MX6 Yocto 1.7 (fsl-yocto-3.14.28_1.0.0) Freescale i.MX6 Yocto 1.8 (fsl-yocto-3.14.52_1.1.0) Freescale i.MX6 Yocto 2.0 (fsl-yocto-4.1.15_1.1.0) Freescale i.MX6 Yocto 2.1 (fsl-yocto-4.1.15_2.0.0) |
advrisc/u12.04-quarklbv2 | 20160621 | Ubuntu 12.04 | Intel Quark Yocto 1.4.2 (Intel Quark BSP 1.0.4) Intel Quark Yocto 1.7.2 (Intel Quark BSP 1.2.0) |
advrisc/u12.04-imx6abv1 | 20160713 | Ubuntu 12.04 | Freescale i.MX6 Android 4.2 (android_JB4.2.2_1.1.0) |
advrisc/u12.04-imx6abv2 | 20160809 | Ubuntu 12.04 | Freescale i.MX6 Android 4.3 (android_JB4.3_1.1.0) Freescale i.MX6 Android 4.4.2 (android_KK4.4.2_1.0.0) |
advrisc/u14.04-imx6abv4 | 20170310 | Ubuntu 14.04 | Freescale i.MX6 Android 5.0.0 (android_L5.0.0_1.0.0) Freescale i.MX6 Android 5.1.1 (android_L5.1.1_2.1.0) Freescale i.MX6 Android 6.0.1 (android_M6.0.1_1.0.0) |
advrisc/u16.04-imx6abv5 | 20170523 | Ubuntu 16.04 | Freescale i.MX6 Android 7.0.0 (android_N7.1.1_1.0.0) Rockchip RK3399 Android 7.1.2 |
advrisc/u14.04-410clbv1 | 20170717 | Ubuntu 14.04 | Qualcomm db410c Yocto 2.0 (oe-rpb-manifest jethro) Qualcomm db410c Yocto 2.1 (oe-rpb-manifest krogoth) Qualcomm db410c Yocto 2.2 (oe-rpb-manifest morty) |
advrisc/u14.04-am57lbv1 | 20170313 | Ubuntu 14.04 | TI AM57xx Yocto 2.1 (Processor SDK Linux 03.01.00.06) |
Customization
You can use Dockerfile to create your own base image. Your Dockerfile may looks like this.
FROM advrisc/u12.04-imx6lbv3 MAINTAINER Vendor's Company WORKDIR / USER root # The packages you want to install RUN apt-get install -y NewPackages WORKDIR /home/adv USER adv
Then, you can use docker build to generate a new base image with tag.
$ cd <the-folder-which-has-Dockerfile> $ docker build -t vendor/new-base-image .
Bug Fix
Repo
If your repo command is upgraded to v2.0 and above, you have to upgrade git & python3.
- Git
- Update to 2.10.2 or later.
sudo apt-get update sudo apt-get install -y libcurl4-openssl-dev sudo apt-get install -y tk gettext wget https://github.com/git/git/archive/v2.32.0.tar.gz tar zxvf v2.32.0.tar.gz cd git-2.32.0/
sudo apt-get install autoconf sudo apt install git make configure ./configure --prefix=/usr sudo apt-get install asciidoc make all doc sudo make install install-doc install-html git --version
- Python3
- Update to 3.6 or later.
sudo apt-get install -y python-software-properties
# Install this package on Ubuntu 14.04 or later
sudo apt-get install -y software-properties-common
sudo add-apt-repository -y ppa:deadsnakes/ppa
or
sudo add-apt-repository ppa:fkrull/deadsnakes
sudo apt-get update
sudo apt-get install -y python3.6
cd /usr/bin
sudo rm python3
sudo ln -s python3.6 python3
sudo rm python3m
sudo ln -s python3.6 python3m
python3 -V
If you still have problem, try to upgrade repo command again.
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ${HOME}/bin/repo
Otherwise, you still can use the older version of repo to avoid this bug.
curl https://raw.githubusercontent.com/rockchip-linux/repo/stable/repo > ${HOME}/bin/repo
References
- External Link
- Docker Introduction (Chinese)
- software installation - How do I install Python 3.6 using apt-get? - Ask Ubuntu