3. docker-compose实战--ghost app

前端之家收集整理的这篇文章主要介绍了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@H_301_76@-repo:tagname
docker push @H_301_76@new@H_301_76@-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://@H_301_76@github.com/docker/compose/releases/download/1.9.0/docker-compose-$(name -s) - $(uname -m) > /usr/local/bin/docker-compose@H_301_76@

 

我的是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

 

2. 准备ghost镜像

进入ghost镜像目录,编写Dockerfile

FROM ghost 直接拉取官方的ghost镜像@H_301_76@
COPY ./config.js /var@H_301_76@/lib/ghost/content/config.js     copy本地文件到镜像目录@H_301_76@
EXPOSE 2368@H_301_76@        项目的端口是2368@H_301_76@
#CMD "@H_301_76@npm@H_301_76@"@H_301_76@,start@H_301_76@--production@H_301_76@"@H_301_76@    运行启动命令@H_301_76@
  • FROM ghost : 直接拉取官方的ghost镜像,这里的依赖如果本地没有,会直接去镜像看pull

  • COPY ./config.js /var/lib/ghost/config.js : copy本地文件到镜像目录

  • EXPOSE 2368: 项目的端口是2368

  • CMD "npm","start","--production" : 运行启动命令

准备文件config.js

var@H_301_76@ path = require('@H_301_76@path@H_301_76@'@H_301_76@),config;

config @H_301_76@= {
  production: {
    url: @H_301_76@http://mytestblog.com@H_301_76@,mail: {},database: {
      client: @H_301_76@MysqL@H_301_76@301_76@db@H_301_76@MysqL的名称
        user: @H_301_76@ghost@H_301_76@301_76@301_76@301_76@3306@H_301_76@301_76@utf8@H_301_76@
      }
      debug: @H_301_76@false@H_301_76@
    },paths: {
      contentPath: path.join(process.env.GHOST_CONTENT,@H_301_76@/@H_301_76@)
    },server: {
      host: @H_301_76@0.0.0.0@H_301_76@2368@H_301_76@
    }
  }
};

module.exports @H_301_76@= config;

这个文件内容,替换原始文件内容,指定了博客的url,连接数据库的基本信息.服务的ip和端口号

 

 3. 准备Nginx镜像

首先,配置Dockerfile文件

FROM Nginx
COPY Nginx.conf @H_301_76@/etc/Nginx/Nginx.conf
EXPOSE @H_301_76@80@H_301_76@

 这个镜像不说了,含义和上面的基本差不多

这里多说一句,我们不需要启动命令了,因为Nginx自带了启动命令

 

准备Nginx.conf命令 

worker_processes 4@H_301_76@;
events {
  worker_connections @H_301_76@1024@H_301_76@;    
}

http {
    server {
        listen @H_301_76@80@H_301_76@;
        location @H_301_76@/ {
            proxy_pass http:@H_301_76@ghost-app:2368;@H_301_76@
        }
    } 
}@H_301_76@

 

4. 准备一个docker-compose文件,这个文件就是描述系统的架构的 

version : 2@H_301_76@'@H_301_76@    因为docker-compose在发展中的工具,他的语法有第一版和第二版,我们这里使用的语法是第二版@H_301_76@

networks:  @H_301_76@ 显示声明一个网络,网络名叫ghost@H_301_76@
  ghost:

services:  @H_301_76@ 一共有三个服务,ghost-app服务,Nginx服务,MysqL服务@H_301_76@
  ghost-app:
    build: ghost   @H_301_76@ 这个服务是怎么来的呢? 他是build来的,我们之前提供了dockerfile文件配置文件. 通过build得来. 那么去哪里构建呢? 请进入到ghost目录进行构建.@H_301_76@
    networks:
      @H_301_76@- ghost    指定ghost网络@H_301_76@
    depends_on:   描述依赖关系. 启动的时候,先启动db. 再启动ghost-app,最后启动Nginx@H_301_76@
      - db    
    ports:
      @H_301_76@- 2368:2368@H_301_76@"@H_301_76@

  Nginx:
    build: Nginx     @H_301_76@Nginx也是从文件构建,我们已经写好了Dockerfile@H_301_76@
    networks: 
      @H_301_76@- ghost
    depends_on:
      @H_301_76@- ghost-app
    ports:
      @H_301_76@- 80:80@H_301_76@

  db:   @H_301_76@数据库描述. 这里的名字一定是db,因为前面有文件调用了这个名字@H_301_76@
    image: MysqL:5.7.15@H_301_76@"@H_301_76@    MysqL不是build,而是直接去pull一个image@H_301_76@
    networks:
      @H_301_76@- ghost
    environment:
      MysqL_ROOT_PASSWORD: MysqLroot
      MysqL_USER: ghost
      MysqL_PASSWORD: ghost
    volumes:   @H_301_76@ 挂载MysqL数据目录@H_301_76@
      - $PWD/data:/var@H_301_76@/lib/MysqL
    ports:
      @H_301_76@- 3306:3306@H_301_76@"@H_301_76@

这里的注意事项如下:

  •  version : '2' -->因为docker-compose在发展中的工具,我们这里使用的语法是第二版
  • build: ghost --> 这个服务是怎么来的呢? 他是build来的,我们之前提供了dockerfile文件配置文件. 通过build得来. 那么去哪里构建呢? 请进入到ghost目录进行构建.

  •  db: 数据库描述. 这里的名字一定是db,因为前面有文件调用了这个名字

 5. 启动docker-compose

docker-compose up -d  -d表示从后台启动@H_301_76@

 三个容器都启动了. 

 

构建镜像

docker-compose build

停止运行

docker-compose stop

查看启动的容器

docker-compose ps 

查看所有容器

docker-compose ps -a

整了好久,没运行起来,今早上,终于运行起来了

原因有两点: @H_301_76@

第一个是ghost的config.js拷贝文件的地址变了:  原来是COPY ./config.js /var/lib/ghost/config.js  改为  @H_301_76@COPY ./config.js /var/lib/ghost/content/config.js@H_301_76@@H_301_76@

第二个是注释掉ghost的Dockerfile中的这句话: # CMD "npm","--production"@H_301_76@@H_301_76@

再重启项目,启动起来了. @H_301_76@

FROM ghost
COPY .@H_301_76@/config.js /var@H_301_76@/lib/ghost/content/config.js
EXPOSE @H_301_76@2368@H_301_76@
# CMD @H_301_76@"@H_301_76@

整个项目的代码可以参考: https://github.com/Albert-W/dockerGhost

浏览器访问http://localhost 查看Nginx页面

 

猜你在找的Docker相关文章