Docker - noonecare/linux GitHub Wiki

  • docker 常见命令, 请查看我标签为 docker 的 gist。

  • docker 中重要的概念是: container, image, registry。 container 是虚拟的可执行环境,image 是创建 container 的镜像(菜谱)。创建镜像的方式有两种,docker commit 和 docker build。最常用的创建方式是 docker build 的方式,具体就是写 Dockerfile, 然后运行 docker build 命令创建image。registry 是远程仓库,本地的 images 可以 push 到远程,供其他人 pull 到本地使用。

Dockerfile 怎么写/DockerFile Command

  • FROM
  • 一般是从一个现成的镜像(比如操作系统的镜像)开始制造执行环境
  • USER
  • WORKDIR
  • RUN
  • CMD
  • ENTRYPOINT
  • ENVIROMENT
  • ADD
  • COPY
  • COLUMN
    • 我举个场景,就是虚拟环境需要使用 Hive 查询一组数据,这组数据在宿主主机上,如果你再在 docker container 中复制这样一份数据,浪费磁盘又浪费时间。所以你可以把宿主的文件挂载到 docker 虚拟机的指定目录下。这就是 column。
  • PROT Mapping
  • port expose
  • registry

最好直接用 pycharm 写 Dockerfile, 有自动补全的功能,大致记一下 Dockerfile 的 instructions 即可。

multi-container application stack

  • 我一直认为 container 是个沙箱,主要是为了隔离各个应用。但是实际上很多 container 就包含一个服务,然后可以通过 link 和 volumes 的方式把多个 containers 串在一起提供服务。查看The Docker Book 第 6 章中 nodejs 的代码, 在连接 container 时,有两个重要的概念。

  • link

创建 Container(称为 A) 时,可以指定 --link B,这样 B 中 port 对于 A 是开放的。而且在 A 中会多出一些环境变量,这些环境变量以 B_ 开头其实是 B container 环境变量。除此之外, A 的 /etc/hosts 文件中会有 B ip_address 的记录(这样 A 可以通过 B container 的别名与 B 沟通)

  • volume

共享文件用的

Docker RestFul API

Docker 有套 RestFulAPI 的接口(和 Docker 的 CMD 指定完成相同的功能)。这样,我们就可以远程的调用,使用各种语言调用 Docker。

docker compose: docker-compose 的开发者嫌弃每次创建 container 的操作命令太长,就发明创造了 docker-compose, 把 docker run 的命令,写成配置文件。每次创建 container 只需要敲命令 docker-compose up 即可(如果要把container 放到后台执行,使用 docker-compose up -d)。每次停止 container, 只需要输入 docker-compose stop 即可。不过使用 docker-compose 就需要写 docekr-compose.yml , docker-compose.xml 中记录了 container 之间的 link, port, volumn 内容。

kubernetes: kubernetes deployment, scale and monitoring containers.

持续集成

jenkins

软件工程中共性的问题:版本控制,测试,部署。 持续集成指的是自动化的机制使得团队中每个人的分支可以安全的(一般是通过尽可能多的自动测试来保证安全)合并到 develop, master, release 分支。 除了持续集成,还有持续交付,持续部署的概念。在我眼中这两个概念是一致。就是可以自动地安全地提供可执行代码给客户(为了给用户提供统一的使用接口,常常使用连接文件,连接文件指向不同的版本,这样就可以方便的在不同版本之间切换)使用,出现问题可以安全快速地回滚到之前的版本。

明显要实现自动化就需要工具,实现持续集成的工具有很多比如 TeamCity, jenkins。为了提供独立的可执行环境会用到 docker, 为了版本控制,会用到 CVS(常见是 git)。