Docker 快速部署代码

docker

Hot Code Issue

Docker实践中,最麻烦的一个问题就是代码,按照Docker的理念:

  • InfrastructureCode一起组成完整的产品。但现实是Infrastructure的改动是年/月级的,而Code的发布是天/小时级的。
  • Image Build 中有Layer。但Docker鼓励的流程是 Build > Ship > Run,也就是使用同一套环境,通过Docker Registry构建。实际用来下,一个Rails环境的Image差不多1 G左右。如果每次commit code都重新build的话,那ship的成本实在是太高了。

Solution:

Docker 中提供了Volumes特性,可以在host和Docker间共享数据,通过尝试,发现这最佳实践:

将Code发布在Host上,

目标,用Docker实现Rails的部署。解决之前的一台EC只能部署一个Web App问题。

docker

Q1: 能不能在Docker服务器上装Ruby,所有Docker共用?

Q:发布时能不能用Chef发布

Q:Docker中如何装Chef?

初始化 & 升级Docker

查看系统版本:

1
2
# cat /etc/issue
Ubuntu 14.04 LTS \n \l

内核版本:

1
2
~# uname -a
Linux iZ2 3.13.0-30-generic #54-Ubuntu SMP Mon Jun 9 22:45:01 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Docker 版本

1
2
3
4
5
6
7
8
9
10
11
$ docker version
Client version: 1.2.0
Client API version: 1.14
Go version (client): go1.3.1
Git commit (client): fa7b24f
OS/Arch (client): linux/amd64
Server version: 1.2.0
Server API version: 1.14
Go version (server): go1.3.1
Git commit (server): fa7b24f

升级 Docker 到最新(1.3.1)

1
2
$ sudo apt-get update
$ sudo apt-get install lxc-docker

下载 Ubuntu 14.04 64 的Image

Download a Docker Container

1
2
# Let’s begin using Docker! Download the fedora Docker image:
$ docker pull ubuntu

Run a Docker Container
Now, to setup a basic ubuntu container with a bash shell, we just run one command. docker run will run a command in a new container, -i attaches stdin and stdout, -t allocates a tty, and we’re using the standard ubuntu container.

1
docker run -i -t ubuntu /bin/bash

Docker + Chef + Capistrano

REF::