Skip to content

Instantly share code, notes, and snippets.

@steshaw
Last active March 18, 2023 00:14
Show Gist options
  • Save steshaw/8610888c563d8cfcd7df93b473e02dd6 to your computer and use it in GitHub Desktop.
Save steshaw/8610888c563d8cfcd7df93b473e02dd6 to your computer and use it in GitHub Desktop.
Chainsail container image build times

First run

Very first run on freshly installed machine.

Total elapsed time: 18m22s

  • chainsail-celery-worker 194.0s
  • chainsail-scheduler 63.6s
  • chainsail-nginx 31.8s
  • chainsail-user-code 237.0s
  • chainsail-httpstan-server 172.7s
  • chainsail-mpi-node-k8s 361.5s
  • chainsail-mcmc-stats-server 42.0s

Build log

$ make images
Building docker images...
docker build -t "chainsail-celery-worker:latest" -f ./docker/celery/Dockerfile .
[+] Building 194.0s (20/20) FINISHED
 => [internal] load build definition from Dockerfile                                                                0.1s
 => => transferring dockerfile: 2.23kB                                                                              0.0s
 => [internal] load .dockerignore                                                                                   0.1s
 => => transferring context: 322B                                                                                   0.0s
 => [internal] load metadata for docker.io/library/python:3.8.7-slim                                                9.9s
 => [base 1/3] FROM docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b22  24.6s
 => => resolve docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b22733218  0.0s
 => => sha256:cbef73715c9a0db92ae2ef79d2f1da3d89938a37f315ebc2463803b985ed3cff 10.68MB / 10.68MB                   13.6s
 => => sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b22733218fd03b1b1 1.86kB / 1.86kB                      0.0s
 => => sha256:5665c4473a916537f3a9b4e610abb482e2bae6eba856bd45d01cee741e12159f 1.37kB / 1.37kB                      0.0s
 => => sha256:20b06bd8f030973c369b0a3d84db601de540f75c423fdb152510d109015f4baa 7.65kB / 7.65kB                      0.0s
 => => sha256:45b42c59be334ecda0daaa139b2f7d310e45c564c5f12263b1b8e68ec9e810ed 27.10MB / 27.10MB                   22.7s
 => => sha256:f875e16ab19cd1fe91a8dec4e53d46321630bfd611851b1817341c3302f638c2 2.77MB / 2.77MB                      2.8s
 => => sha256:8ad3aa474633ababfa4d4c4a62c87e7406a76d7b7825f20f5900f5bef297c16f 233B / 233B                          3.1s
 => => sha256:847bc7dff64c7c1034befd0fa4c50ee7e99608eaddcb2711bcd123ffddfdc105 2.45MB / 2.45MB                      6.3s
 => => extracting sha256:45b42c59be334ecda0daaa139b2f7d310e45c564c5f12263b1b8e68ec9e810ed                           0.5s
 => => extracting sha256:f875e16ab19cd1fe91a8dec4e53d46321630bfd611851b1817341c3302f638c2                           0.1s
 => => extracting sha256:cbef73715c9a0db92ae2ef79d2f1da3d89938a37f315ebc2463803b985ed3cff                           0.2s
 => => extracting sha256:8ad3aa474633ababfa4d4c4a62c87e7406a76d7b7825f20f5900f5bef297c16f                           0.0s
 => => extracting sha256:847bc7dff64c7c1034befd0fa4c50ee7e99608eaddcb2711bcd123ffddfdc105                           0.3s
 => [internal] load build context                                                                                   0.1s
 => => transferring context: 460.34kB                                                                               0.0s
 => [base 2/3] RUN mkdir -p /app/deps && mkdir -p /run/sshd                                                         0.5s
 => [base 3/3] WORKDIR /app                                                                                         0.2s
 => [builder-common 1/2] RUN apt-get update && apt-get install -y wget unzip git build-essential libffi-dev libss  68.3s
 => [system-deps 1/1] RUN apt-get update &&     apt-get install -y curl wget unzip openssh-client openssh-server   33.1s
 => [builder-common 2/2] RUN pip install --upgrade pip && pip install "poetry==1.3.0"                              22.1s
 => [builder 1/8] COPY ./lib/common /app/lib/common                                                                 0.2s
 => [builder 2/8] COPY ./lib/grpc /app/lib/grpc                                                                     0.1s
 => [builder 3/8] RUN mkdir -p /app/app/scheduler                                                                   0.4s
 => [builder 4/8] COPY ./app/scheduler/pyproject.toml /app/app/scheduler                                            0.2s
 => [builder 5/8] COPY ./app/scheduler/poetry.lock /app/app/scheduler                                               0.2s
 => [builder 6/8] RUN cd /app/app/scheduler &&     poetry config virtualenvs.in-project true &&     poetry run pi  56.0s
 => [builder 7/8] COPY ./app/scheduler /app/app/scheduler                                                           0.1s
 => [builder 8/8] RUN cd /app/app/scheduler &&     poetry install --no-dev                                          1.7s
 => [app 1/1] COPY --from=builder /app /app                                                                         3.0s
 => exporting to image                                                                                              3.5s
 => => exporting layers                                                                                             3.5s
 => => writing image sha256:f006da5ba2386104f11a744b686cf4e088ba60995b54e40d818007c8bbc7af8f                        0.0s
 => => naming to docker.io/library/chainsail-celery-worker:latest                                                   0.0s
docker build -t "chainsail-scheduler:latest" -f ./docker/scheduler/Dockerfile .
[+] Building 63.6s (16/16) FINISHED
 => [internal] load build definition from Dockerfile                                                                0.0s
 => => transferring dockerfile: 1.99kB                                                                              0.0s
 => [internal] load .dockerignore                                                                                   0.1s
 => => transferring context: 322B                                                                                   0.0s
 => [internal] load metadata for docker.io/library/python:3.8.7-slim                                                1.0s
 => [base 1/3] FROM docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b227  0.0s
 => [internal] load build context                                                                                   0.0s
 => => transferring context: 4.82kB                                                                                 0.0s
 => CACHED [base 2/3] RUN mkdir -p /app/deps && mkdir -p /run/sshd                                                  0.0s
 => CACHED [base 3/3] WORKDIR /app                                                                                  0.0s
 => [system-deps 1/1] RUN apt-get update &&     apt-get install -y curl wget unzip libncurses5-dev libncursesw5-d  21.2s
 => CACHED [builder-common 1/2] RUN apt-get update && apt-get install -y wget unzip git build-essential libffi-dev  0.0s
 => CACHED [builder-common 2/2] RUN pip install --upgrade pip && pip install "poetry==1.3.0"                        0.0s
 => CACHED [builder 1/4] COPY ./lib/common /app/lib/common                                                          0.0s
 => CACHED [builder 2/4] COPY ./lib/grpc /app/lib/grpc                                                              0.0s
 => [builder 3/4] COPY ./app/scheduler /app/app/scheduler                                                           0.2s
 => [builder 4/4] RUN cd /app/app/scheduler &&     poetry config virtualenvs.in-project true &&     poetry run pi  53.5s
 => [app 1/1] COPY --from=builder /app /app                                                                         3.0s
 => exporting to image                                                                                              3.2s
 => => exporting layers                                                                                             3.2s
 => => writing image sha256:5ca9751de5b5c255a8ee7fde07bf386e35f44ca4c5b587352d7bca96356f4e0b                        0.0s
 => => naming to docker.io/library/chainsail-scheduler:latest                                                       0.0s
docker build -t "chainsail-nginx:latest" -f ./docker/nginx/Dockerfile .
[+] Building 31.8s (7/7) FINISHED
 => [internal] load .dockerignore                                                                                   0.0s
 => => transferring context: 322B                                                                                   0.0s
 => [internal] load build definition from Dockerfile                                                                0.1s
 => => transferring dockerfile: 116B                                                                                0.0s
 => [internal] load metadata for docker.io/library/nginx:latest                                                     3.1s
 => [internal] load build context                                                                                   0.1s
 => => transferring context: 829B                                                                                   0.0s
 => [1/2] FROM docker.io/library/nginx:latest@sha256:aa0afebbb3cfa473099a62c4b32e9b3fb73ed23f2a75a65ce1d4b4f55a5c  27.4s
 => => resolve docker.io/library/nginx:latest@sha256:aa0afebbb3cfa473099a62c4b32e9b3fb73ed23f2a75a65ce1d4b4f55a5c2  0.0s
 => => sha256:904b8cb13b932e23230836850610fa45dce9eb0650d5618c2b1487c2a4f577b8 7.66kB / 7.66kB                      0.0s
 => => sha256:3f9582a2cbe7197f39185419c0ced2c986389f8fc6aa805e1f5c090eea6511e0 31.41MB / 31.41MB                   17.4s
 => => sha256:9a8c6f28671867118799d40ec6748ffbd9eab3747503ca47a2a79856dffc7553 25.47MB / 25.47MB                   26.2s
 => => sha256:942ae2dfd73088b54d7151a3c3fd5af038a51c50029bfcfd21f1e650d9579967 1.57kB / 1.57kB                      0.0s
 => => sha256:e81b85700bc2530b1298885f74210138872f60cd139920b54aef3d268d61f0de 626B / 626B                          0.3s
 => => sha256:aa0afebbb3cfa473099a62c4b32e9b3fb73ed23f2a75a65ce1d4b4f55a5c2ef2 1.86kB / 1.86kB                      0.0s
 => => sha256:73ae4d4511202a823260a789f97afb3a46b8c9172ae8d99d22a5a16ad2fa673b 956B / 956B                          0.6s
 => => sha256:6058e3569a68e825f1085592ab0bb04c29345726119ed059ad933c0d9af5f533 772B / 772B                          1.0s
 => => sha256:3a1b8f20135650110763d223f82a25007e00b28b268e6a875fe87c85ba7570e4 1.40kB / 1.40kB                      1.3s
 => => extracting sha256:3f9582a2cbe7197f39185419c0ced2c986389f8fc6aa805e1f5c090eea6511e0                           0.6s
 => => extracting sha256:9a8c6f28671867118799d40ec6748ffbd9eab3747503ca47a2a79856dffc7553                           0.3s
 => => extracting sha256:e81b85700bc2530b1298885f74210138872f60cd139920b54aef3d268d61f0de                           0.0s
 => => extracting sha256:73ae4d4511202a823260a789f97afb3a46b8c9172ae8d99d22a5a16ad2fa673b                           0.0s
 => => extracting sha256:6058e3569a68e825f1085592ab0bb04c29345726119ed059ad933c0d9af5f533                           0.0s
 => => extracting sha256:3a1b8f20135650110763d223f82a25007e00b28b268e6a875fe87c85ba7570e4                           0.0s
 => [2/2] COPY docker/nginx/nginx_config /etc/nginx/conf.d/default.conf                                             0.2s
 => exporting to image                                                                                              0.9s
 => => exporting layers                                                                                             0.9s
 => => writing image sha256:f7d62307a0b2ac5a2a831c8106320f26edeefa7a76693df9222f5fb5115970df                        0.0s
 => => naming to docker.io/library/chainsail-nginx:latest                                                           0.0s
docker build -t "chainsail-user-code:latest" -f docker/user-code/Dockerfile .
[+] Building 237.0s (23/23) FINISHED
 => [internal] load .dockerignore                                                                                   0.1s
 => => transferring context: 322B                                                                                   0.0s
 => [internal] load build definition from Dockerfile                                                                0.1s
 => => transferring dockerfile: 2.38kB                                                                              0.0s
 => [internal] load metadata for docker.io/library/python:3.8.7-slim                                                1.7s
 => [internal] load build context                                                                                   0.1s
 => => transferring context: 208.70kB                                                                               0.0s
 => [base 1/3] FROM docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b227  0.0s
 => CACHED [base 2/3] RUN mkdir -p /app/deps && mkdir -p /run/sshd                                                  0.0s
 => CACHED [base 3/3] WORKDIR /app                                                                                  0.0s
 => CACHED [builder-common 1/2] RUN apt-get update && apt-get install -y wget unzip git build-essential libffi-dev  0.0s
 => [system-deps 1/3] RUN echo 'deb http://deb.debian.org/debian stable main' >> /etc/apt/sources.list              0.4s
 => [builder-common 2/2] RUN pip install --upgrade pip && pip install "poetry==1.1.10"                             36.4s
 => [system-deps 2/3] RUN apt update -y                                                                            22.5s
 => [system-deps 3/3] RUN apt-get install -y gcc build-essential curl wget unzip libopenblas-dev &&     rm -rf /  125.9s
 => [builder 1/4] COPY ./lib/grpc /app/lib/grpc                                                                     0.2s
 => [builder 2/4] COPY ./lib/common /app/lib/common                                                                 0.1s
 => [builder 3/4] COPY ./app/user_code_server /app/app/user_code_server                                             0.1s
 => [builder 4/4] RUN cd /app/app/user_code_server &&     poetry config virtualenvs.in-project true &&     poetry  48.1s
 => [app 1/6] COPY --from=builder /app /app                                                                         1.4s
 => [app 2/6] RUN mkdir -p /probability                                                                             0.4s
 => [app 3/6] COPY docker/user-code/entrypoint.sh /app/entrypoint.sh                                                0.2s
 => [app 4/6] RUN chmod 555 /app/entrypoint.sh                                                                      0.5s
 => [app 5/6] RUN pip install scipy==1.9.1 numpy==1.23.2 pymc==4.1.7 requests==2.28.1 chainsail-helpers==0.1.4     80.5s
 => [app 6/6] WORKDIR /probability                                                                                  0.1s
 => exporting to image                                                                                              3.3s
 => => exporting layers                                                                                             3.3s
 => => writing image sha256:33f74745275122e4f94243b9a539018d177427ead391cdc4760fec1242ee3468                        0.0s
 => => naming to docker.io/library/chainsail-user-code:latest                                                       0.0s
docker build -t "chainsail-httpstan-server:latest" -f docker/httpstan-server/Dockerfile .
[+] Building 172.7s (9/9) FINISHED
 => [internal] load .dockerignore                                                                                   0.1s
 => => transferring context: 322B                                                                                   0.0s
 => [internal] load build definition from Dockerfile                                                                0.0s
 => => transferring dockerfile: 542B                                                                                0.0s
 => [internal] load metadata for docker.io/library/python:3.8.7-slim                                                1.3s
 => CACHED [1/5] FROM docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b2  0.0s
 => [2/5] RUN echo 'deb http://deb.debian.org/debian stable main' >> /etc/apt/sources.list                          0.4s
 => [3/5] RUN apt update -y                                                                                        14.4s
 => [4/5] RUN apt install -y gcc build-essential                                                                   94.5s
 => [5/5] RUN pip install --upgrade pip && pip install httpstan                                                    58.3s
 => exporting to image                                                                                              3.6s
 => => exporting layers                                                                                             3.6s
 => => writing image sha256:10ed52125d64541c63fba90deb88993668c4ed996db1e8739cb079d2df3d78ad                        0.0s
 => => naming to docker.io/library/chainsail-httpstan-server:latest                                                 0.0s
docker build -t "chainsail-mpi-node-k8s:latest" -f docker/node/Dockerfile .
[+] Building 361.5s (29/29) FINISHED
 => [internal] load .dockerignore                                                                                   0.1s
 => => transferring context: 322B                                                                                   0.0s
 => [internal] load build definition from Dockerfile                                                                0.1s
 => => transferring dockerfile: 3.87kB                                                                              0.0s
 => [internal] load metadata for docker.io/library/python:3.8.7-slim                                                1.7s
 => [internal] load build context                                                                                   0.1s
 => => transferring context: 285.17kB                                                                               0.0s
 => [base 1/3] FROM docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b227  0.0s
 => CACHED [base 2/3] RUN mkdir -p /app/deps && mkdir -p /run/sshd                                                  0.0s
 => CACHED [base 3/3] WORKDIR /app                                                                                  0.0s
 => CACHED [builder-common 1/2] RUN apt-get update && apt-get install -y wget unzip git build-essential libffi-dev  0.0s
 => CACHED [builder-common 2/2] RUN pip install --upgrade pip && pip install "poetry==1.3.0"                        0.0s
 => [system-deps 1/6] RUN apt-get update &&     apt-get install -y curl wget unzip openssh-client openssh-server   36.0s
 => [builder 1/7] RUN mkdir /tmp/openmpi &&     cd /tmp/openmpi &&     wget https://download.open-mpi.org/releas  281.6s
 => [system-deps 2/6] RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config   0.5s
 => [system-deps 3/6] RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config    0.5s
 => [system-deps 4/6] RUN sed -i 's/#StrictModes yes/StrictModes no/' /etc/ssh/sshd_config                          0.5s
 => [system-deps 5/6] RUN sed -i 's/#Port 22/Port 26/' /etc/ssh/sshd_config                                         0.6s
 => [system-deps 6/6] RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/  0.5s
 => [builder 2/7] COPY ./lib/common /app/lib/common                                                                 0.2s
 => [builder 3/7] COPY ./lib/schedule_estimation /app/lib/schedule_estimation                                       0.2s
 => [builder 4/7] COPY ./lib/runners /app/lib/runners                                                               0.2s
 => [builder 5/7] COPY ./lib/grpc /app/lib/grpc                                                                     0.2s
 => [builder 6/7] COPY ./app/controller /app/app/controller                                                         0.2s
 => [builder 7/7] RUN cd /app/app/controller &&     poetry config virtualenvs.in-project true &&     poetry run p  70.1s
 => [app 1/6] COPY --from=builder /app /app                                                                         1.8s
 => [app 2/6] ADD docker/node/.openmpi /root/.openmpi                                                               0.2s
 => [app 3/6] ADD docker/node/ssh/ssh_config /etc/ssh/ssh_config                                                    0.1s
 => [app 4/6] ADD docker/node/entrypoint.sh /app/entrypoint.sh                                                      0.2s
 => [app 5/6] RUN mkdir -p /probability                                                                             0.4s
 => [app 6/6] WORKDIR /probability                                                                                  0.2s
 => exporting to image                                                                                              2.4s
 => => exporting layers                                                                                             2.4s
 => => writing image sha256:738f783fab929f75d6338b7c6f3c7abe9c4ebf250413eec47808b5572fc529e0                        0.0s
 => => naming to docker.io/library/chainsail-mpi-node-k8s:latest                                                    0.0s
docker build -t "chainsail-mcmc-stats-server:latest" -f docker/mcmc-stats-server/Dockerfile .
[+] Building 42.0s (16/16) FINISHED
 => [internal] load build definition from Dockerfile                                                                0.1s
 => => transferring dockerfile: 2.05kB                                                                              0.0s
 => [internal] load .dockerignore                                                                                   0.1s
 => => transferring context: 322B                                                                                   0.0s
 => [internal] load metadata for docker.io/library/python:3.8.7-slim                                                1.6s
 => [base 1/3] FROM docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b227  0.0s
 => [internal] load build context                                                                                   0.1s
 => => transferring context: 25.08kB                                                                                0.0s
 => CACHED [base 2/3] RUN mkdir -p /app/deps && mkdir -p /run/sshd                                                  0.0s
 => CACHED [base 3/3] WORKDIR /app                                                                                  0.0s
 => CACHED [builder-common 1/2] RUN apt-get update && apt-get install -y wget unzip git build-essential libffi-dev  0.0s
 => CACHED [builder-common 2/2] RUN pip install --upgrade pip && pip install "poetry==1.1.10"                       0.0s
 => [builder 1/4] COPY ./lib/common /app/lib/common                                                                 0.1s
 => [builder 2/4] COPY ./lib/grpc /app/lib/grpc                                                                     0.1s
 => [builder 3/4] COPY ./app/mcmc_stats_server /app/app/mcmc_stats_server                                           0.1s
 => [builder 4/4] RUN cd /app/app/mcmc_stats_server &&     poetry config virtualenvs.in-project true &&     poetr  35.5s
 => CACHED [system-deps 1/1] RUN apt-get update &&     apt-get install -y curl wget unzip libncurses5-dev libncurs  0.0s
 => [app 1/1] COPY --from=builder /app /app                                                                         1.4s
 => exporting to image                                                                                              1.6s
 => => exporting layers                                                                                             1.6s
 => => writing image sha256:46352d1c1110da025dae0dc8325d6c48511c5ac5f6e4abf9fecaabf464505817                        0.0s
 => => naming to docker.io/library/chainsail-mcmc-stats-server:latest                                               0.0s
Done.

Second run

Pruned with

docker system prune --all --volumes --force

Total elapsed time: 15m6s

  • chainsail-celery-worker 174.6s
  • chainsail-scheduler 57.7s
  • chainsail-nginx 26.6s
  • chainsail-user-code 148.4s
  • chainsail-httpstan-server 109.1s
  • chainsail-mpi-node-k8s 358.0s
  • chainsail-mcmc-stats-server 30.4s

Build log

$ time make images
Building docker images...
docker build -t "chainsail-celery-worker:latest" -f ./docker/celery/Dockerfile .
[+] Building 174.6s (20/20) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                         0.1s
 => => transferring dockerfile: 2.23kB                                                                                                                       0.0s
 => [internal] load .dockerignore                                                                                                                            0.1s
 => => transferring context: 322B                                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/python:3.8.7-slim                                                                                         3.1s
 => [base 1/3] FROM docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b22733218fd03b1b1                             29.2s
 => => resolve docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b22733218fd03b1b1                                   0.1s
 => => sha256:45b42c59be334ecda0daaa139b2f7d310e45c564c5f12263b1b8e68ec9e810ed 27.10MB / 27.10MB                                                            27.4s
 => => sha256:f875e16ab19cd1fe91a8dec4e53d46321630bfd611851b1817341c3302f638c2 2.77MB / 2.77MB                                                               8.2s
 => => sha256:cbef73715c9a0db92ae2ef79d2f1da3d89938a37f315ebc2463803b985ed3cff 10.68MB / 10.68MB                                                            18.5s
 => => sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b22733218fd03b1b1 1.86kB / 1.86kB                                                               0.0s
 => => sha256:5665c4473a916537f3a9b4e610abb482e2bae6eba856bd45d01cee741e12159f 1.37kB / 1.37kB                                                               0.0s
 => => sha256:20b06bd8f030973c369b0a3d84db601de540f75c423fdb152510d109015f4baa 7.65kB / 7.65kB                                                               0.0s
 => => sha256:8ad3aa474633ababfa4d4c4a62c87e7406a76d7b7825f20f5900f5bef297c16f 233B / 233B                                                                  14.2s
 => => sha256:847bc7dff64c7c1034befd0fa4c50ee7e99608eaddcb2711bcd123ffddfdc105 2.45MB / 2.45MB                                                              18.9s
 => => extracting sha256:45b42c59be334ecda0daaa139b2f7d310e45c564c5f12263b1b8e68ec9e810ed                                                                    0.5s
 => => extracting sha256:f875e16ab19cd1fe91a8dec4e53d46321630bfd611851b1817341c3302f638c2                                                                    0.1s
 => => extracting sha256:cbef73715c9a0db92ae2ef79d2f1da3d89938a37f315ebc2463803b985ed3cff                                                                    0.3s
 => => extracting sha256:8ad3aa474633ababfa4d4c4a62c87e7406a76d7b7825f20f5900f5bef297c16f                                                                    0.0s
 => => extracting sha256:847bc7dff64c7c1034befd0fa4c50ee7e99608eaddcb2711bcd123ffddfdc105                                                                    0.2s
 => [internal] load build context                                                                                                                            0.1s
 => => transferring context: 460.34kB                                                                                                                        0.0s
 => [base 2/3] RUN mkdir -p /app/deps && mkdir -p /run/sshd                                                                                                  0.5s
 => [base 3/3] WORKDIR /app                                                                                                                                  0.2s
 => [system-deps 1/1] RUN apt-get update &&     apt-get install -y curl wget unzip openssh-client openssh-server libmagic1 &&     rm -rf /var/lib/apt/list  30.7s
 => [builder-common 1/2] RUN apt-get update && apt-get install -y wget unzip git build-essential libffi-dev libssl-dev zlib1g-dev                           58.9s
 => [builder-common 2/2] RUN pip install --upgrade pip && pip install "poetry==1.3.0"                                                                       20.3s
 => [builder 1/8] COPY ./lib/common /app/lib/common                                                                                                          0.2s
 => [builder 2/8] COPY ./lib/grpc /app/lib/grpc                                                                                                              0.3s
 => [builder 3/8] RUN mkdir -p /app/app/scheduler                                                                                                            0.6s
 => [builder 4/8] COPY ./app/scheduler/pyproject.toml /app/app/scheduler                                                                                     0.2s
 => [builder 5/8] COPY ./app/scheduler/poetry.lock /app/app/scheduler                                                                                        0.2s
 => [builder 6/8] RUN cd /app/app/scheduler &&     poetry config virtualenvs.in-project true &&     poetry run pip install --upgrade pip &&     poetry ins  49.5s
 => [builder 7/8] COPY ./app/scheduler /app/app/scheduler                                                                                                    0.1s
 => [builder 8/8] RUN cd /app/app/scheduler &&     poetry install --no-dev                                                                                   2.1s
 => [app 1/1] COPY --from=builder /app /app                                                                                                                  3.0s
 => exporting to image                                                                                                                                       3.4s
 => => exporting layers                                                                                                                                      3.4s
 => => writing image sha256:209c3a3f7afc57e5f43483c002add40ed26b4d0bf8c6edb76c4606714a380dbc                                                                 0.0s
 => => naming to docker.io/library/chainsail-celery-worker:latest                                                                                            0.0s
docker build -t "chainsail-scheduler:latest" -f ./docker/scheduler/Dockerfile .
[+] Building 57.7s (16/16) FINISHED
 => [internal] load .dockerignore                                                                                                                            0.0s
 => => transferring context: 322B                                                                                                                            0.0s
 => [internal] load build definition from Dockerfile                                                                                                         0.1s
 => => transferring dockerfile: 1.99kB                                                                                                                       0.0s
 => [internal] load metadata for docker.io/library/python:3.8.7-slim                                                                                         0.8s
 => [base 1/3] FROM docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b22733218fd03b1b1                              0.0s
 => [internal] load build context                                                                                                                            0.0s
 => => transferring context: 4.82kB                                                                                                                          0.0s
 => CACHED [base 2/3] RUN mkdir -p /app/deps && mkdir -p /run/sshd                                                                                           0.0s
 => CACHED [base 3/3] WORKDIR /app                                                                                                                           0.0s
 => [system-deps 1/1] RUN apt-get update &&     apt-get install -y curl wget unzip libncurses5-dev libncursesw5-dev libmagic1 &&     rm -rf /var/lib/apt/l  20.5s
 => CACHED [builder-common 1/2] RUN apt-get update && apt-get install -y wget unzip git build-essential libffi-dev libssl-dev zlib1g-dev                     0.0s
 => CACHED [builder-common 2/2] RUN pip install --upgrade pip && pip install "poetry==1.3.0"                                                                 0.0s
 => CACHED [builder 1/4] COPY ./lib/common /app/lib/common                                                                                                   0.0s
 => CACHED [builder 2/4] COPY ./lib/grpc /app/lib/grpc                                                                                                       0.0s
 => [builder 3/4] COPY ./app/scheduler /app/app/scheduler                                                                                                    0.2s
 => [builder 4/4] RUN cd /app/app/scheduler &&     poetry config virtualenvs.in-project true &&     poetry run pip install --upgrade pip &&     poetry ins  47.6s
 => [app 1/1] COPY --from=builder /app /app                                                                                                                  3.0s
 => exporting to image                                                                                                                                       3.3s
 => => exporting layers                                                                                                                                      3.3s
 => => writing image sha256:377c8992c8e9836003765fc314edbe57d81c84d2a0eda2850edff0cfee7f57da                                                                 0.0s
 => => naming to docker.io/library/chainsail-scheduler:latest                                                                                                0.0s
docker build -t "chainsail-nginx:latest" -f ./docker/nginx/Dockerfile .
[+] Building 26.6s (7/7) FINISHED
 => [internal] load .dockerignore                                                                                                                            0.1s
 => => transferring context: 322B                                                                                                                            0.0s
 => [internal] load build definition from Dockerfile                                                                                                         0.1s
 => => transferring dockerfile: 116B                                                                                                                         0.0s
 => [internal] load metadata for docker.io/library/nginx:latest                                                                                              3.4s
 => [1/2] FROM docker.io/library/nginx:latest@sha256:aa0afebbb3cfa473099a62c4b32e9b3fb73ed23f2a75a65ce1d4b4f55a5c2ef2                                       22.1s
 => => resolve docker.io/library/nginx:latest@sha256:aa0afebbb3cfa473099a62c4b32e9b3fb73ed23f2a75a65ce1d4b4f55a5c2ef2                                        0.0s
 => => sha256:942ae2dfd73088b54d7151a3c3fd5af038a51c50029bfcfd21f1e650d9579967 1.57kB / 1.57kB                                                               0.0s
 => => sha256:3f9582a2cbe7197f39185419c0ced2c986389f8fc6aa805e1f5c090eea6511e0 31.41MB / 31.41MB                                                            17.2s
 => => sha256:9a8c6f28671867118799d40ec6748ffbd9eab3747503ca47a2a79856dffc7553 25.47MB / 25.47MB                                                            20.4s
 => => sha256:aa0afebbb3cfa473099a62c4b32e9b3fb73ed23f2a75a65ce1d4b4f55a5c2ef2 1.86kB / 1.86kB                                                               0.0s
 => => sha256:904b8cb13b932e23230836850610fa45dce9eb0650d5618c2b1487c2a4f577b8 7.66kB / 7.66kB                                                               0.0s
 => => sha256:e81b85700bc2530b1298885f74210138872f60cd139920b54aef3d268d61f0de 626B / 626B                                                                   0.8s
 => => sha256:73ae4d4511202a823260a789f97afb3a46b8c9172ae8d99d22a5a16ad2fa673b 956B / 956B                                                                   1.1s
 => => sha256:6058e3569a68e825f1085592ab0bb04c29345726119ed059ad933c0d9af5f533 772B / 772B                                                                   1.4s
 => => sha256:3a1b8f20135650110763d223f82a25007e00b28b268e6a875fe87c85ba7570e4 1.40kB / 1.40kB                                                               1.7s
 => => extracting sha256:3f9582a2cbe7197f39185419c0ced2c986389f8fc6aa805e1f5c090eea6511e0                                                                    0.6s
 => => extracting sha256:9a8c6f28671867118799d40ec6748ffbd9eab3747503ca47a2a79856dffc7553                                                                    0.3s
 => => extracting sha256:e81b85700bc2530b1298885f74210138872f60cd139920b54aef3d268d61f0de                                                                    0.0s
 => => extracting sha256:73ae4d4511202a823260a789f97afb3a46b8c9172ae8d99d22a5a16ad2fa673b                                                                    0.0s
 => => extracting sha256:6058e3569a68e825f1085592ab0bb04c29345726119ed059ad933c0d9af5f533                                                                    0.0s
 => => extracting sha256:3a1b8f20135650110763d223f82a25007e00b28b268e6a875fe87c85ba7570e4                                                                    0.0s
 => [internal] load build context                                                                                                                            0.0s
 => => transferring context: 829B                                                                                                                            0.0s
 => [2/2] COPY docker/nginx/nginx_config /etc/nginx/conf.d/default.conf                                                                                      0.3s
 => exporting to image                                                                                                                                       0.7s
 => => exporting layers                                                                                                                                      0.7s
 => => writing image sha256:a8dccf3e33879c5e5b6e504b56f3890bc22fc6e4251a8dd0a535c53614b119b2                                                                 0.0s
 => => naming to docker.io/library/chainsail-nginx:latest                                                                                                    0.0s
docker build -t "chainsail-user-code:latest" -f docker/user-code/Dockerfile .
[+] Building 148.4s (23/23) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                         0.1s
 => => transferring dockerfile: 2.38kB                                                                                                                       0.0s
 => [internal] load .dockerignore                                                                                                                            0.1s
 => => transferring context: 322B                                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/python:3.8.7-slim                                                                                         1.1s
 => [base 1/3] FROM docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b22733218fd03b1b1                              0.0s
 => [internal] load build context                                                                                                                            0.0s
 => => transferring context: 208.70kB                                                                                                                        0.0s
 => CACHED [base 2/3] RUN mkdir -p /app/deps && mkdir -p /run/sshd                                                                                           0.0s
 => CACHED [base 3/3] WORKDIR /app                                                                                                                           0.0s
 => CACHED [builder-common 1/2] RUN apt-get update && apt-get install -y wget unzip git build-essential libffi-dev libssl-dev zlib1g-dev                     0.0s
 => [builder-common 2/2] RUN pip install --upgrade pip && pip install "poetry==1.1.10"                                                                      21.8s
 => [system-deps 1/3] RUN echo 'deb http://deb.debian.org/debian stable main' >> /etc/apt/sources.list                                                       0.4s
 => [system-deps 2/3] RUN apt update -y                                                                                                                     13.0s
 => [system-deps 3/3] RUN apt-get install -y gcc build-essential curl wget unzip libopenblas-dev &&     rm -rf /var/lib/apt/lists/*                         78.2s
 => [builder 1/4] COPY ./lib/grpc /app/lib/grpc                                                                                                              0.2s
 => [builder 2/4] COPY ./lib/common /app/lib/common                                                                                                          0.2s
 => [builder 3/4] COPY ./app/user_code_server /app/app/user_code_server                                                                                      0.2s
 => [builder 4/4] RUN cd /app/app/user_code_server &&     poetry config virtualenvs.in-project true &&     poetry run pip install --upgrade pip &&     poe  31.5s
 => [app 1/6] COPY --from=builder /app /app                                                                                                                  1.3s
 => [app 2/6] RUN mkdir -p /probability                                                                                                                      0.4s
 => [app 3/6] COPY docker/user-code/entrypoint.sh /app/entrypoint.sh                                                                                         0.2s
 => [app 4/6] RUN chmod 555 /app/entrypoint.sh                                                                                                               0.4s
 => [app 5/6] RUN pip install scipy==1.9.1 numpy==1.23.2 pymc==4.1.7 requests==2.28.1 chainsail-helpers==0.1.4                                              49.8s
 => [app 6/6] WORKDIR /probability                                                                                                                           0.1s
 => exporting to image                                                                                                                                       3.2s
 => => exporting layers                                                                                                                                      3.2s
 => => writing image sha256:2311aaaa0fd860f4ece7fbd5840408ad03ae3995c51295ce1eac86f951217b57                                                                 0.0s
 => => naming to docker.io/library/chainsail-user-code:latest                                                                                                0.0s
docker build -t "chainsail-httpstan-server:latest" -f docker/httpstan-server/Dockerfile .
[+] Building 109.1s (9/9) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                         0.0s
 => => transferring dockerfile: 542B                                                                                                                         0.0s
 => [internal] load .dockerignore                                                                                                                            0.1s
 => => transferring context: 322B                                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/python:3.8.7-slim                                                                                         1.6s
 => CACHED [1/5] FROM docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b22733218fd03b1b1                            0.0s
 => [2/5] RUN echo 'deb http://deb.debian.org/debian stable main' >> /etc/apt/sources.list                                                                   0.4s
 => [3/5] RUN apt update -y                                                                                                                                  8.5s
 => [4/5] RUN apt install -y gcc build-essential                                                                                                            54.9s
 => [5/5] RUN pip install --upgrade pip && pip install httpstan                                                                                             40.1s
 => exporting to image                                                                                                                                       3.5s
 => => exporting layers                                                                                                                                      3.5s
 => => writing image sha256:5837fb2ae3452c80385606cb9a0be189b75dd3fcd140b4c325f435d218a91d61                                                                 0.0s
 => => naming to docker.io/library/chainsail-httpstan-server:latest                                                                                          0.0s
docker build -t "chainsail-mpi-node-k8s:latest" -f docker/node/Dockerfile .
[+] Building 358.0s (29/29) FINISHED
 => [internal] load .dockerignore                                                                                                                            0.1s
 => => transferring context: 322B                                                                                                                            0.0s
 => [internal] load build definition from Dockerfile                                                                                                         0.1s
 => => transferring dockerfile: 3.87kB                                                                                                                       0.0s
 => [internal] load metadata for docker.io/library/python:3.8.7-slim                                                                                         0.9s
 => [internal] load build context                                                                                                                            0.1s
 => => transferring context: 285.17kB                                                                                                                        0.0s
 => [base 1/3] FROM docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b22733218fd03b1b1                              0.0s
 => CACHED [base 2/3] RUN mkdir -p /app/deps && mkdir -p /run/sshd                                                                                           0.0s
 => CACHED [base 3/3] WORKDIR /app                                                                                                                           0.0s
 => CACHED [builder-common 1/2] RUN apt-get update && apt-get install -y wget unzip git build-essential libffi-dev libssl-dev zlib1g-dev                     0.0s
 => CACHED [builder-common 2/2] RUN pip install --upgrade pip && pip install "poetry==1.3.0"                                                                 0.0s
 => [builder 1/7] RUN mkdir /tmp/openmpi &&     cd /tmp/openmpi &&     wget https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.6.tar.gz &&    286.7s
 => [system-deps 1/6] RUN apt-get update &&     apt-get install -y curl wget unzip openssh-client openssh-server &&     rm -rf /var/lib/apt/lists/*         27.1s
 => [system-deps 2/6] RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config                                            0.6s
 => [system-deps 3/6] RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config                                             0.6s
 => [system-deps 4/6] RUN sed -i 's/#StrictModes yes/StrictModes no/' /etc/ssh/sshd_config                                                                   0.5s
 => [system-deps 5/6] RUN sed -i 's/#Port 22/Port 26/' /etc/ssh/sshd_config                                                                                  0.6s
 => [system-deps 6/6] RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd                                 0.6s
 => [builder 2/7] COPY ./lib/common /app/lib/common                                                                                                          0.3s
 => [builder 3/7] COPY ./lib/schedule_estimation /app/lib/schedule_estimation                                                                                0.3s
 => [builder 4/7] COPY ./lib/runners /app/lib/runners                                                                                                        0.3s
 => [builder 5/7] COPY ./lib/grpc /app/lib/grpc                                                                                                              0.2s
 => [builder 6/7] COPY ./app/controller /app/app/controller                                                                                                  0.2s
 => [builder 7/7] RUN cd /app/app/controller &&     poetry config virtualenvs.in-project true &&     poetry run pip install --upgrade pip &&     poetry in  61.5s
 => [app 1/6] COPY --from=builder /app /app                                                                                                                  1.8s
 => [app 2/6] ADD docker/node/.openmpi /root/.openmpi                                                                                                        0.3s
 => [app 3/6] ADD docker/node/ssh/ssh_config /etc/ssh/ssh_config                                                                                             0.2s
 => [app 4/6] ADD docker/node/entrypoint.sh /app/entrypoint.sh                                                                                               0.2s
 => [app 5/6] RUN mkdir -p /probability                                                                                                                      0.5s
 => [app 6/6] WORKDIR /probability                                                                                                                           0.2s
 => exporting to image                                                                                                                                       2.5s
 => => exporting layers                                                                                                                                      2.5s
 => => writing image sha256:5ee56d31ee35ffc2ddc611648844dad2e9ee95bea4062429311851ad962f460c                                                                 0.0s
 => => naming to docker.io/library/chainsail-mpi-node-k8s:latest                                                                                             0.0s
docker build -t "chainsail-mcmc-stats-server:latest" -f docker/mcmc-stats-server/Dockerfile .
[+] Building 30.4s (16/16) FINISHED
 => [internal] load .dockerignore                                                                                                                            0.1s
 => => transferring context: 322B                                                                                                                            0.0s
 => [internal] load build definition from Dockerfile                                                                                                         0.1s
 => => transferring dockerfile: 2.05kB                                                                                                                       0.0s
 => [internal] load metadata for docker.io/library/python:3.8.7-slim                                                                                         1.6s
 => [base 1/3] FROM docker.io/library/python:3.8.7-slim@sha256:ef1eb4df15396b7d660fe99f1a8ad6b54812420e243fc13b22733218fd03b1b1                              0.0s
 => [internal] load build context                                                                                                                            0.0s
 => => transferring context: 25.08kB                                                                                                                         0.0s
 => CACHED [base 2/3] RUN mkdir -p /app/deps && mkdir -p /run/sshd                                                                                           0.0s
 => CACHED [base 3/3] WORKDIR /app                                                                                                                           0.0s
 => CACHED [builder-common 1/2] RUN apt-get update && apt-get install -y wget unzip git build-essential libffi-dev libssl-dev zlib1g-dev                     0.0s
 => CACHED [builder-common 2/2] RUN pip install --upgrade pip && pip install "poetry==1.1.10"                                                                0.0s
 => [builder 1/4] COPY ./lib/common /app/lib/common                                                                                                          0.3s
 => [builder 2/4] COPY ./lib/grpc /app/lib/grpc                                                                                                              0.2s
 => [builder 3/4] COPY ./app/mcmc_stats_server /app/app/mcmc_stats_server                                                                                    0.2s
 => [builder 4/4] RUN cd /app/app/mcmc_stats_server &&     poetry config virtualenvs.in-project true &&     poetry run pip install --upgrade pip &&     po  23.7s
 => CACHED [system-deps 1/1] RUN apt-get update &&     apt-get install -y curl wget unzip libncurses5-dev libncursesw5-dev libmagic1 &&     rm -rf /var/lib  0.0s
 => [app 1/1] COPY --from=builder /app /app                                                                                                                  1.3s
 => exporting to image                                                                                                                                       1.6s
 => => exporting layers                                                                                                                                      1.6s
 => => writing image sha256:9d319a115d08017507409acc07d867643f0ca2fb739e876b9c15f108a34e43b9                                                                 0.0s
 => => naming to docker.io/library/chainsail-mcmc-stats-server:latest                                                                                        0.0s
Done.

real	15m6.038s
user	0m6.184s
sys	0m3.295s

Script

build-images:

#!/usr/bin/env bash

set -euo pipefail

do-build() {
  time docker build --quiet "$@"
}

do-build -t "chainsail-celery-worker:latest" -f ./docker/celery/Dockerfile .
do-build -t "chainsail-scheduler:latest" -f ./docker/scheduler/Dockerfile .
do-build -t "chainsail-nginx:latest" -f ./docker/nginx/Dockerfile .
do-build -t "chainsail-user-code:latest" -f docker/user-code/Dockerfile .
do-build -t "chainsail-httpstan-server:latest" -f docker/httpstan-server/Dockerfile .
do-build -t "chainsail-mpi-node-k8s:latest" -f docker/node/Dockerfile .
do-build -t "chainsail-mcmc-stats-server:latest" -f docker/mcmc-stats-server/Dockerfile .

Log

Total elapsed time: 14m58.396s

  • chainsail-celery-worker 2m51.477s
  • chainsail-scheduler 1m3.953s
  • chainsail-nginx 0m27.782s
  • chainsail-user-code 2m33.998s
  • chainsail-httpstan-server 1m47.974s
  • chainsail-mpi-node-k8s 5m38.983s
  • chainsail-mcmc-stats-server 0m34.178s
$ time ./build-images
sha256:38fd0a509e5f7970111b3af4e103198d3830cada2e1458d1df7236a0898132ab

real	2m51.477s
user	0m0.582s
sys	0m0.376s
sha256:ffe41af5a5328be4fbc57906cf3c7a019f2c140d226184eabeddfd8edbf71445

real	1m3.953s
user	0m0.188s
sys	0m0.097s
sha256:7d4652f4402ff1653e4f5b218c693b6c827685e5cf103f35adedbb2020f0fc29

real	0m27.782s
user	0m0.229s
sys	0m0.162s
sha256:a7cee67165d376564f1b9da7a83affa8664154d7c9de52f25d8670ed7594453b

real	2m33.998s
user	0m0.480s
sys	0m0.280s
sha256:edb1a1ce1565082d3f32a94d57668c239a8e6f5994625d7b263f9202a2fa7786

real	1m47.974s
user	0m0.376s
sys	0m0.232s
sha256:bc4c6673990693f53a2da519fb3e0c91da668f1b2c4f6d75be29f57295d766a0

real	5m38.983s
user	0m1.853s
sys	0m0.935s
sha256:1b227aca080ae0ffe26e8c717be9cd2ff01b8c85119f71bd536a7ba6e559ef96

real	0m34.178s
user	0m0.194s
sys	0m0.096s

real	14m58.396s
user	0m3.929s
sys	0m2.209s

Script

#!/usr/bin/env bash

set -euo pipefail

do-build() {
  tag=$2
  echo "${tag%%:*}"
  time docker build --quiet "$@"
  echo
}

build-all() {
  do-build -t "chainsail-celery-worker:latest" -f ./docker/celery/Dockerfile .
  do-build -t "chainsail-scheduler:latest" -f ./docker/scheduler/Dockerfile .
  do-build -t "chainsail-nginx:latest" -f ./docker/nginx/Dockerfile .
  do-build -t "chainsail-user-code:latest" -f docker/user-code/Dockerfile .
  do-build -t "chainsail-httpstan-server:latest" -f docker/httpstan-server/Dockerfile .
  do-build -t "chainsail-mpi-node-k8s:latest" -f docker/node/Dockerfile .
  do-build -t "chainsail-mcmc-stats-server:latest" -f docker/mcmc-stats-server/Dockerfile .
}

time build-all

Output

$ ./build-images
chainsail-celery-worker
sha256:02f4dc4a3924221bbcbf6836742a6e102c033d51d0ee4465feb926f6e7671537

real	2m43.634s
user	0m0.612s
sys	0m0.292s

chainsail-scheduler
sha256:ba16ced51e80a08e924d5ac798585e04faa33b333de40afa45e08d7aa8f1a8f0

real	1m2.468s
user	0m0.173s
sys	0m0.119s

chainsail-nginx
sha256:3fcbc2f5e17d5b506b97ce7df8e50249719105b4d6682bc2d7241ea21286acfb

real	0m28.175s
user	0m0.291s
sys	0m0.117s

chainsail-user-code
sha256:d87921923d211301d9137ee3bd81402ce7b34d25defa175a8a5ac9b9c1915c05

real	2m26.228s
user	0m0.493s
sys	0m0.282s

chainsail-httpstan-server
sha256:7c1838f847415730e688a7baf7003c01c11e24bffbd09b3496396cad6ec01471

real	1m48.611s
user	0m0.399s
sys	0m0.238s

chainsail-mpi-node-k8s
sha256:116c457686f15b519fb21e60da8e6bf69a1a7c51643c95ae483fa387f6b7d835

real	5m56.377s
user	0m1.876s
sys	0m1.163s

chainsail-mcmc-stats-server
sha256:31e056a63abf4fcf41bf53d38edfd06e11bf47c7b6f94c95b04e531d350a4691

real	0m30.376s
user	0m0.217s
sys	0m0.130s


real	14m55.870s
user	0m4.061s
sys	0m2.340s
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment