安裝docker
安裝教程: https://docs.docker.com/docker-for-mac/install/
大致的步驟:
1灿渴,下載最新版本docker的dmg文件,下載完成后一步一步安裝即可。
2瓣距,安裝完之后啟動(dòng)昏滴,可以看到屏幕上方有一個(gè)類似與鯨魚的圖標(biāo)贸营,進(jìn)入偏好設(shè)置储玫,配置你的docker。
粘貼圖片.png
定制化node鏡像
定制自己的node基礎(chǔ)鏡像
操作系統(tǒng): centos
node版本: 最新LTS版本 v8.9.4
定制鏡像有兩種方式
一髓绽、基于已有的centos鏡像啟動(dòng)容器,然后進(jìn)入容器基本的node環(huán)境煤痕,最后再基于
啟動(dòng)的容器打包成自己的鏡像【不推薦】梧宫。
二、使用dockerfile進(jìn)行構(gòu)建, 下面是基于centos鏡像構(gòu)建node鏡像的dockerfile.
#基于centos鏡像
FROM centos
MAINTAINER mufeng
# 安裝基礎(chǔ)軟件 wget git
RUN yum -y install wget
RUN yum -y install git
RUN yum -y install net-tools
RUN mkdir -p /home/app
WORKDIR /home/app
# 安裝node環(huán)境 最新LTS版本, 并配置node環(huán)境
RUN mkdir -p /usr/local/nodejs
RUN wget https://nodejs.org/dist/v8.9.4/node-v8.9.4-linux-x64.tar.xz
RUN xz -d node-v8.9.4-linux-x64.tar.xz
RUN tar -xvf node-v8.9.4-linux-x64.tar
RUN rm -rf node-v8.9.4-linux-x64.tar.xz
RUN rm -rf node-v8.9.4-linux-x64.tar
RUN mv node-v8.9.4-linux-x64 /usr/local/nodejs
#建立軟鏈 這樣的話就不用配置環(huán)境變量了
RUN ln -s /usr/local/nodejs/node-v8.9.4-linux-x64/bin/* /usr/bin/
RUN npm install -g pm2
RUN ln -s /usr/local/nodejs/node-v8.9.4-linux-x64/bin/pm2* /usr/bin/
CMD ["node", "--version"]
將上面的內(nèi)容保存為文件Dockerfile, 然后在保存文件的目錄下命令行執(zhí)行
docker build -t mufeng/nodejs .
定制應(yīng)用鏡像
基于基本的node鏡像摆碉,根據(jù)具體應(yīng)用定制應(yīng)用鏡像
#基于基礎(chǔ)鏡像
FROM mufeng/nodejs
MAINTAINER mufeng
#應(yīng)用部署目錄
WORKDIR /home/app
#部署后臺(tái)應(yīng)用代碼
RUN git clone http://git.test.net/test.git
#工作目錄切換到應(yīng)用目錄
WORKDIR /home/app/test
RUN npm install --registry=https://registry.npm.taobao.org
#pm2 的cluster模式支持log4js需要該模塊
RUN pm2 install pm2-intercom
#暴露端口給宿主機(jī)
EXPOSE 12000
#容器啟動(dòng)時(shí)執(zhí)行的命令塘匣,啟動(dòng)應(yīng)用
CMD pm2-runtime start pm2.json --env $NODE_ENV
#構(gòu)建應(yīng)用鏡像
#docker build -t test .
#NODE_ENV通過啟動(dòng)容器時(shí)進(jìn)行參數(shù)傳遞
#docker run -e NODE_ENV=development --name test -p 16000:16000 -d test
啟動(dòng)容器后就可以訪問宿主機(jī)16000端口訪問docker里面的應(yīng)用了
問題
訪問應(yīng)用接口時(shí)報(bào)錯(cuò) Error: Invalid protocol: docker.for.mac.localhost:
程序中使用request模塊請(qǐng)求數(shù)據(jù),request會(huì)默認(rèn)讀取node 進(jìn)程http代理
process.env.https_proxy 和 process.env.HTTP_PROXY
因?yàn)閐ocker啟動(dòng)時(shí)使用了本地代理巷帝,導(dǎo)致 process.env.https_proxy 和 process.env.HTTP_PROXY會(huì)被自動(dòng)設(shè)置為
{
protocol: 'docker.for.mac.localhost:',
slashes: null,
auth: null,
host: '52285',
port: null,
hostname: '52285',
hash: null,
search: null,
query: null,
pathname: null,
path: null,
href: 'docker.for.mac.localhost:52285'
}
這樣程序中只要有用到request的地方就會(huì)這個(gè)錯(cuò)誤忌卤。
解決方法:
關(guān)閉docker代理,重新啟動(dòng)新的容器楞泼。