Difference between revisions of "IoTGateway/Docker"

From ESS-WIKI
Jump to: navigation, search
Line 2: Line 2:
  
 
==Overview==
 
==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. 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, and it also provides process isolation & resource limitation for security and stability.
+
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.<ref name="ref1" /> 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<ref name="ref2" />, and it also provides process isolation & resource limitation for security and stability.
  
  
Line 8: Line 8:
  
 
==Requirement==
 
==Requirement==
Before you use Docker to develop, you have to install Docker on your platform. Please refer to [https://docs.docker.com/engine/installation/ 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''.<ref name="ref1" />
+
Before you use Docker to develop, you have to install Docker on your platform. Please refer to [https://docs.docker.com/engine/installation/ 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''.<ref name="ref3" />
  
 
==Usage==
 
==Usage==
 
===Get base image===
 
===Get base image===
It's easy to get the images we provided. You can use ''docker pull <IMAGE REPOSITORY>'' to get the images in the [[#Image List | image list]].
+
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
 
  $ docker pull advrisc/u12.04
Line 71: Line 71:
  
 
===Share data with host===
 
===Share data with host===
 +
There are two ways to share data with host OS.
 +
* data volume
 +
* docker cp
  
===BSP building===
 
  
===Copy data to host===
+
Use ''docker run'' with '''-v''' options to enable data volume. In the case below, we mount a host directory (/home/root) from your Docker daemon’s host into a container. So, you can access the contents in /home/adv in the container.
 +
$ docker run -it --name docker_test -v /home/root:/home/adv advrisc/u12.04 /bin/bash
 +
 +
adv@7bc2d878c870:~$
 +
 
 +
Alternatively, you can 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.
 +
 
 +
$ docker cp d0ab7f662fb3:/home/adv/test.jpg .
 +
 +
$ docker cp ./test.png d0ab7f662fb3:/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 d0ab7f662fb3
 +
d0ab7f662fb3
 +
 
 +
If you want to remove Docker base image, use ''docker rmi <IMAGE ID>''
 +
$ docker rmi advrisc/u12.04
  
===Remove container===
+
==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==
 
==Image List==
Line 94: Line 118:
 
==References==
 
==References==
 
<references>
 
<references>
  <ref name="ref1">[https://docs.docker.com/engine/installation/linux/ubuntulinux/ Docker Installation on Ubuntu]</ref>
+
  <ref name="ref1">[http://bodenr.blogspot.tw/2014/05/kvm-and-docker-lxc-benchmarking-with.html Differences between Docker, LXC & Hypervisor (Chinese)]</ref>
 +
<ref name="ref2">[http://blog.pierreroudier.net/2015/08/docker-vs-kvm-vs-native-performance-comparison/ Docker Performance]</ref>
 +
<ref name="ref3">[https://docs.docker.com/engine/installation/linux/ubuntulinux/ Docker Installation on Ubuntu]</ref>
 
</references>
 
</references>
 
+
* External Link
 +
# [https://philipzheng.gitbooks.io/docker_practice/content/index.html Docker Introduction (Chinese)]
  
 
[[Category:Technique]]
 
[[Category:Technique]]

Revision as of 08:27, 25 February 2016

Use Docker to set up build environment more safely & quickly

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

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

Using default tag: latest
latest: Pulling from advrisc/u12.04
f371838f5dfc: Pull complete
ba07dd60c647: Pull complete
5880097ae715: Pull complete
f4661df611e4: Pull complete
54a5be518f6c: Pull complete
e2bec7aca208: Pull complete
2329df4bbef8: Pull complete
8c316cbbf1ac: Pull complete
759306f82120: Pull complete
129b531714c2: Pull complete
9785b9285b43: Pull complete
4edbf4b599cd: Pull complete
6662a831b325: Pull complete
69b5c4a73004: Pull complete
2356632c3d7c: Pull complete
7de0ecf5853e: Pull complete
437e96edde13: Pull complete
71b22a0603c5: Pull complete
81f2b54bc89e: Pull complete
45223227ca23: Pull complete
e088fe2feb22: Pull complete
Digest: sha256:10f22a1cfbb657b8db267860773078fc09118604b421d47e260dac7c4fa04099
Status: Image is up to date for advrisc/u12.04:latest

You can check the image stored locally by docker images.

$ docker images
REPOSITORY                               TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
advrisc/u12.04                           latest              e088fe2feb22        59 minutes ago      1.438 GB

Create a container

You can run a container with a prompt by docker run. If you do not pull Docker base image first, it will try to download from the DockerHub repository.

$ docker run -it advrisc/u12.04 /bin/bash

adv@d0ab7f662fb3:~$

To leave a container, type exit to stop it or use Ctrl + P + Q to detach the container.

adv@d0ab7f662fb3:~$ exit
exit

You can check the container status by docker ps.

$ docker ps -a
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS                     PORTS           NAMES
d0ab7f662fb3        advrisc/u12.04       "/bin/bash"         3 minutes ago       Exited (0) 4 seconds ago                   clever_bartik

To enter the container again, you need to do docker start <CONTAINER ID> & docker attach <CONTAINER ID>.

$ docker start d0ab7f662fb3
d0ab7f662fb3

$ docker attach d0ab7f662fb3
adv@d0ab7f662fb3:~$

Share data with host

There are two ways to share data with host OS.

  • data volume
  • docker cp


Use docker run with -v options to enable data volume. In the case below, we mount a host directory (/home/root) from your Docker daemon’s host into a container. So, you can access the contents in /home/adv in the container.

$ docker run -it --name docker_test -v /home/root:/home/adv advrisc/u12.04 /bin/bash

adv@7bc2d878c870:~$

Alternatively, you can 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.

$ docker cp d0ab7f662fb3:/home/adv/test.jpg .

$ docker cp ./test.png d0ab7f662fb3:/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 d0ab7f662fb3
d0ab7f662fb3

If you want to remove Docker base image, use docker rmi <IMAGE ID>

$ docker rmi advrisc/u12.04

BSP Building

It's very easy to build our BSP in Docker environment.

  1. Get BSP source code
  2. Run a Docker container with data volume sharing for the BSP, or you can use docker cp to put BSP into the container.
  3. In the container, go to BSP folder and follow the same introductions as you do on normal computer.
  4. 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 latest Ubuntu 12.04 Freescale i.MX6 Yocto 1.5

References

  1. Differences between Docker, LXC & Hypervisor (Chinese)
  2. Docker Performance
  3. Docker Installation on Ubuntu
  • External Link
  1. Docker Introduction (Chinese)