项目部署方式对比
传统部署:
- 部署非常慢;
- 成本非常高;
- 资源浪费;
- 难于迁移和扩展;
- 可能会被限定硬件厂商。
虚拟化部署
- 资源池:实现物理资源层面的隔离,物理机资源分配到不同虚拟机,可部署多个应用;
- 容易扩展:增加物理机/增加虚拟机;
- 容易云化:亚马逊AWS、阿里云;
- 完整的操作系统,消耗资源较多。
容器部署
- 对软件及其依赖标准化打包,应用之间相互隔离、共享一个OS Kernel,可以运行在多种操作系统上;
- 由于只实现应用层面上的隔离,消耗资源较少。
安装
直接安装(默认Centos环境,否则建议Vargrant + VirtualBox搭建虚拟环境)
yum remove docker docker-common docker-selinux docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2 epel-release
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum clean all
yum update
yum makecache
yum install docker-ce # CentOS 6: yum -y install docker-io
systemctl start docker
docker run hello-world
Docker Machine:创建运行Docker的VM环境
docker-machine version
docker-machine create demo
docker-machine ls
docker-machine ssh demo
通过本地命令管理Docker Machine
docker-machine env demo
eval $(docker-machine env demo)
docker version
架构
Client - Docker Host - Registry
- Docker提供了一个开发,打包,运行app的平台
- Docker引擎(后台进程 + REST API Server + CLI接口)把app与底层infrastructure隔离开来
底层技术支持:
- Namespaces:隔离pid,net,ipc,mnt,uts
- Control groups:做资源限制
- Union file systems:Container和image的分层
Vagrant + VirtualBox部署虚拟化开发环境
VirtualBox
yum install -y tigervnc* VirtualBox-5.2
service vboxdrv setup
Vagrant
# Vagrant Cloud: https://app.vagrantup.com/boxes/search
wget https://releases.hashicorp.com/vagrant/2.1.2/vagrant_2.1.2_x86_64.rpm
rpm -ivh ...
mkdir Master && cd Master
vagrant init centos/7 # 创建虚拟机(如果没有对应镜像会自动下载)
vagrant up # 如要使用VMWare可指定--provider=vmware_fusion
vagrant ssh
其他常用命令:
vagrant init # 初始化
vagrant up # 启动
vagrant halt # 关闭
vagrant reload # 重启
vagrant ssh # 连接
vagrant status # 查看运行状态
vagrant destroy # 销毁
Vagrant &Docker
创建四台CentOS,三台Slave,一台Master
mkdir Master Slave1 Slave2 Slave3
cd Master && vagrant init centos/7 && vagrant up
cd Slave1 && vagrant init centos/7 && vagrant up
cd Slave2 && vagrant init centos/7 && vagrant up
cd Slave3 && vagrant init centos/7 && vagrant up
更推荐通过Vagrantfile创建,自动安装依赖(以Master为例):
vim Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.network "private_network", ip: "10.0.3.110"
config.vm.provision "shell", inline: <<-SHELL
sudo su
service network restart
yum -y install net-tools vim wget
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl start docker
echo "10.0.3.110 Master" >> /etc/hosts
echo "10.0.3.111 Slave1" >> /etc/hosts
echo "10.0.3.112 Slave2" >> /etc/hosts
echo "Master" > /etc/hostname
hostname Master
wget http://apache.mirrors.pair.com/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz \
-O /usr/local/src/zookeeper-3.4.13.tar.gz
tar -zxf /usr/local/src/zookeeper-3.4.13.tar.gz
SHELL
end
vagrant reload # 修改Vagrantfile后需要重新加载
vagrant ssh
ifconfig
sudo docker run hello-world
创建好一台虚拟机,把Vagrantfile复制一份、修改ip地址和域名,在指定目录下执行vagrant up
即可创建其他相同环境的虚拟机,非常方便。
配置好开发环境、退出并关闭后可以对环境打包:
vagrant package # 生成一个package.box文件,只要添加这个box 并用其初始化自己的目录就能得到相同的开发环境
一些资料
- Docker Labs: https://github.com/docker/labs
- Docker Hub: https://hub.docker.com/
- Docker Docs: https://docs.docker.com/
- Vagrant Cloud: https://app.vagrantup.com/boxes/search
- Vagrant Docs: https://www.vagrantup.com/docs/index.html
网友评论