SlideShare une entreprise Scribd logo
1  sur  25
Quick setup of the docker-
based development
environment for cross-
compilation
How not to pass the same quest every time
Without any single line in C ++ :)
Act of compiling code for one computer system (often known as the target) on an
another system, called the host.
What is cross-compilation?
What we do
Set-top boxes(STB) for IPTV/OTT:
● ARM/MIPS/SuperH
● different version of linux;
● different version of gcc;
● different SDKs, libraries;
Issue
● set of different target platforms;
● setting up developer environment is complex and time-consuming;
● SDK and libraries often change; the need to maintain a single environment for
all developers under a specific platform;
● issue “works on my machine”;
● testing:
○ environment versions(different toolchains, SDK versions, etc) for specific platform;
○ continuous integration for all target platforms;
How it was
There are powerful servers with established developer’s environment(one server -
one environment), all developers work on these servers(ssh + nfs/samba/sshfs).
● pros:
○ there is single environment for every developer;
○ immediately get into the ready environment, programmers can code, not configure;
● cons:
○ low convenience of work: network bandwidth is clearly worse than disk bandwidth;
○ there is no ability to work when network is down;
○ all developers share resources of server; more developers - more servers;
How it ended up
Containerization of the environment:
● pros:
○ there is single environment for every developer;
○ immediately get into the ready environment, programmers can code, not configure;
○ lightweight launch of environment, parallel work of several environments;
○ self-sufficiency, independent work;
○ versioning, easily switch between environments;
○ organized CI;
● cons:
○ containers aren’t crossplatform, all development cycle is linux-based;
Containerization, also known as operating-system-level virtualization, refers to an
operating system feature in which the kernel allows the existence of multiple
isolated user-space instances.
● LXC
● Docker
● OpenVZ
● Solaris Containers
● a lot of them...
Why Docker
● short answer: infrastructure;
● big community, mature product;
● cross-platform: works on Windows, Linux, MacOS;
● DockerHub - GitHub in containers world, big quantity of ready images;
● Docker Registry - server that stores and distributes docker images; I didn’t
find such feature in case with other alternatives;
Important: the fact that the Docker is cross-platform does not mean that the
containers are cross-platform.
What is Docker?
Three components:
● Docker-image is read-only template. Images is component of docker’s
build.
● Docker Registry stores images. There are public and private(custom)
registries. Public registry is Docker Hub. Registry is component of
distributing.
● Containers. Each container is created from image. Containers may be
created, started, stopped, moved or removed. Each container is isolated.
Containers are component of work.
alex@alex-pc:~/tmp$ touch hello_from_host
#command on host
alex@alex-pc:~/tmp$ docker run -it --rm -v `pwd`:/from_host ubuntu:14.04 bash
root@e..e9:/# cd /from_host/ && ls && touch hello_from_docker && exit #inside
hello_from_host
alex@alex-pc:~/tmp$ ls
#again on host
hello_from_docker hello_from_host
Where:
● docker run -it - create and run new container interactive(STDIN, pseudo-TTY);
● --rm - remove container after stopping the process running in it;
● -v `pwd`:/from_host - what mount:where mount; current host path “mount” inside container by
/from_host;
● ubuntu:14.04 - full name of image based on which new container runs; if wasn’t mentioned tag(after
colon), will use “latest”;
● bash - a process that runs in the container; it can be set of commands.
Important:
● nothing valuable/sensitive should be stored in containers;
● docker is process oriented, if the process inside the container is stopped - the container is stopped;
How to use: bash inside container
How to use: launch and work
Crosscompiling:
docker run --rm -it -v /path_on_host:/path_inside_container
platform_image:v1.1 “cd /path_inside_container && make/cmake/whatever”
Debugging:
docker run --rm -it -v /path_on_host:/path_inside_container -p 12345:12345
platform_image:v1.1 “cd /path_inside_container && gdb”
Nobody uses containers like above in our company:)
How to use: script-wrapper over the docker
● the same everywhere: for developers and for CI;
● placed in git together with a project;
● solves the following issues:
○ there is no need to learn docker for user purposes;
○ pulls the latest actual image of the environment for the appropriate target;
○ create and run new container;
○ mounts the project’s dir inside a container;
○ creates “on the fly” user inside container equal host user;
○ setup correct work of git inside a container;
○ checks and removes “dangling” layers/images, stopped containers on host;
One of the 1st versions of script-wrapper:
#!/bin/bash
DOCKER_IMG_NAME="hub.docker.company.com:5000/platform_image:latest"
docker pull ${DOCKER_IMG_NAME} #always pull the latest version
self_script_name="$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")"
src_dir=${1?Usage: ${self_script_name} path_to_sources}
resolved_dir=$(readlink -f $src_dir) #project directory on host
hint_msg=$(cat <<EOF
################################################# #just info message
#The source is available at "/src". #
#Type "Ctrl+D" to exit from container. #
#docker-user password :"pas" #
#root password :"root" #
#################################################
EOF)
bash_cmd=$(cat <<EOF echo '${hint_msg}' && bash EOF)
docker run -it --rm -v ${resolved_dir}:/src -e LOCAL_USER_ID=`id -u ${USER}`
${DOCKER_IMG_NAME} bash -c "${bash_cmd}" #create and start new container
How to use: IDE integration
There is something like “custom build steps” in the most of modern IDEs, where
you can define your commands for building and debugging.
Most of devs in our company are using QtCreator, the script-wrapper has been
integrated there seamlessly, all output from docker is accessible by IDE.
One big issue: IDE doesn’t have access to container’s filesystem, so there is no
syntax highlight of all functions, classes, etc provided by SDK and libraries packed
in container.
How to use: building docker image
● manually - uncomfortable, suitable for something easy or experimental;
● dockerfile - makefile in docker’s world, it is enough in most cases;
● bash+dockerfile - it is possible to implement any complex assembly logic;
● there are 2 versions of same image:
○ docker_image:latest_debug - just dump of everything that was generated during the build
“world”; big size(⩾10 Gb), required by devs who change base things: SDK, linux, etc;
○ docker_image:latest - cleared latest_debug version, much smaller, include only
necessary for developing under target(toolchain, libs&&headers, docs); used by all developers
and CI;
● all images based on ubuntu:14.04;
● after some time CI was made to build docker images;
How to use: distributing docker images
Docker Registry is docker image too!:)
● install Docker on server;
● launch Docker Registry, without SSL:
docker run -d -p 5000:5000 -v /host_path:/var/lib/registry --name registry
registry:2
● push freshly built docker image from build-master PC to Docker Registry:
○ be sure to put the tag on the image accordingly your private Docker
Registry:
docker tag image_name:ver registry_ip_addr:5000/image_name:ver
○ push/upload image to storage:
docker push registry_ip_addr:5000/image_name:ver
○ pull/download image from Docker Registry:
docker pull registry_ip_addr:5000/image_name:ver
How to use: collecting everything together
Algorithm for entering a new developer into the project:
● git clone <repo_url> && cd project_dir
● ./dockerBuild.sh platformName mode path_to_project optional_cmd:
○ dockerBuild.sh - the script-wrapper, it automatically pulls from the registry required image;
○ platformName - name of target for which required to build the project;
○ mode - work mode; there are two: dev и CI. The 1st one - developer mode: receive bash with
cwd in project dir, where we can build, work with git and so on. 2nd mode runs automatic build
- uses on CI;
○ path_to_project - obviously, path to project, in this case is “.”(dot, current path);
○ optional_cmd - optional, it have sense in dev mode only: command(s) to immediate execute
in container and exit;
● copy output binaries to target and run;
● ???????
● PROFIT!
● by default all processes work with root privileges in the container;
● IDE doesn’t have access to container’s filesystem, so there is no syntax
highlight of all functions, classes, etc provided by SDK and libraries;
● it is hard to understand the difference between images of the same
environment, but with a different build date;
● Docker Registry doesn’t have web ui. There is REST API;
● I was unable to configure the access rights in the Docker Registry. Typical
scenario: anonymous pull and authorized push;
Troubles
How to use: Continuous Integration
The ease of deployment of the environment on any Linux "provoked" a logical
continuation in the form of Continuous Integration.
Main components:
● GitLab - git-repository manager;
● Docker Registry - docker images storage;
● RTS(remote test system) - our self(Infomir) test system of STB;
● GitLab Runner - server, which "glues" all, implements the CI:
○ received tasks from GitLab;
○ pulls latest actual images from Docker Registry;
○ builds projects;
○ builds docker images, validates them, pushes to the Docker Registry;
○ runs nightly tests on STBs;
Summary
● extremely reduced the time for unfolding environments, it became easy to
move "in time" between different versions of same environment;
● unloaded the central servers, involved idle local capacities of the developers
computers;
● automated repeatable build of SDK/environments;
● CI was put into operation for major projects and for building of docker images;
● in general the time costs have decreased - everyone is happy;
Additional resources
● http://alexprivalov.org/docker-cpp - text version of report (in russian)
● https://docs.gitlab.com/ce/user/project/container_registry.html - GitLab
Container Registry
Thank you for attention!:)

Contenu connexe

Tendances

Rootless Kubernetes
Rootless KubernetesRootless Kubernetes
Rootless KubernetesAkihiro Suda
 
[DockerCon 2019] Hardening Docker daemon with Rootless mode
[DockerCon 2019] Hardening Docker daemon with Rootless mode[DockerCon 2019] Hardening Docker daemon with Rootless mode
[DockerCon 2019] Hardening Docker daemon with Rootless modeAkihiro Suda
 
Use the Source or Join the Dark Side: differences between Docker Community an...
Use the Source or Join the Dark Side: differences between Docker Community an...Use the Source or Join the Dark Side: differences between Docker Community an...
Use the Source or Join the Dark Side: differences between Docker Community an...Jérôme Petazzoni
 
Comparing Next-Generation Container Image Building Tools
 Comparing Next-Generation Container Image Building Tools Comparing Next-Generation Container Image Building Tools
Comparing Next-Generation Container Image Building ToolsAkihiro Suda
 
Docker and DevOps --- new IT culture
Docker and DevOps --- new IT cultureDocker and DevOps --- new IT culture
Docker and DevOps --- new IT cultureTerry Chen
 
Docker at Djangocon 2013 | Talk by Ken Cochrane
Docker at Djangocon 2013 | Talk by Ken CochraneDocker at Djangocon 2013 | Talk by Ken Cochrane
Docker at Djangocon 2013 | Talk by Ken CochranedotCloud
 
Introduction to docker and oci
Introduction to docker and ociIntroduction to docker and oci
Introduction to docker and ociRomain Schlick
 
The State of Rootless Containers
The State of Rootless ContainersThe State of Rootless Containers
The State of Rootless ContainersAkihiro Suda
 
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @GuidewireIntroduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @GuidewiredotCloud
 
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins Mando Stam
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to dockerJustyna Ilczuk
 
Docker in development (Story)
Docker in development (Story)Docker in development (Story)
Docker in development (Story)Quan Nguyen
 

Tendances (19)

Dockerized maven
Dockerized mavenDockerized maven
Dockerized maven
 
Rootless Kubernetes
Rootless KubernetesRootless Kubernetes
Rootless Kubernetes
 
Tech Talk - Vagrant
Tech Talk - VagrantTech Talk - Vagrant
Tech Talk - Vagrant
 
JOSA TechTalk: Taking Docker to Production
JOSA TechTalk: Taking Docker to ProductionJOSA TechTalk: Taking Docker to Production
JOSA TechTalk: Taking Docker to Production
 
[DockerCon 2019] Hardening Docker daemon with Rootless mode
[DockerCon 2019] Hardening Docker daemon with Rootless mode[DockerCon 2019] Hardening Docker daemon with Rootless mode
[DockerCon 2019] Hardening Docker daemon with Rootless mode
 
Use the Source or Join the Dark Side: differences between Docker Community an...
Use the Source or Join the Dark Side: differences between Docker Community an...Use the Source or Join the Dark Side: differences between Docker Community an...
Use the Source or Join the Dark Side: differences between Docker Community an...
 
ISC HPCW talks
ISC HPCW talksISC HPCW talks
ISC HPCW talks
 
Comparing Next-Generation Container Image Building Tools
 Comparing Next-Generation Container Image Building Tools Comparing Next-Generation Container Image Building Tools
Comparing Next-Generation Container Image Building Tools
 
Docker_AGH_v0.1.3
Docker_AGH_v0.1.3Docker_AGH_v0.1.3
Docker_AGH_v0.1.3
 
Docker and DevOps --- new IT culture
Docker and DevOps --- new IT cultureDocker and DevOps --- new IT culture
Docker and DevOps --- new IT culture
 
Docker at Djangocon 2013 | Talk by Ken Cochrane
Docker at Djangocon 2013 | Talk by Ken CochraneDocker at Djangocon 2013 | Talk by Ken Cochrane
Docker at Djangocon 2013 | Talk by Ken Cochrane
 
Introduction to docker and oci
Introduction to docker and ociIntroduction to docker and oci
Introduction to docker and oci
 
Surveillance on slam technology
Surveillance on slam technologySurveillance on slam technology
Surveillance on slam technology
 
The State of Rootless Containers
The State of Rootless ContainersThe State of Rootless Containers
The State of Rootless Containers
 
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @GuidewireIntroduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
 
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Docker in development (Story)
Docker in development (Story)Docker in development (Story)
Docker in development (Story)
 
From zero to Docker
From zero to DockerFrom zero to Docker
From zero to Docker
 

Similaire à Настройка окружения для кросскомпиляции проектов на основе docker'a

Docker primer and tips
Docker primer and tipsDocker primer and tips
Docker primer and tipsSamuel Chow
 
Powercoders · Docker · Fall 2021.pptx
Powercoders · Docker · Fall 2021.pptxPowercoders · Docker · Fall 2021.pptx
Powercoders · Docker · Fall 2021.pptxIgnacioTamayo2
 
Introduction to Docker and Containers
Introduction to Docker and ContainersIntroduction to Docker and Containers
Introduction to Docker and ContainersDocker, Inc.
 
Accelerate your development with Docker
Accelerate your development with DockerAccelerate your development with Docker
Accelerate your development with DockerAndrey Hristov
 
Accelerate your software development with Docker
Accelerate your software development with DockerAccelerate your software development with Docker
Accelerate your software development with DockerAndrey Hristov
 
From development environments to production deployments with Docker, Compose,...
From development environments to production deployments with Docker, Compose,...From development environments to production deployments with Docker, Compose,...
From development environments to production deployments with Docker, Compose,...Jérôme Petazzoni
 
Docker module 1
Docker module 1Docker module 1
Docker module 1Liang Bo
 
Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned  Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned RightScale
 
DevAssistant, Docker and You
DevAssistant, Docker and YouDevAssistant, Docker and You
DevAssistant, Docker and YouBalaBit
 
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special EditionIntroduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special EditionJérôme Petazzoni
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 applicationRoman Rodomansky
 
Techtalks: taking docker to production
Techtalks: taking docker to productionTechtalks: taking docker to production
Techtalks: taking docker to productionmuayyad alsadi
 
DCEU 18: Building Your Development Pipeline
DCEU 18: Building Your Development PipelineDCEU 18: Building Your Development Pipeline
DCEU 18: Building Your Development PipelineDocker, Inc.
 
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsI Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsMichael Lange
 
A Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and ContainersA Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and ContainersDocker, Inc.
 
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme PetazzoniWorkshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme PetazzoniTheFamily
 
Introduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" EditionIntroduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" EditionJérôme Petazzoni
 
Introduction to Docker - Learning containerization XP conference 2016
Introduction to Docker - Learning containerization  XP conference 2016Introduction to Docker - Learning containerization  XP conference 2016
Introduction to Docker - Learning containerization XP conference 2016XP Conference India
 

Similaire à Настройка окружения для кросскомпиляции проектов на основе docker'a (20)

Docker primer and tips
Docker primer and tipsDocker primer and tips
Docker primer and tips
 
Powercoders · Docker · Fall 2021.pptx
Powercoders · Docker · Fall 2021.pptxPowercoders · Docker · Fall 2021.pptx
Powercoders · Docker · Fall 2021.pptx
 
Introduction to Docker and Containers
Introduction to Docker and ContainersIntroduction to Docker and Containers
Introduction to Docker and Containers
 
Accelerate your development with Docker
Accelerate your development with DockerAccelerate your development with Docker
Accelerate your development with Docker
 
Accelerate your software development with Docker
Accelerate your software development with DockerAccelerate your software development with Docker
Accelerate your software development with Docker
 
From development environments to production deployments with Docker, Compose,...
From development environments to production deployments with Docker, Compose,...From development environments to production deployments with Docker, Compose,...
From development environments to production deployments with Docker, Compose,...
 
Docker module 1
Docker module 1Docker module 1
Docker module 1
 
Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned  Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned
 
DevAssistant, Docker and You
DevAssistant, Docker and YouDevAssistant, Docker and You
DevAssistant, Docker and You
 
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special EditionIntroduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 application
 
Techtalks: taking docker to production
Techtalks: taking docker to productionTechtalks: taking docker to production
Techtalks: taking docker to production
 
DCEU 18: Building Your Development Pipeline
DCEU 18: Building Your Development PipelineDCEU 18: Building Your Development Pipeline
DCEU 18: Building Your Development Pipeline
 
Docker Ecosystem on Azure
Docker Ecosystem on AzureDocker Ecosystem on Azure
Docker Ecosystem on Azure
 
Docker Basics
Docker BasicsDocker Basics
Docker Basics
 
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsI Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
 
A Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and ContainersA Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and Containers
 
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme PetazzoniWorkshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
 
Introduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" EditionIntroduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" Edition
 
Introduction to Docker - Learning containerization XP conference 2016
Introduction to Docker - Learning containerization  XP conference 2016Introduction to Docker - Learning containerization  XP conference 2016
Introduction to Docker - Learning containerization XP conference 2016
 

Plus de corehard_by

C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...corehard_by
 
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...corehard_by
 
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений ОхотниковC++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотниковcorehard_by
 
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр ТитовC++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титовcorehard_by
 
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...corehard_by
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
 
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...corehard_by
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...corehard_by
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...corehard_by
 
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...corehard_by
 
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...corehard_by
 
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел ФилоновC++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филоновcorehard_by
 
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan ČukićC++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukićcorehard_by
 
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia KazakovaC++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakovacorehard_by
 
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон ПолухинC++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухинcorehard_by
 
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...corehard_by
 
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019corehard_by
 
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019corehard_by
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019corehard_by
 

Plus de corehard_by (20)

C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
 
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
 
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений ОхотниковC++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
 
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр ТитовC++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
 
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
 
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
 
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
 
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
 
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел ФилоновC++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
 
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan ČukićC++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
 
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia KazakovaC++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
 
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон ПолухинC++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
 
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
 
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
 
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
 

Dernier

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 

Dernier (20)

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

Настройка окружения для кросскомпиляции проектов на основе docker'a

  • 1. Quick setup of the docker- based development environment for cross- compilation How not to pass the same quest every time Without any single line in C ++ :)
  • 2. Act of compiling code for one computer system (often known as the target) on an another system, called the host. What is cross-compilation?
  • 3. What we do Set-top boxes(STB) for IPTV/OTT: ● ARM/MIPS/SuperH ● different version of linux; ● different version of gcc; ● different SDKs, libraries;
  • 4. Issue ● set of different target platforms; ● setting up developer environment is complex and time-consuming; ● SDK and libraries often change; the need to maintain a single environment for all developers under a specific platform; ● issue “works on my machine”; ● testing: ○ environment versions(different toolchains, SDK versions, etc) for specific platform; ○ continuous integration for all target platforms;
  • 5. How it was There are powerful servers with established developer’s environment(one server - one environment), all developers work on these servers(ssh + nfs/samba/sshfs). ● pros: ○ there is single environment for every developer; ○ immediately get into the ready environment, programmers can code, not configure; ● cons: ○ low convenience of work: network bandwidth is clearly worse than disk bandwidth; ○ there is no ability to work when network is down; ○ all developers share resources of server; more developers - more servers;
  • 6. How it ended up Containerization of the environment: ● pros: ○ there is single environment for every developer; ○ immediately get into the ready environment, programmers can code, not configure; ○ lightweight launch of environment, parallel work of several environments; ○ self-sufficiency, independent work; ○ versioning, easily switch between environments; ○ organized CI; ● cons: ○ containers aren’t crossplatform, all development cycle is linux-based;
  • 7. Containerization, also known as operating-system-level virtualization, refers to an operating system feature in which the kernel allows the existence of multiple isolated user-space instances. ● LXC ● Docker ● OpenVZ ● Solaris Containers ● a lot of them...
  • 8. Why Docker ● short answer: infrastructure; ● big community, mature product; ● cross-platform: works on Windows, Linux, MacOS; ● DockerHub - GitHub in containers world, big quantity of ready images; ● Docker Registry - server that stores and distributes docker images; I didn’t find such feature in case with other alternatives; Important: the fact that the Docker is cross-platform does not mean that the containers are cross-platform.
  • 9. What is Docker? Three components: ● Docker-image is read-only template. Images is component of docker’s build. ● Docker Registry stores images. There are public and private(custom) registries. Public registry is Docker Hub. Registry is component of distributing. ● Containers. Each container is created from image. Containers may be created, started, stopped, moved or removed. Each container is isolated. Containers are component of work.
  • 10.
  • 11. alex@alex-pc:~/tmp$ touch hello_from_host #command on host alex@alex-pc:~/tmp$ docker run -it --rm -v `pwd`:/from_host ubuntu:14.04 bash root@e..e9:/# cd /from_host/ && ls && touch hello_from_docker && exit #inside hello_from_host alex@alex-pc:~/tmp$ ls #again on host hello_from_docker hello_from_host Where: ● docker run -it - create and run new container interactive(STDIN, pseudo-TTY); ● --rm - remove container after stopping the process running in it; ● -v `pwd`:/from_host - what mount:where mount; current host path “mount” inside container by /from_host; ● ubuntu:14.04 - full name of image based on which new container runs; if wasn’t mentioned tag(after colon), will use “latest”; ● bash - a process that runs in the container; it can be set of commands. Important: ● nothing valuable/sensitive should be stored in containers; ● docker is process oriented, if the process inside the container is stopped - the container is stopped; How to use: bash inside container
  • 12. How to use: launch and work Crosscompiling: docker run --rm -it -v /path_on_host:/path_inside_container platform_image:v1.1 “cd /path_inside_container && make/cmake/whatever” Debugging: docker run --rm -it -v /path_on_host:/path_inside_container -p 12345:12345 platform_image:v1.1 “cd /path_inside_container && gdb” Nobody uses containers like above in our company:)
  • 13. How to use: script-wrapper over the docker ● the same everywhere: for developers and for CI; ● placed in git together with a project; ● solves the following issues: ○ there is no need to learn docker for user purposes; ○ pulls the latest actual image of the environment for the appropriate target; ○ create and run new container; ○ mounts the project’s dir inside a container; ○ creates “on the fly” user inside container equal host user; ○ setup correct work of git inside a container; ○ checks and removes “dangling” layers/images, stopped containers on host;
  • 14. One of the 1st versions of script-wrapper: #!/bin/bash DOCKER_IMG_NAME="hub.docker.company.com:5000/platform_image:latest" docker pull ${DOCKER_IMG_NAME} #always pull the latest version self_script_name="$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")" src_dir=${1?Usage: ${self_script_name} path_to_sources} resolved_dir=$(readlink -f $src_dir) #project directory on host hint_msg=$(cat <<EOF ################################################# #just info message #The source is available at "/src". # #Type "Ctrl+D" to exit from container. # #docker-user password :"pas" # #root password :"root" # ################################################# EOF) bash_cmd=$(cat <<EOF echo '${hint_msg}' && bash EOF) docker run -it --rm -v ${resolved_dir}:/src -e LOCAL_USER_ID=`id -u ${USER}` ${DOCKER_IMG_NAME} bash -c "${bash_cmd}" #create and start new container
  • 15. How to use: IDE integration There is something like “custom build steps” in the most of modern IDEs, where you can define your commands for building and debugging. Most of devs in our company are using QtCreator, the script-wrapper has been integrated there seamlessly, all output from docker is accessible by IDE. One big issue: IDE doesn’t have access to container’s filesystem, so there is no syntax highlight of all functions, classes, etc provided by SDK and libraries packed in container.
  • 16. How to use: building docker image ● manually - uncomfortable, suitable for something easy or experimental; ● dockerfile - makefile in docker’s world, it is enough in most cases; ● bash+dockerfile - it is possible to implement any complex assembly logic; ● there are 2 versions of same image: ○ docker_image:latest_debug - just dump of everything that was generated during the build “world”; big size(⩾10 Gb), required by devs who change base things: SDK, linux, etc; ○ docker_image:latest - cleared latest_debug version, much smaller, include only necessary for developing under target(toolchain, libs&&headers, docs); used by all developers and CI; ● all images based on ubuntu:14.04; ● after some time CI was made to build docker images;
  • 17.
  • 18. How to use: distributing docker images Docker Registry is docker image too!:) ● install Docker on server; ● launch Docker Registry, without SSL: docker run -d -p 5000:5000 -v /host_path:/var/lib/registry --name registry registry:2 ● push freshly built docker image from build-master PC to Docker Registry: ○ be sure to put the tag on the image accordingly your private Docker Registry: docker tag image_name:ver registry_ip_addr:5000/image_name:ver ○ push/upload image to storage: docker push registry_ip_addr:5000/image_name:ver ○ pull/download image from Docker Registry: docker pull registry_ip_addr:5000/image_name:ver
  • 19. How to use: collecting everything together Algorithm for entering a new developer into the project: ● git clone <repo_url> && cd project_dir ● ./dockerBuild.sh platformName mode path_to_project optional_cmd: ○ dockerBuild.sh - the script-wrapper, it automatically pulls from the registry required image; ○ platformName - name of target for which required to build the project; ○ mode - work mode; there are two: dev и CI. The 1st one - developer mode: receive bash with cwd in project dir, where we can build, work with git and so on. 2nd mode runs automatic build - uses on CI; ○ path_to_project - obviously, path to project, in this case is “.”(dot, current path); ○ optional_cmd - optional, it have sense in dev mode only: command(s) to immediate execute in container and exit; ● copy output binaries to target and run; ● ??????? ● PROFIT!
  • 20. ● by default all processes work with root privileges in the container; ● IDE doesn’t have access to container’s filesystem, so there is no syntax highlight of all functions, classes, etc provided by SDK and libraries; ● it is hard to understand the difference between images of the same environment, but with a different build date; ● Docker Registry doesn’t have web ui. There is REST API; ● I was unable to configure the access rights in the Docker Registry. Typical scenario: anonymous pull and authorized push; Troubles
  • 21. How to use: Continuous Integration The ease of deployment of the environment on any Linux "provoked" a logical continuation in the form of Continuous Integration. Main components: ● GitLab - git-repository manager; ● Docker Registry - docker images storage; ● RTS(remote test system) - our self(Infomir) test system of STB; ● GitLab Runner - server, which "glues" all, implements the CI: ○ received tasks from GitLab; ○ pulls latest actual images from Docker Registry; ○ builds projects; ○ builds docker images, validates them, pushes to the Docker Registry; ○ runs nightly tests on STBs;
  • 22.
  • 23. Summary ● extremely reduced the time for unfolding environments, it became easy to move "in time" between different versions of same environment; ● unloaded the central servers, involved idle local capacities of the developers computers; ● automated repeatable build of SDK/environments; ● CI was put into operation for major projects and for building of docker images; ● in general the time costs have decreased - everyone is happy;
  • 24. Additional resources ● http://alexprivalov.org/docker-cpp - text version of report (in russian) ● https://docs.gitlab.com/ce/user/project/container_registry.html - GitLab Container Registry
  • 25. Thank you for attention!:)