Docker vs Vagrant
为了解决固件编译环境的种种问题,我们尝试了使用vagrant来创建一个编译环境的镜像,但是vagrant基于VM的实现导致了对于宿主机的要求很高,同时编译多个release耗费相当多的系统资源,并且严重拖慢编译速度。
所以我考虑用Docker来替代vagrant,Docker提供了足够的隔离,所以可以像一个虚拟机一样运行,但是非常轻且高效,能满足所有编译环境的需求。
Build RBE Image
# Build a docker image`mkdir docker-builder && cd docker-builder``rsync -av this_Dockerfile .``docker build -t release_name .`
Run It
# Run this docker image`docker run -itd -v tip_on_host:tip_on_container /bin/bash`# Access to the console`docker attach <CID or name>` or `docker exec -it <CID or name>`
Util
# How to get the CID or name`docker ps`# List all the image which avaiable in your host`docker images`
Dockerfile
FROM
指定base image
MAINTAINER
Author信息
LABEL
描述性的,不重要
RUN
运行一些命令
CMD
每个container时候启动的,只能有一个
ENV
设置环境变量
Attach or Exec
我们有两种方式来attach到container的TTY
docker attach <CID or name>docker exec -it <CID>
Attach会有个问题是如果从container中exit,那么container会被结束,而exec不会,但是exec每次执行会返回一个exit code,因为他是stdout到了stdin来得到tty结果的
配置文件
/etc/default/docker管理docker所有启动的配置
echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker
网络
docker的网络依赖于一个linux网桥docker0, 所以你也可以使用自己建立的网桥来处理docker container之间的网络
存储
docker支持建立数据容器,那么正常的容易可以通过--volume-from挂载数据容器
删除无效镜像
docker rmi $(docker images -f "dangling=true" -q)
FROM scratch
From Ubuntu:18.04Do something, build code or somethingFrom scratchCOPY build code /usr/local/bin/xxx
Tip
- docker —restart always 可以自动重启
- 清理 docker system prune —force
