-
Notifications
You must be signed in to change notification settings - Fork 38
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optimize Dockerfile #97
Conversation
Switch to Node/Alpine base image instead of Debian Makes for a much smaller Docker image Also add `package-lock.json` to the build and optimize order of commands for a quicker build
Have the node-sass issues with node on alpine based images been resolved? sass/node-sass#2031 |
might need to add the fix from https://github.com/jubel-han/dockerfiles/blob/master/node/Dockerfile - haven't tested yet |
node-sass seems to work perfectly from first testing. Unrelated, I made one slight change to how
Just to avoid an error in the event that This Alpine-based image may cause issues for third-party/additional binary NPM packages that are incompatible for musl libc, but I'd consider that an edge case that probably warrants the developer writing their own Dockerfile anyway. Nice size savings - 323mb vs 943mb for the previous, and 271mb+ of that is the compiled |
2.9.0 - 2017-10-17 ----------------------------------------------- ## Building * Fixes static building via `npm run build-static`, by replacing broken `chunk-manifest-webpack-plugin` (closes #55) ## Webpack * Adds `src` to modules path, to avoid `src/` prefixes at the start of userland imports (closes #69) * Fixes stats configuration to work with the latest Webpack versions * Adds CORS config to webpack_dev_server, to enable LAN-wide browser hot-code reloading (closes #99) * Removes leading `/` in asset output, to allow defining a `<base>` tag in userland via React Helmet (closes #102) ## ESLint * Refactors rules, to be grouped by plugin * Adds `jsx-a11y/anchor-is-valid` rule to avoid 'href' on React Router `<Link>` attributes * Adds `function-paren-newline` rule to enforce consistent parenthesis * Adds `object-curly-newline` rule to allow one-line / multi-line object definitions * Fixes various kit and src files to conform to new rules ## React * Bumps to React v16 - officially out of RC! ## Config * Adds `.disableKoaHelmet()` for disabling [koa-helmet](https://www.npmjs.com/package/koa-helmet) on the server (closes #79) * Adds `.setKoaHelmetOptions()` for passing options to Koa Helmet * Sets `.koaHelmetOptions` and `.bodyParserOptions` to null by default ## App * Disables SSL by default ## Server * Removes leading `/` in bundled assets (along with Webpack) to allow for a `<base>` tag to define the load path ## Testing (Jest) * Fixes Jest testing to be compatible with Babel and React (closes #81, merges #84 - thanks @Nate0001) ## General * Fixes 'local' typo (merges #89 - thanks @kane-c) * Fixes misspelled `browserslist` file (merges #95 - thanks @klarstrup) * Adds idiomatic [React Helmet](https://github.com/nfl/react-helmet) `<head>` tags, adds missing html/body attributes, base, link, style, script and noscript, uses new `Helmet.renderStatic()` call (closes #101 & #94 - thanks @klarstrup) * Adds default `<base href="/" />` tag, when none is defined with React Helmet ## Docker * Adds Alpine-based `Dockerfile` to reduce Docker image size from 943mb -> 323mb (closes #98, merges #97 - thanks @kane-c) * Adds `docker-compose.yml` for production (closes #98) * Adds `docker-compose.dev.yml` for local development. Removes the local `node_modules` to ensure Alpine-compatible Linux binaries are being referenced by local code changes. Supports hot code reloading in-browser and via SSR ## NPM * Bumps packages: "babel-eslint": "^8.0.1" "copy-webpack-plugin": "^4.1.1", "cross-env": "^5.1.0", "eslint": "^4.9.0", "eslint-config-airbnb": "^16.1.0", "eslint-plugin-compat": "^2.0.1", "eslint-plugin-jsx-a11y": "^6.0.2", "eslint-plugin-react": "^7.4.0", "extract-text-webpack-plugin": "^3.0.1", "file-loader": "^1.1.5", "graphql-tag": "^2.5.0", "iltorb": "^2.0.1" "jest": "^21.2.1", "less": "^3.0.0-alpha.3", "postcss-loader": "^2.0.8", "resolve-url-loader": "^2.1.1", "rimraf": "^2.6.2", "serve": "^6.2.0", "style-loader": "^0.19.0", "webpack": "^3.8.0", "webpack-chunk-hash": "^0.5.0", "webpack-config": "^7.5.0", "webpack-dev-server": "^2.9.2", "webpack-manifest-plugin": "^1.3.2", "apollo-server-koa": "^1.1.7", "graphql": "^0.11.7", "koa-send": "^4.1.1", "prop-types": "^15.6.0", "react": "^16.0.0", "react-apollo": "^1.4.16", "react-dom": "^16.0.0", "react-hot-loader": "^3.1.1"
Awesome, happy to help! |
This is creating problems for me on a very simple app btw. Trying to fix it with a workaround. |
What sort of problems? |
This kind:
#114
|
This, like any starter kit/framework This is only intended to be a starter template, designed mostly to strike a decent enough balance between build speed, caching, and the size of the resulting image. You're encouraged to tweak for your project's production requirements. |
Switch to Node/Alpine base image instead of Debian - makes for a much smaller Docker image.
Also add
package-lock.json
to the build and optimize order of commands for a quicker build.