Tuan Anh

container nerd. k8s || GTFO

Minimal Node.js docker container

Bitnami recently releases a prod version of their bitnami-docker-node with much smaller size due to stripping a bunch of unncessary stuff for runtime.

If your app does not require compiling native modules, you can use it as is. No changes required.

However, if you do need to compile native modules, you can still use their development image as builder and copy stuff over to prod image after.

I try with one of my app and the final image size reduce from 333 MB down to just 56 MB 💪 !! All these without the sacrify of using alpine-based image.

Please note that this is the size reported by Amazon Cloud Registry so probably compressed size. I don’t build image locally often.

update: the uncompressed size of my app is 707MB before and 192 MB after.

FROM bitnami/node:8.6.0-r1 as builder

RUN mkdir -p /usr/src/app/my-app
WORKDIR /usr/src/app/my-app

COPY package.json /usr/src/app/my-app
RUN npm install --production --unsafe

COPY . /usr/src/app/my-app

FROM bitnami/node:8.6.0-r1-prod
RUN mkdir -p /app/my-app
WORKDIR /app/my-app
COPY --from=builder /usr/src/app/my-app .
EXPOSE 3000

CMD ["npm", "start"]

Non-privileged containers FTW

FROM ubuntu:latest
RUN useradd -u 10001 scratchuser

FROM scratch
COPY dosomething /dosomething
COPY --from=0 /etc/passwd /etc/passwd
USER scratchuser

ENTRYPOINT ["/dosomething"]

Quite innovative use of multi stage docker build. Of course, you can create a passwd file yourself but this one seems much rather interesting.

link bài gốc

Recent Node.js TSC fuss


node-pre-gyp and CI

Note to self:

When developing new feature for Node.js native module and using node-pre-gyp, make sure you pump version higher so that node-pre-gyp will not pull the prebuilt binary.


tldr

A better man page. This is insanely useful 👍

tar

Archiving utility.
Often combined with a compression method, such as gzip or bzip.

- Create an archive from files:
tar cf target.tar file1 file2 file3

- Create a gzipped archive:
tar czf target.tar.gz file1 file2 file3

- Extract an archive in a target folder:
tar xf source.tar -C folder

- Extract a gzipped archive in the current directory:
tar xzf source.tar.gz

- Extract a bzipped archive in the current directory:
tar xjf source.tar.bz2

- Create a compressed archive, using archive suffix to determine the compression program:
tar caf target.tar.xz file1 file2 file3

- List the contents of a tar file:
tar tvf source.tar
link bài gốc

The power of 2 random choices


Getting started with WebAssembly

Some examples modules

  • siphash24 - SipHash (2-4) implemented in pure Javascript and WebAssembly.

  • blake2b - Blake2b implemented in WASM

  • xsalsa20 - XSalsa20 implemented in Javascript and WebAssembly

Follow Mathias Buus on GitHub. He’s has published quite a few interesting things about WebAssembly.


camaro

Successor to xpath-object-transform

camaro is an utility to transform XML to JSON, using Node.js binding to native XML parser pugixml, one of the fastest XML parser around.

  • Faster. A lot faster.
  • Building time is also faster.
  • Mostly backward compatible with xpath-object-transform. I haven’t cover all the cases though.
  • pre-built binaries included for some distro. Will include more in the future.

Featured on NodeWeekly #192 and npm addict

link bài gốc

Parsing XML at the Speed of Light

This chapter describes various performance tricks that allowed the author to write a very high-performing parser in C++: pugixml. While the techniques were used for an XML parser, most of them can be applied to parsers of other formats or even unrelated software (e.g., memory management algorithms are widely applicable beyond parsers).

Found out about this gem, recommended by the author of “Writing a Really, Really Fast JSON Parser”. This is a really good post as well.

link bài gốc

Redisearch - full text search with Redis

Very young but interesting project.

Might save you from introducing something new your project just for full text search (chances are you probably already have Redis in your tech stack)

Here’s a dockerfile for Redis 4.0 RC3 and Redisearch 0.16 for you to fiddle with.

link bài gốc