Back to Bit

Docker containers for bit harmony.

scripts/docker-teambit-bit/README.md

14.8.9-server.15.0 KB
Original Source

Docker containers for bit harmony.

This dockers are not dealing with legacy bit (pre-harmony) for legacy bit please refer to bit-docker

Structure

  • Dockerfile-bit: A docker file which installs bvm and then uses bvm to install bit. This docker is usually useful for running bit commands like tag and export on CI machine
  • Dockerfile-bit-server: A docker file based on the Dockerfile-bit (using from) which creates a bare scope, and initializes the bit server on it (bit start)
  • Dockerfile-symphony: For internal use only

Using from Dockerhub

The docker images hosted on Dockerhub on those links Dockerfile-bit and Dockerfile-bit-server

Building locally

  1. cd scripts/docker-teambit-bit
  2. first build the bit docker - docker build -f ./Dockerfile-bit -t bitcli/bit:latest .
  3. second build the bit server docker - docker build -f ./Dockerfile-bit-server -t bitcli/bit-server:latest .

Running containers

Run the cli container

  1. docker run -it bitcli/bit:latest /bin/bash
  2. bit -v to see bit's version to make sure it works

Run the server container

  1. docker run -it -p {host-port}:3000 bitcli/bit-server:latest - replace the host port with the port you want to use on your host machine, for example 5000
  2. browse http://localhost:{host-port} and make sure you see the bit's ui

Exporting components to bit server

  1. Make sure you run the server container and validate it works
  2. On your local workspace run bit remote add http://localhost:{host-port} you should get a message saying remote-scope was added
  3. Set remote-scope on your workspace.jsonc as defaultScope
  4. Run bit export

Advanced usage

Using specific version of bit on the bit server

Bit server is getting a BIT_VERSION argument which is used in the FROM statement. You can use it with docker build -f ./Dockerfile-bit-server --build-arg BIT_VERSION={version} -t bitcli/bit-server:{version} . This will make your server to fetch the cli container from Dockerhub with the specified version

Change bare scope name and location on the server container

The scope name is defined by the folder name of the containing scope (remote-scope by default). This name is then later used for setting it up in the workspace.jsonc file. In case you want to change it you can pass the build arg called SCOPE_PATH like --build-arg SCOPE_PATH=/root/custom-remote-scope

Using volume to make sure data is persisted

In order to persist the scope data, you want the scope folder to live outside the container in the host machine. You can use bind mounts to do so: docker run -it -v {scope-path-on-host}:/root/remote-scope -p {host-port}:3000 bitcli/bit-server:latest

Usually it's better to use volumes than bind mounts, or even handle the mounts by an orchestrator like Kubernetes but this topics is out of the scope in this guide

Combining scope volume with scope name/location

When combining change of the scope name/location and volume you have to make sure the location provided in the SCOPE_PATH in the build arg is matching the target in the volume: docker run -it -v {scope-path-on-host}:/root/custom-remote-scope -build-arg SCOPE_PATH=/root/custom-remote-scope -p {host-port}:3000 bitcli/bit-server:latest See the /root/custom-remote-scope is used both in the -v arg after the : and as the SCOPE_PATH value.

Watch bit server logs on host machine

Since the bit start command at the moment can't be run as detached, you will need a way to run it as the main command and to monitor the logs at the same time. In order to do so, we will connect the logs dir on the container to a dir in the host using bind mounts. In order to watch the bit logs, you will need to mount the logs directory in the host machine. like this: docker run -it -v {logs-dir-on-host}:/root/Library/Caches/Bit/logs -p {host-port}:3000 bitcli/bit-server:latest An example with actual values (use /root/bit-server-docker-logs for logs on host and port 5000 on host): docker run -it -v /root/bit-server-docker-logs:/root/Library/Caches/Bit/logs -p 5000:3000 bitcli/bit-server:latest

In most cases it make sense to use tmpfs-mounts for this, but this as well is out of the scope for this guide

Important notes

  • Do not mount the same scope directory on the host to multiple bit-server containers. Bit is using different in memory cache mechanism, so mount the same dir into different servers instances, might produce unpredictable outcome.

Troubleshooting

  • Problem: Running bit start on the server container is killed with code 137 Solution: Increase the memory provided by the host machine (usually 4GB should be enough - this is also the value we provide for the node process by NODE_OPTIONS=--max_old_space_size=4096). For example in mac - docker for mac resources