安装docker
在win 10环境下使用时,试了三个版本,首先是Docker for Windows Installer和InstallDocker.msi都没有安装成功,前者只能在专业版以上的win10系统才能安装。只有DockerToolbox.exe才适用于我的家庭版 win10,下载链接:ready-to-get-started。
然后选择默认选项进行安装,发现它把git卸载又重装了一遍,所以如果已经安装了git window客户端,应该可以在默认选项中取消勾选git, 不用再重装git了。
卡在检测已创建实例那里比较久,想拷贝一下查查为什么,结果ctrl+c好像直接使它取消了,然后就run下去了。。或者也是刚好处理完的时机?
最后就是显示了docker的字符logo,背着箱子的鲸。
输入docker run hello-world
运行一个实例来测试docker是否生效。如果看到成功运行的提示那么就说明docker正常运行了。
创建express应用
确保 express 应用在开发环境测试可以正常运行的情况下,在项目根目录加入文件 Dockerfile
,这个文件包含了用于创建docker镜像的命令。
FROM registry.docker-cn.com/library/node:8.11
MAINTAINER voezy
ADD . /app/
WORKDIR /app
RUN npm install
EXPOSE 3000
CMD [ "npm", "start"]
第一句是基于哪个镜像,这里用了docker-cn的加速镜像,因为官方在国外的镜像有时候实在太慢。
第二句指明了维护者。
第三句创建文件 /app。
第四句指明工作目录位于新建的app。
RUN后面的命令用于在镜像中安装这个express应用的依赖。
EXPOSE指定要暴露的端口。
最后一句是这个express应用的启动命令。
输入命令进行构建:docker build -t netease-music-site-express .
,不能少了最后的点,这个点表示将当前目录所有文件复制到镜像中。
然后输入命令:docker run -d -p 9000:3000 netease-music-site-express
,就可以打开 localhost:9000
查看效果了。要注意的是,如果是windows环境,因为docker是基于linux核心的,所以这个镜像应用其实是运行在一个虚拟机中的,该虚拟机的ip也就是docker初始化完成时提示的ip。所以windows下打开 192.168.99.100:9000
查看效果。
绑定docker账户并上传镜像
到 https://hub.docker.com/
注册账户。
在 docker 命令行中输入 docker login
然后输入用户名和密码,就登陆成功了。
给镜像添加tag:
docker tag netease-music-site-express voezy/netease-music-site-express
然后推送镜像到docker hub:
docker push voezy/netease-music-site-express
推送成功后,默认似乎是公开的。
服务器中安装docker并拉取镜像进行部署
ssh 登陆到服务器,输入以下命令进行docker的安装:
curl https://releases.rancher.com/install-docker/17.12.sh | sh
安装完成后,输入docker login
进行登陆,如果是自己的非公开镜像,应该是要登陆才能下载的。
然后输入sudo docker pull voezy/netease-music-site-express
拉取镜像。
镜像下载完毕后,输入命令运行镜像:
sudo docker run -d -p 9000:3000 --restart=always voezy/netease-music-site-express
--restart=always
使镜像应用中断时自动重启。也许可以部分代替pm2的功能。
这样子,在浏览器中打开 主机ip:9000
应该可以看到express应用运行成功了。
nginx代理express
安装nginx:
sudo apt-get install nginx
安装完毕后,修改nginx的配置文件。
cd /etc/nginx/sites-available
然后输入命令进行编辑:
sudo vi default
可以看到有许多默认的配置,如果觉得有必要,可以把默认配置文件备份一下。
删除旧的配置,新的配置如下:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:9000;
}
}
访问 example.com 时,nginx会把所有流量转发到本机的9000端口,也就是方才docker镜像中express应用所占用的端口,所以这个域名的所有动作都交给这个 express 应用处理。
保存后,可以用命令 sudo nginx -t
来检查配置文件有没有错误。
重启nginx:
sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx start
或者用 sudo nginx -s reload
。
开机自启nginx:
systemctl start nginx
systemctl enable nginx
开机自启docker
sudo systemctl enable docker
sudo usermod -aG docker 用户名