准备:用到两台服务器,一台(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地址,据说会有下图效果。