Skip to main content

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