文档章节

基于 docker 的个人网站部署

 东昕
发布于 2014/06/24 23:32
字数 1338
阅读 1602
收藏 25
点赞 0
评论 0

vps个人网站迁移的问题

4月份的时候,现在的 vps 提供商升级了硬件配置,为了充分使用vps的资源,我只好重装了操作系统。

本来计划今年把个人的vps主机从国外迁回来,所以为了方便后面的迁移,我把主机上的服务都部署到了 docker 创建的容器环境中,方便后面迁移。

使用了一段时间,运行比较稳定。


docker 简单介绍

Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,可以把整个环境部署到里面,然后打包发放。这个打包包括了容器的操作系统环境,在另一台安装了docker的系统上可以导入镜像文件运行。

LXC 旨在提供一个共享kernel的 OS 级虚拟化方法,在执行时不用重复加载Kernel, 且container的kernel与host共享,因此可以大大加快container的 启动过程,并显著减少内存消耗。

docker容器中运行的进程性能接近本地应用程序。


docker 常用命令

  1. docker pull: 从仓库中拖镜像

  2. docker run:创建容器

  3. docker stop:停止容器运行

  4. docker start:开始容器运行

  5. docker commit:提交容器到镜像

  6. docker images: 查看当前有的镜像

  7. docker ps:查看当前启动的容器


vps主机环境

  1. vps: linode

  2. 系统: Ubuntu 14.04 LTS

  3. docker: Docker version 0.9.1(直接 apt-get 安装)

  4. image 版本: Ubuntu 12.04 LTS

需要注意安装 docker 的时候确认内核版本,要在 3.10 以上


创建 docker 容器

创建数据目录 /data

  1. /data 目录中将用来存放容器中 mongdb,mysql,redis 等数据库文件,还有个人站点的文件。

  2. 在 /data 中放置了容器启动后执行的脚本文件,这样可以启动容器内的服务。


创建 /data/docker_config/myboot.sh 脚本

这个脚本是容器启动后运行的脚本,因为这个脚本是放在/data目录下,所以可以在宿主系统上修改, 这样就可以选择在启动容器的时候是运行shell,还是直接运行服务程序。

脚本启动的服务:

  1. supervisord 服务,容器内的服务(mysql,mongodb,redis)都是使用这个管理。

  2. sshd服务,远程访问。

#!/usr/bin/env bash

# 容器启动时启动服务程序
if [ -f /bin/bashno ]; then
# 容器启动时启动 shell
#if [ -f /bin/bash ]; then
/bin/bash
else
cron
/usr/sbin/munin-node --config /etc/munin/munin-node.conf
supervisord
/usr/sbin/sshd -D
fi


用下面的命令创建容器

# 从  https://index.docker.io/ 下载镜像
docker.io pull ubuntu

# 创建容器
docker.io run -d -m 3G -h 'mydocker' -p 80:80 -p 32000:22 -p 35000:35000 -p 37064:37064 \
-v /data:/data -w /data --name mydocker_c ubuntu /data/docker_config/myboot.sh

  1. 上面是创建容器命令,映射容器的80,22,35000端口对外提供服务。

  2. 把本地的目录 /data 挂载到容器中

  3. 设置容器启动执行的脚本文件 /data/docker_config/myboot.sh


查看当前容器

docker.io ps -a


配置容器

第一次启动容器时,配置启动执行脚本启动从 shell 启动,这样执行命令 docker.io start mydocker_c 就可以启动到 shell,就可以安装需要的软件和服务了。

安装sshd,supervisord,mongodb,mysql,redis等程序

配置 supervisord 管理服务程序。

配置 supervisord 管理 mongodb 服务, 创建文件 /etc/supervisor/conf.d/mongodb.conf,内容如下:

[program:mongodb]
autostart=true
user=mongodb
directory=/var/run/mongodb/
command=mongod run -f /etc/mongodb.conf --pidfilepath /var/run/mongodb/mongodb.pid

用 supervisord 管理其他服务的方法与上面相同。

# 启动服务
user@host: ~ $ supervisorctl start

# 查看服务状态
user@host: ~ $ supervisorctl status

mongodb                          RUNNING    pid 14, uptime 5:50:47
mysql                            RUNNING    pid 21, uptime 5:50:47
nginx                            RUNNING    pid 16, uptime 5:50:47
redis                            RUNNING    pid 15, uptime 5:50:47
sentry-web:sentry-web_00         RUNNING    pid 19, uptime 5:50:47
sentry-web:sentry-web_01         RUNNING    pid 20, uptime 5:50:47
sentry-web:sentry-web_02         RUNNING    pid 17, uptime 5:50:47
sentry-web:sentry-web_03         RUNNING    pid 18, uptime 5:50:47
webpy:00                         RUNNING    pid 32, uptime 5:50:47
webpy:01                         RUNNING    pid 33, uptime 5:50:47
webpy:02                         RUNNING    pid 25, uptime 5:50:47
webpy:03                         RUNNING    pid 27, uptime 5:50:47
webpy:04                         RUNNING    pid 41, uptime 5:50:47
webpy:05                         RUNNING    pid 42, uptime 5:50:47
webpy:06                         RUNNING    pid 35, uptime 5:50:47
webpy:07                         RUNNING    pid 36, uptime 5:50:47


创建自己的镜像文件

配置完成后进行下面操作:

  1. 退出容器,用命令 docker.io stop mydocker_c 停止容器运行。

  2. 修改容器启动脚本配置直接启动服务,然后重新启动容器(docker.io start mydocker_c),用 ssh 登录容器,看配置的服务是否都正常启动。

  3. 确认一切正常后用命令停止容器运行。

  4. 使用 docker.io commit 创建当前系统的镜像文件,以后就可以导出这个镜像文件来使用了。


完成

容器现在启动后,可以自动运行部署的服务。

现在可以 push 镜像文件到远程的仓库( [ https://index.docker.io/   https://index.docker.io/] ),也可以导出使用。个人站点迁移的时候只要把镜像文件导出,并且把 /data 目录打包重新在新的机器上导入镜像文件,解压 /data 目录即可使用(mysql 数据库可能需要用脚本导出再导入,要根据自己的配置来调整,mongodb服务器的数据文件可以直接使用)


原文链接: http://www.hopez.org/blog/5/1403610274

© 著作权归作者所有

共有 人打赏支持
粉丝 10
博文 22
码字总数 16965
作品 0
浦东
架构师
开源的自动化部署工具探索

1 前言 即使是在传统的企业当中,日常的备份、服务器状态监控和日志,通过手动的方式来进行的效率也很低,是一种人力的浪费。因此,自动化早已是每个运维都必须掌握的看家本领。 在不同的企业...

双月通天 ⋅ 2016/03/18 ⋅ 0

阿里巴巴微服务架构到底有多牛逼?

微服务架构专题 围绕微服务的通用模式,讲解Spring Cloud的常见用法及原理。让微服务的开发更加方便、快捷,让微服务应用更加稳定、可用。 理论结合实战,透彻理解分布式架构及其解决方案。 ...

Java高级架构 ⋅ 2017/12/21 ⋅ 0

Centos7.4下用Docker-Compose部署WordPress

前言 最近在学习相关知识,通过阅读后,正想着手实战用一下这个技术,但又不太敢直接在项目环境下动手。考虑足足三秒钟之后决定买个阿里云ECS搭建一个属于自己的基于的博客Daniel Fu's hut传...

无上@诀 ⋅ 2017/11/07 ⋅ 0

Docker大行其道—初识

Docker的前世今生 Docker是基于Go语言实现的云开源项目,目前归于Apache基金会并遵循Apache 2.0协议。诞生于2013年初,前身公司为dotCloud,docker开源后得到受到社会广泛的关注,docker的生...

linuxprobe ⋅ 2016/06/05 ⋅ 0

基于docker+reveal.js搭建一个属于自己的在线ppt网站

前言 最近热衷于,由于这段时间使用来折腾自己的服务器,越来越感觉这是一种极其被应该推广的技术,因此想在公司内部也做一次技术分享。当然,如果只是做的PPT,我就不写这文章了。既然把说这...

无上@诀 ⋅ 2017/11/28 ⋅ 0

CentOS搭建Harbor 简单手记

Harbor 简介 Harbor是Vmware开源的企业级Docker Registry管理项目,用于存储和分发Docker镜像。Harbor除了提供docker-registry外,还提供管理UI,基于角色的访问控制,日志审核等功能。 Harb...

米阳MeYoung ⋅ 2017/11/30 ⋅ 0

daocloud中构建一个hallo docker网页服务器的docker镜像并部署

最近刚接触了一两天的docker,个人对docker的理解就是 对于用户是一个虚拟机 对于运营商而言这个虚拟机带来的资源消耗比传统的虚拟机要少得多 实话说我就是用户罢了,不考虑这么多,就看怎么...

tmj ⋅ 2015/11/01 ⋅ 0

在ECS上基于DOCKER容器急速安装WORDPRESS(3分钟安装)

在学习容器技术的过程中,无意发现docker hub上,已经有了WordPress的官方镜像,已经把WEB环境全部打包好,只需要设置好MySQL数据库既可快速部署个人博客,因此,作为技术达人的我,快速测试...

wuditnt ⋅ 01/07 ⋅ 0

Centos7.4下用Docker-Compose部署WordPress(续)-服务器端用Nginx作为反向代理并添加SSL证书(阿里云免费DV证书)

前言 在我写完Centos7.4下用Docker-Compose部署WordPress这篇文章后,我的个人博客已经正式的开始运作。但考虑到网站访问的安全性以及今后可能会重复利用服务器来部署其他网站的可能,因此我...

无上@诀 ⋅ 2017/11/09 ⋅ 0

Java 开源博客 Solo 1.3.0 发布 - Docker 支持

Solo 1.3.0 正式发布了,感谢一直以来关注 B3log 开源的朋友! 可以通过一个命令启动(不需要安装数据库、部署容器),也可以通过 war 方式部署容器,连接 MySQL。这应该是史上最容易跑起来的...

88250 ⋅ 2015/12/19 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周三乱弹 —— 这样的女人私生活太混乱了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 胖达panda :你经历过体验到人生的大起大落吗?我一朋友在10秒内体验了,哈哈。@小小编辑 请点一首《almost lover》送给他。 《almost love...

小小编辑 ⋅ 43分钟前 ⋅ 7

自己动手写一个单链表

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对...

公众号_好好学java ⋅ 49分钟前 ⋅ 0

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部