Docker 镜像打包和发布基本流程
#
创建一个简易的项目目录结构如下
.├── .dockerignore├── Dockerfile├── node_modules├── package-lock.json // 必须有,否则在docker push时会警告├── package.json├── server.js└── yarn.lock
server.js
const Koa = require('koa');const app = new Koa();app.use(async ctx => { ctx.body = 'Hello docker';});app.listen(3000);
Package.json
{ "name": "docker_demo", "version": "1.0.0", "description": "docker build test", // 必须有,否则在docker push时会警告 "main": "index.js", "scripts": { "start": "node server.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "koa": "^2.13.1" }, "repository": { // 必须有,否则在docker push时会警告 "type": "git", "url": "http://github.com" }}
.dockerignore
# Logslogs*.lognpm-debug.log*# Runtime datapids*.pid*.seed# Directory for instrumented libs generated by jscoverage/JSCoverlib-cov# Coverage directory used by tools like istanbul# Logslogs*.lognpm-debug.log*# Runtime datapids*.pid*.seed# Directory for instrumented libs generated by jscoverage/JSCoverlib-cov# Coverage directory used by tools like istanbul
Dockerfile
#制定node镜像的版本FROM node:8.9-alpine#声明作者MAINTAINER chalee #移动当前⽬目录下⾯面的⽂文件到app⽬目录下 ADD . /app/ #进⼊入到app⽬目录下⾯面,类似cd WORKDIR /app#安装依赖RUN npm install#对外暴暴露露的端⼝口EXPOSE 3000#程序启动脚本CMD ["npm", "start"]
#
打包镜像# 构建镜像docker build -t docker_demo .# 运行镜像docker run -d -p 9000:3000 docker_demo# 查看镜像docker ps # 删除镜像docker rmi 镜像ID# 删除运行的镜像 (必须先停止镜像)docker rm 镜像ID
#
发布镜像# 登录docker hub (需要root权限)sudo docker login# 给镜像打tag (发布时需要)766c9b622783-> 镜像ID chaleechen->docker用户名 镜像名称docker tag 766c9b622783 chaleechen/docker_demo# 发布镜像sudo docker push chaleechen/docker_demo:latest# https://hub.docker.com/repositories 查看仓库就会发现刚刚打包好的镜像
# 查看自己发布的镜像docker search chaleechen/docker_demo# 拉取自己发布的镜像docker pull chaleechen/docker_demo