build.sh
docker-compose.yml # docker-compose.yml控制文件
Dockerfile
#!/bin/bash
workspace='/www/confcv/daduryi/dockers/nodecv'
cd ${workspace}
for code in nodecv
do
cd ${workspace}/codes/${code}
git pull -r
done
cd ${workspace} &&
cp /www/confcv/daduryi/dockers/cv-docker/sources.list sources.list &&
ts=`date +%Y%m%d%H%M%S`
cd ${workspace} && docker build -t registry.daduryi.cn:5000/nodecv -t registry.daduryi.cn:5000/nodecv:$ts .
cd ${workspace} && docker push registry.daduryi.cn:5000/nodecv
cd ${workspace} && docker push registry.daduryi.cn:5000/nodecv:$ts
FROM node:8.12.0-jessie
RUN rm /etc/localtime
RUN ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ADD sources.list /etc/apt/sources.list
RUN apt-get update
ADD codes/nodecv /www/nodecv
RUN cd /www/nodecv && npm install --registry=https://registry.npm.taobao.org
RUN cd /www/nodecv/public/react-ant-admin/ && npm install --registry=https://registry.npm.taobao.org
RUN cd /www/nodecv/public/react-ant-admin/ && npm run build
CMD node /www/nodecv/bin/www >> /mnt/nodecv.log 2>&1
nodecv:
restart: always
image: "registry.daduryi.cn:5000/nodecv:${CV_VERSION}"
entrypoint: /bin/bash
command: -c "cd /www/nodecv && node bin/www >> /mnt/nodecv.log 2>&1"
hostname: "${DOCKER_HOSTNAME}"
working_dir: /www/nodecv
ports:
- 5001:5001
volumes:
- ".:/mnt"
extra_hosts:
- "tapi-221:10.30.110.120"
docker-compose down # 关闭容器
docker-compose pull # 拉去镜像
docker-compose up -d # 启动容器 (-d 守护)
DOCKER_HOSTNAME=$(hostname)-nws VERSION=latest docker-compose up -d # 制定环境参数(变量在docker-compose中)
# 启动一个容器,并进入shell交互
sudo docker run -i -t node:8.12.0-jessie /bin/bash
# 根据容器id进入正在运行的容器
sudo docker exec -i -t b49bd5188151 /bin/bash
# 查看当前docker服务下的镜像
sudo docker images
# 查看但前宿主机运行的docker容器
sudo docker ps
# 搜索 建议去https://hub.docker.com/官网搜索并查看tag
sudo docker search node
# 构建容器
docker build -t registry.daduryi.cn:5000/nodecv -t registry.daduryi.cn:5000/nodcv:abc .
# 推送镜像(可制定tag)
docker push registry.daduryi.cn:5000/nodecv[:tag]
# 指定tag拉去一个容器
sudo docker pull node:8.12.0-jessie
参考: docker改国内官方镜像
国内镜像
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
docker pull registry.docker-cn.com/myname/myrepo:mytag
docker --registry-mirror=https://registry.docker-cn.com daemon
https://blog.csdn.net/tyler20008/article/details/48352661
https://blog.csdn.net/xs20691718/article/details/79502406
Docker Client会默认发送Dockerfile同级目录下的所有文件到Dockerdaemon中。
解决办法有两种:
node_modules
在Docker Hub 搜索, 并挑选合适tag
笔者认为不需要, 一个容器一个程序原则, 该程序前台运行, 指定了restart=always, 和-d
参考: segmentfault问答
容器内访问宿主机不要使用127.0.0.1, 建议使用宿主机内网ip, 并且确保宿主机的服务都有bind内网ip
docker存在cache机制, 执行前会比较内容有没有变化, 没有变化会使用cache, 常见案例是先copy进packages.json执行npm install 再copy代码.
多级构建可充分利用缓存
一份为 Node.js 应用准备的 Dockerfile 指南, 含多级构建
「Allen 谈 Docker 系列」docker build 的 cache 机制
查看容器日志:
https://blog.csdn.net/benben_2015/article/details/80708723
https://blog.csdn.net/weixin_38250126/article/details/81281476