使用Docker部署应用程序

准备:用到两台服务器,一台(192.168.160.134)用做开发者PC,一台(192.168.160.135)用做服务器

一、在开发者PC安装git,并创建仓库

安装

[root@node1 ~]# yum install git

创建仓库

[root@node1 ~]# git init exampleapp

转到仓库目录,然后设置作者的电子邮件和名称

[root@node1 ~]# cd exampleapp/
[root@node1 exampleapp]# git config --global usr.email [email protected] 
[root@node1 exampleapp]# git config --global usr.name  "mai ye ping"
二、开发者PC使用Node.js编写简单Web服务器
[root@node1 ~]# vim exampleapp/app.js 

 var express = require('express');
var app = express();
app.get(['/','/index.html'],function (req,res){
 res.send('Hello Docker');
 });
app.listen(80);

为了使用Node.js 中的npm包
npm是什么详细看这篇文章
https://blog.csdn.net/qq_37696120/article/details/80507178

[root@node1 ~]# vim exampleapp/package.json 

  1 {
  2   "name":"exampleapp",
  3   "description":"Hello Docker",
  4   "version":"0.0.1",
  5   "dependencies":{
  6     "express":"4.4.x"
  7   }
  8 }         
三、将文件提交到开发者PC的exampleapp仓库(其实我这一步不是很明白,不是在exampleapp目录下创建的文件吗,为什么还要提交到那个仓库?)
[root@node1 exampleapp]#  git add app.js package.json
[root@node1 exampleapp]#  git commit -m "add source"
四、编写Dockerfile文件
[root@node1 exampleapp]# vim Dockerfile 
  1 FROM centos
  2 
  3 RUN yum install -y nodejs npm
  4 
  5 ADD app.js /var/www/app.js
  6 ADD package.json /var/www/package.json
  7 
  8 WORKDIR /var/www
  9 RUN npm install
 10 
 11 CMD node app.js                        

ADD :将app.js和package.json复制到镜像的/var/www/目录
RUN npm install:将安装package.json中设置的Node,js模块
CMD node app.js 设置用于在容器启动时利用nodejs运行app.js
nodejs是javascript的运行环境。
将Dockerfile文件提交到开发者的exampleapp仓库

[root@node1 exampleapp]# git add Dockerfile 
[root@node1 exampleapp]# git commit -m "add Dockerfiile"
五、在开发者PC中生成SSH密钥
[root@node1 exampleapp]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:WnbSLwOy+EpY6oMSqKgVJbOVdL5fMvIpFIgyLZY4pdA [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|... . .          |
|o+Eo =           |
|Bo= = o          |
|.= *   o .       |
|. o . = S +      |
|o  = o X O .     |
|oo+ o + + o .    |
|=o.. . .   o     |
|+ .....          |
+----[SHA256]-----+

在服务器端

一、在服务器中安装Docker
[root@node2 ~]# yum  install docker-io
[root@node2 ~]# systemctl start docker
二、在服务器中安装SSH密钥

在服务器端安装前面生成的SSH密钥,以便开发者PC访问服务器时不必使用密码

[root@node2 ~]# mkdir .ssh/
[root@node2 ~]# chmod 700 .ssh/
[root@node2 ~]# mkdir .ssh/authorrized_keys 

将开发者PC端的创建的id_rsa.pub文件复制到服务器端的.ssh/authorrized_keys 中,然后修改权限

[root@node1 ~]# scp .ssh/id_rsa.pub [email protected]:.ssh/authorrized_keys 
[email protected]'s password: 
id_rsa.pub                    100%  399   328.7KB/s   00:00    

在服务器端查看
[root@node2 ~]# ls .ssh/
authorrized_keys  id_rsa  id_rsa.pub
[root@node2 ~]# chmod +x .ssh/authorrized_keys 
二、在服务器端安装Git Hook
[root@node2 ~]# vim exampleapp/.git/hooks/post-receive 

  1 #!/bin/bash
  2 
  3 APP_NAME=exampleapp(设置当前应用程序的名称,与仓库名称一致)
  4 APP_DIR=$HOME/$APP_NAME(设置查看目录)
  5 REVISTION=$(expr substr $(git rev-parse --verify HEAD) 1 7)
  6 
  7 GIT_WORK_TREE=$APP_DIR git checkout -f
  8 
  9 cd $APP_DIR
 10 docker build --tag $APP_NAME:$REVISION .
 11 docker stop $APP_NAME
 12 docker rm $APP_NAME
 13 docker run -d --name $APP_NAME -p 80:80 $APP_NAME:$REVISION  

REVISTION=$(expr substr $(git rev-parse --verify HEAD) 1 7)
git rev-parse --verify HEAD:这句命令的作用可以参考这篇博文:http://blog.sina.com.cn/s/blog_9ca06dcc0102vrvp.html(简单来说就是让git知道你在哪)
expr substr:expr命令是一款表达式计算工具,使用它完成表达式的求值操作

[root@node2 ~]# expr --help
....
 substr STRING POS LENGTH   substring of STRING, POS counted from 1
  ....
  所以expr substr   $(git rev-parse --verify HEAD) (STRING)  1(POP) 7(LENGTH)
  
[root@node2 exampleapp]# expr substr $(git rev-parse --verify HEAD) 1 7
061fe9c

GIT_WORK_TREE=$APP_DIR git checkout -f
git checkout -f:用于将推送的源代码保存到仓库目录,必须设置GIT_WORK_TREE变量

三、在开发者PC中推送源代码
[root@node1 exampleapp]# git remote add original [email protected]:exampleapp
[root@node1 exampleapp]# git push original master
四、测试

在web浏览器中输入服务器的IP地址,据说会有下图效果。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/myydebk666/article/details/83963867
今日推荐