3. docker-compose实战--ghost app
一. registry介绍
1. 先来了解术语
host |
宿主机 |
---|---|
image |
镜像 |
container |
容器 |
regisry |
仓库 |
daemon |
守护进程 |
client |
客户端 |
2. docker与Registry的交互命令
- docker search nginx: 搜索镜像
- docker pull nginx: 拉取镜像到本地
- docker push myname/nginx: 提交镜像到自己的仓库
3. 常用docker镜像的仓库
- docker hub(官方提供)
- daocloud(国内)
- 时速云(国内)
- aliyun(国内)
4. 如何将本地镜像上传到镜像库
使用命令
docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname
首先, 使用tag给本地镜像起一个新的镜像名字和版本
第二: 使用git push将新的镜像push到自己的仓库
举个例子:
将本地的whalesay打包成一个自定义的tag标签的名字. 然后上传到docker 仓库
提示没有权限, 那么需要先登录
docker login
先登录再上传
5. 搜索镜像
在搜索栏输入mysql, 可以看到mysql的基本信息. 在这下面有对mysql的基本操作
这些内容都是很全面的.
二. docker-compose
docker-compose是独立于docker的程序, Mac/Windows是自带到的. linux需要自己下载, 下载地址:
curl https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(name -s) - $(uname -m) > /usr/local/bin/docker-compose
我的是mac, 直接在mac上检查是否已经安装了docker-compose
docker-compose --version
说明在mac上docker-compose已经安装了
docker-compose实战 : 安装一个ghost app应用程序
实战的项目是一个ghost博客项目. 他依赖的环境是nginx, 也就是在nginx中运行, 使用的数据库是mysql数据库.
这个项目做好了以后, 我们就可以拥有自己的博客平台了. 哈哈哈....不用再在别人的博客平台写博客了.我是这么觉得的.
不过还要看看,这个平台好不好用.
如图: 我们会用到三个容器, 1 nginx服务器. 2. 博客ghost app容器 3. mysql容器
1. 创建项目文件夹ghost
首先准备一个项目文件夹ghost, 并在文件夹下面准备三个目录 ghost, nginx, data
- ghost: 用来存放拉取的ghost镜像文件
- nginx:用来存放pull下来的nginx镜像文件
- data: 挂载到mysql镜像上的数据库目录
2. 准备ghost镜像
进入ghost镜像目录, 编写Dockerfile
FROM ghost //直接拉取官方的ghost镜像
COPY ./config.js /var/lib/ghost/content/config.js //copy本地文件到镜像目录
EXPOSE 2368 // 项目的端口是2368
#CMD "npm", "start", "--production" //运行启动命令
- FROM ghost : 直接拉取官方的ghost镜像, 这里的依赖如果本地没有, 会直接去镜像看pull
- COPY ./config.js /var/lib/ghost/config.js : copy本地文件到镜像目录
- EXPOSE 2368: 项目的端口是2368
- CMD "npm", "start", "--production" : 运行启动命令
准备文件config.js
var path = require('path'),
config;
config = {
production: {
url: 'http://mytestblog.com',
mail: {},
database: {
client: 'mysql',
connection: {
host: 'db', // db是mysql的名称
user: 'ghost',
password: 'ghost',
database: 'ghost',
port: '3306',
charset: 'utf8'
}
debug: false
},
paths: {
contentPath: path.join(process.env.GHOST_CONTENT,'/')
},
server: {
host: '0.0.0.0',
port: '2368'
}
}
};
module.exports = config;
这个文件的内容, 替换原始文件内容, 指定了博客的url, 连接数据库的基本信息.服务的ip和端口号
3. 准备Nginx镜像
首先,配置Dockerfile文件
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
这个镜像不说了, 含义和上面的基本差不多
这里多说一句, 我们不需要启动命令了, 因为nginx中自带了启动命令
准备nginx.conf命令
worker_processes 4;
events {
worker_connections 1024;
}
http {
server {
listen 80;
location / {
proxy_pass http://ghost-app:2368;
}
}
}
4. 准备一个docker-compose文件, 这个文件就是描述系统的架构的
version : '2' // 因为docker-compose在发展中的工具, 他的语法有第一版和第二版, 我们这里使用的语法是第二版
networks: // 显示声明一个网络, 网络名叫ghost
ghost:
services: // 一共有三个服务, ghost-app服务, nginx服务, mysql服务
ghost-app:
build: ghost // 这个服务是怎么来的呢? 他是build来的, 我们之前提供了dockerfile文件和配置文件. 通过build得来. 那么去哪里构建呢? 请进入到ghost目录进行构建.
networks:
- ghost // 指定ghost网络
depends_on: //描述依赖关系. 启动的时候, 先启动db. 再启动ghost-app, 最后启动nginx
- db
ports:
- "2368:2368"
nginx:
build: nginx //nginx也是从文件构建, 我们已经写好了Dockerfile
networks:
- ghost
depends_on:
- ghost-app
ports:
- "80:80"
db: //数据库描述. 这里的名字一定是db, 因为前面有文件调用了这个名字
image: "mysql:5.7.15" // mysql不是build, 而是直接去pull一个image
networks:
- ghost
environment:
MYSQL_ROOT_PASSWORD: mysqlroot
MYSQL_USER: ghost
MYSQL_PASSWORD: ghost
volumes: // 挂载mysql数据目录
- $PWD/data:/var/lib/mysql
ports:
- "3306:3306"
这里的注意事项如下:
- version : '2' -->因为docker-compose在发展中的工具, 他的语法有第一版和第二版, 我们这里使用的语法是第二版
- build: ghost --> 这个服务是怎么来的呢? 他是build来的, 我们之前提供了dockerfile文件和配置文件. 通过build得来. 那么去哪里构建呢? 请进入到ghost目录进行构建.
- db: 数据库描述. 这里的名字一定是db, 因为前面有文件调用了这个名字
5. 启动docker-compose
docker-compose up -d //-d表示从后台启动
- -d: 表示在后台启动, 退出客户端不会关闭
三个容器都启动了.
构建镜像
docker-compose build
停止运行
docker-compose stop
查看启动的容器
docker-compose ps
查看所有容器
docker-compose ps -a
整了好久, 没运行起来, 今早上, 终于运行起来了
原因有两点:
第一个是ghost的config.js拷贝文件的地址变了: 原来是COPY ./config.js /var/lib/ghost/config.js 改为 COPY ./config.js /var/lib/ghost/content/config.js
第二个是注释掉ghost的Dockerfile中的这句话: # CMD "npm", "start", "--production"
再重启项目, 启动起来了.
FROM ghost
COPY ./config.js /var/lib/ghost/content/config.js
EXPOSE 2368
# CMD "npm", "start", "--production"
整个项目的代码可以参考: https://github.com/Albert-W/dockerGhost
浏览器访问http://localhost 查看nginx页面
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中samba服务器的搭建教程
- linux环境搭建图数据库neo4j的讲解
- Linux编程之ICMP洪水攻击
- linux搭建squid代理服务器的完整步骤
- 使用wget递归镜像网站
- 整理Linux中字符串的相关操作技巧
- Ubuntu 16.04下无法安装.deb的解决方法
- 关于linux中系统输入输出的管理详解
- Linux下IP设置脚本的实例及遇到问题解决办法
- Linux与Windows文件互传(VMWare)
- 如何测试Linux下tcp最大连接数限制详解
- Linux中利用Vim对文件进行密码保护的方法详解
- Linux中禁止用户修改/重置密码
- 详解 MAC/Linux Vi配置环境变量及Java环境变量配置
- 扒开DMA映射的内裤