From 867b05518cfcb32eed2e1332798e43db7c5b8082 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Tue, 23 Apr 2024 10:55:08 -0400 Subject: [PATCH 1/5] first test for freesurfer container --- .../freesurfer.context/freesurfer.Dockerfile | 54 +++++++++++++++++++ docker-bake.hcl | 39 ++++++++++++++ versioning.hcl | 1 + 3 files changed, 94 insertions(+) create mode 100644 containers/freesurfer.context/freesurfer.Dockerfile diff --git a/containers/freesurfer.context/freesurfer.Dockerfile b/containers/freesurfer.context/freesurfer.Dockerfile new file mode 100644 index 0000000..36b10fd --- /dev/null +++ b/containers/freesurfer.context/freesurfer.Dockerfile @@ -0,0 +1,54 @@ +# docker build for distributing a base fs 7.2.0 container + +FROM freesurfer-builder as freesurfer + +ARG FREESURFER_VERSION + +# shell settings +WORKDIR /root + +# install utils +RUN apt-get -y update +RUN apt-get -y install bc \ + libgomp \ + perl \ + tar \ + tcsh \ + wget \ + vim-common \ + mesa-libGL \ + libXext \ + libSM \ + libXrender \ + libXmu + +# install fs +RUN wget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/${FREESURFER_VERSION}/freesurfer_ubuntu22${FREESURFER_VERSION}_amd64.deb && \ + dpkg -i freesurfer_${FREESURFER_VERSION}_amd64.deb + rm freesurfer_${FREESURFER_VERSION}_amd64.deb + +# setup fs env +ENV OS Linux +ENV PATH /usr/local/freesurfer/bin:/usr/local/freesurfer/fsfast/bin:/usr/local/freesurfer/tktools:/usr/local/freesurfer/mni/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +ENV FREESURFER_HOME /usr/local/freesurfer +ENV FREESURFER /usr/local/freesurfer +ENV SUBJECTS_DIR /usr/local/freesurfer/subjects +ENV LOCAL_DIR /usr/local/freesurfer/local +ENV FSFAST_HOME /usr/local/freesurfer/fsfast +ENV FMRI_ANALYSIS_DIR /usr/local/freesurfer/fsfast +ENV FUNCTIONALS_DIR /usr/local/freesurfer/sessions + +# set default fs options +ENV FS_OVERRIDE 0 +ENV FIX_VERTEX_AREA "" +ENV FSF_OUTPUT_FORMAT nii.gz + +# mni env requirements +ENV MINC_BIN_DIR /usr/local/freesurfer/mni/bin +ENV MINC_LIB_DIR /usr/local/freesurfer/mni/lib +ENV MNI_DIR /usr/local/freesurfer/mni +ENV MNI_DATAPATH /usr/local/freesurfer/mni/data +ENV MNI_PERL5LIB /usr/local/freesurfer/mni/share/perl5 +ENV PERL5LIB /usr/local/freesurfer/mni/share/perl5 + +ENV FS_LICENSE='/license.txt' \ No newline at end of file diff --git a/docker-bake.hcl b/docker-bake.hcl index 6f52c1a..f7c54fc 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -116,6 +116,10 @@ variable "SCILUS_TAG" { variable "FLOWS_TAG" { } +variable "FS_VERSION" { + default = "7.4.1" +} + # ============================================================================== # UTILITY FUNCTIONS # ============================================================================== @@ -149,6 +153,10 @@ group "dmriqcpy" { targets = ["dmriqcpy", "dmriqcpy-test"] } +group "freesurfer" { + targets = ["freesurfer"] +} + # ============================================================================== # TEST TARGETS # ============================================================================== @@ -308,6 +316,19 @@ target "scilus-fsl" { output = ["type=docker"] } +target "scilus-freesurfer" { + inherits = ["freesurfer"] + contexts = { + freesurfer-base = "target:scilus-base" + } + cache-from = [ + "type=registry,ref=${dockerhub-user-pull}/build-cache:scilus-deps", + "type=registry,ref=scilus/build-cache:scilus-deps" + ] + tags = notequal("", DEPS_TAG) ? stamp_tag("scilus/scilus-deps:${DEPS_TAG}", timestamp()) : [] + output = ["type=docker"] +} + target "scilus-mrtrix" { inherits = ["mrtrix"] contexts = { @@ -413,6 +434,24 @@ target "fsl" { output = ["type=cacheonly"] } +target "freesurfer" { + dockerfile = "freesurfer.Dockerfile" + context = "./containers/freesurfer.context" + target = "freesurfer-install" + contexts = { + freesurfer-base = "docker-image://${base-install-image}" + freesurfer-builder = "docker-image://${base-build-image}" + } + args = { + FREESURFER_VERSION = "${fs-version}" + } + cache-from = [ + "type=registry,ref=${dockerhub-user-pull}/build-cache:freesurfer", + "type=registry,ref=scilus/build-cache:freesurfer" + ] + output = ["type=cacheonly"] +} + target "mrtrix" { dockerfile = "mrtrix.Dockerfile" context = "./containers" diff --git a/versioning.hcl b/versioning.hcl index ca4e619..f3faa5a 100644 --- a/versioning.hcl +++ b/versioning.hcl @@ -9,6 +9,7 @@ scilpy-version="1.6.0" ants-version="2.4.3" cmake-version="3.16.3" fsl-version="6.0.6" +freesurfer-version="7.4.1" mrtrix-version="3.0.4" mesa-version="22.0.5" vtk-version="9.2.6" From 449eb0d56a9e0cc47053f59d68ee6bdf9abf2f2d Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Thu, 25 Apr 2024 13:20:50 -0400 Subject: [PATCH 2/5] answer AVC comments --- .../freesurfer.context/freesurfer.Dockerfile | 29 ++++++++----------- docker-bake.hcl | 19 ++++++------ 2 files changed, 21 insertions(+), 27 deletions(-) diff --git a/containers/freesurfer.context/freesurfer.Dockerfile b/containers/freesurfer.context/freesurfer.Dockerfile index 36b10fd..949421e 100644 --- a/containers/freesurfer.context/freesurfer.Dockerfile +++ b/containers/freesurfer.context/freesurfer.Dockerfile @@ -1,30 +1,22 @@ # docker build for distributing a base fs 7.2.0 container -FROM freesurfer-builder as freesurfer +FROM freesurfer-base as freesurfer ARG FREESURFER_VERSION +ENV FREESURFER_VERSION=${FREESURFER_VERSION:-7.4.1} # shell settings -WORKDIR /root +WORKDIR / # install utils RUN apt-get -y update -RUN apt-get -y install bc \ - libgomp \ - perl \ - tar \ - tcsh \ - wget \ - vim-common \ - mesa-libGL \ - libXext \ - libSM \ - libXrender \ - libXmu +RUN apt-get -y install bc perl tar tcsh wget vim-common + +RUN echo ${FREESURFER_VERSION} # install fs -RUN wget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/${FREESURFER_VERSION}/freesurfer_ubuntu22${FREESURFER_VERSION}_amd64.deb && \ - dpkg -i freesurfer_${FREESURFER_VERSION}_amd64.deb +RUN wget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/${FREESURFER_VERSION}/freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb && \ + dpkg -i freesurfer_${FREESURFER_VERSION}_amd64.deb && \ rm freesurfer_${FREESURFER_VERSION}_amd64.deb # setup fs env @@ -51,4 +43,7 @@ ENV MNI_DATAPATH /usr/local/freesurfer/mni/data ENV MNI_PERL5LIB /usr/local/freesurfer/mni/share/perl5 ENV PERL5LIB /usr/local/freesurfer/mni/share/perl5 -ENV FS_LICENSE='/license.txt' \ No newline at end of file +ENV FS_LICENSE='/license.txt' + +RUN ( [ -f "VERSION" ] || touch VERSION ) && \ + echo "freesurfer => ${FREESURFER_VERSION}\n" >> VERSION \ No newline at end of file diff --git a/docker-bake.hcl b/docker-bake.hcl index f7c54fc..8e2e40c 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -116,7 +116,7 @@ variable "SCILUS_TAG" { variable "FLOWS_TAG" { } -variable "FS_VERSION" { +variable "FREESURFER_VERSION" { default = "7.4.1" } @@ -154,7 +154,7 @@ group "dmriqcpy" { } group "freesurfer" { - targets = ["freesurfer"] + targets = ["scilus-freesurfer"] } # ============================================================================== @@ -319,13 +319,13 @@ target "scilus-fsl" { target "scilus-freesurfer" { inherits = ["freesurfer"] contexts = { - freesurfer-base = "target:scilus-base" + freesurfer-base = "target:scilus" } cache-from = [ - "type=registry,ref=${dockerhub-user-pull}/build-cache:scilus-deps", - "type=registry,ref=scilus/build-cache:scilus-deps" + "type=registry,ref=${dockerhub-user-pull}/build-cache:scilus", + "type=registry,ref=scilus/build-cache:scilus" ] - tags = notequal("", DEPS_TAG) ? stamp_tag("scilus/scilus-deps:${DEPS_TAG}", timestamp()) : [] + tags = notequal("", DEPS_TAG) ? stamp_tag("scilus/scilus-freesurfer:${DEPS_TAG}", timestamp()) : [] output = ["type=docker"] } @@ -437,19 +437,18 @@ target "fsl" { target "freesurfer" { dockerfile = "freesurfer.Dockerfile" context = "./containers/freesurfer.context" - target = "freesurfer-install" + target = "freesurfer" contexts = { freesurfer-base = "docker-image://${base-install-image}" - freesurfer-builder = "docker-image://${base-build-image}" } args = { - FREESURFER_VERSION = "${fs-version}" + FREESURFER_VERSION = "${freesurfer-version}" } cache-from = [ "type=registry,ref=${dockerhub-user-pull}/build-cache:freesurfer", "type=registry,ref=scilus/build-cache:freesurfer" ] - output = ["type=cacheonly"] + output = ["type=cacheonly"] } target "mrtrix" { From d358d0cb592ace23018ec797d045af67ad91894e Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Wed, 8 May 2024 11:19:53 -0400 Subject: [PATCH 3/5] fix dockerfile --- containers/freesurfer.context/freesurfer.Dockerfile | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/containers/freesurfer.context/freesurfer.Dockerfile b/containers/freesurfer.context/freesurfer.Dockerfile index 949421e..695a760 100644 --- a/containers/freesurfer.context/freesurfer.Dockerfile +++ b/containers/freesurfer.context/freesurfer.Dockerfile @@ -5,19 +5,24 @@ FROM freesurfer-base as freesurfer ARG FREESURFER_VERSION ENV FREESURFER_VERSION=${FREESURFER_VERSION:-7.4.1} +ENV DEBIAN_FRONTEND=noninteractive + # shell settings WORKDIR / # install utils RUN apt-get -y update -RUN apt-get -y install bc perl tar tcsh wget vim-common +RUN apt-get -y install bc perl tar tcsh wget vim-common + +RUN apt-get -y install language-pack-en libx11-dev gettext xterm x11-apps csh xorg-dev libncurses5 libgl1 libegl1 xorg xserver-xorg-video-intel libglu1-mesa libjpeg62 libopengl0 libwayland-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-render0 libxcb-util1 libxcb-xinerama0 libxcb-xinput0 libxcb-xkb1 libxkbcommon-x11-0 libxkbcommon0 RUN echo ${FREESURFER_VERSION} # install fs -RUN wget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/${FREESURFER_VERSION}/freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb && \ - dpkg -i freesurfer_${FREESURFER_VERSION}_amd64.deb && \ - rm freesurfer_${FREESURFER_VERSION}_amd64.deb +ADD freesurfer_ubuntu22-7.4.1_amd64.deb / +## RUN wget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/${FREESURFER_VERSION}/freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb && \ +RUN dpkg -i freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb && \ + rm freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb # setup fs env ENV OS Linux From 30ac80b4122da2ca88eb946df4f249a66522138b Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Thu, 16 May 2024 23:01:13 -0400 Subject: [PATCH 4/5] fix versions --- docker-bake.hcl | 5 ++++- versioning.hcl | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docker-bake.hcl b/docker-bake.hcl index 8e2e40c..2289997 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -116,6 +116,9 @@ variable "SCILUS_TAG" { variable "FLOWS_TAG" { } +variable "FREESURFER_TAG" { +} + variable "FREESURFER_VERSION" { default = "7.4.1" } @@ -325,7 +328,7 @@ target "scilus-freesurfer" { "type=registry,ref=${dockerhub-user-pull}/build-cache:scilus", "type=registry,ref=scilus/build-cache:scilus" ] - tags = notequal("", DEPS_TAG) ? stamp_tag("scilus/scilus-freesurfer:${DEPS_TAG}", timestamp()) : [] + tags = notequal("", SCILUS_TAG) ? stamp_tag("scilus/scilus-freesurfer:${SCILUS_TAG}", timestamp()) : ["scilus-freesurfer:local"] output = ["type=docker"] } diff --git a/versioning.hcl b/versioning.hcl index f3faa5a..e563b83 100644 --- a/versioning.hcl +++ b/versioning.hcl @@ -4,7 +4,7 @@ base-install-image="nvidia/cuda:11.7.1-runtime-ubuntu22.04" base-build-image="ubuntu:jammy-20230301" dmriqcpy-version="0.1.7" -scilpy-version="1.6.0" +scilpy-version="2.0.2" ants-version="2.4.3" cmake-version="3.16.3" From ee474667743cb002d60a1331c3ba63d9fece5183 Mon Sep 17 00:00:00 2001 From: arnaudbore Date: Sun, 2 Jun 2024 10:27:58 -0400 Subject: [PATCH 5/5] add freesurfer version in PATH --- .../freesurfer.context/freesurfer.Dockerfile | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/containers/freesurfer.context/freesurfer.Dockerfile b/containers/freesurfer.context/freesurfer.Dockerfile index 695a760..b3eab9c 100644 --- a/containers/freesurfer.context/freesurfer.Dockerfile +++ b/containers/freesurfer.context/freesurfer.Dockerfile @@ -3,7 +3,7 @@ FROM freesurfer-base as freesurfer ARG FREESURFER_VERSION -ENV FREESURFER_VERSION=${FREESURFER_VERSION:-7.4.1} +ENV FREESURFER_VERSION=${FREESURFER_VERSION:-${FREESURFER_VERSION}} ENV DEBIAN_FRONTEND=noninteractive @@ -19,21 +19,21 @@ RUN apt-get -y install language-pack-en libx11-dev gettext xterm x11-apps csh xo RUN echo ${FREESURFER_VERSION} # install fs -ADD freesurfer_ubuntu22-7.4.1_amd64.deb / +ADD freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb / ## RUN wget https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/${FREESURFER_VERSION}/freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb && \ RUN dpkg -i freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb && \ rm freesurfer_ubuntu22-${FREESURFER_VERSION}_amd64.deb # setup fs env ENV OS Linux -ENV PATH /usr/local/freesurfer/bin:/usr/local/freesurfer/fsfast/bin:/usr/local/freesurfer/tktools:/usr/local/freesurfer/mni/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -ENV FREESURFER_HOME /usr/local/freesurfer -ENV FREESURFER /usr/local/freesurfer -ENV SUBJECTS_DIR /usr/local/freesurfer/subjects -ENV LOCAL_DIR /usr/local/freesurfer/local -ENV FSFAST_HOME /usr/local/freesurfer/fsfast -ENV FMRI_ANALYSIS_DIR /usr/local/freesurfer/fsfast -ENV FUNCTIONALS_DIR /usr/local/freesurfer/sessions +ENV PATH /usr/local/freesurfer/${FREESURFER_VERSION}/bin:/usr/local/freesurfer/${FREESURFER_VERSION}/fsfast/bin:/usr/local/freesurfer/${FREESURFER_VERSION}/tktools:/usr/local/freesurfer/${FREESURFER_VERSION}/mni/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH +ENV FREESURFER_HOME /usr/local/freesurfer/${FREESURFER_VERSION} +ENV FREESURFER /usr/local/freesurfer/${FREESURFER_VERSION} +ENV SUBJECTS_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/subjects +ENV LOCAL_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/local +ENV FSFAST_HOME /usr/local/freesurfer/${FREESURFER_VERSION}/fsfast +ENV FMRI_ANALYSIS_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/fsfast +ENV FUNCTIONALS_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/sessions # set default fs options ENV FS_OVERRIDE 0 @@ -41,12 +41,12 @@ ENV FIX_VERTEX_AREA "" ENV FSF_OUTPUT_FORMAT nii.gz # mni env requirements -ENV MINC_BIN_DIR /usr/local/freesurfer/mni/bin -ENV MINC_LIB_DIR /usr/local/freesurfer/mni/lib -ENV MNI_DIR /usr/local/freesurfer/mni -ENV MNI_DATAPATH /usr/local/freesurfer/mni/data -ENV MNI_PERL5LIB /usr/local/freesurfer/mni/share/perl5 -ENV PERL5LIB /usr/local/freesurfer/mni/share/perl5 +ENV MINC_BIN_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/mni/bin +ENV MINC_LIB_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/mni/lib +ENV MNI_DIR /usr/local/freesurfer/${FREESURFER_VERSION}/mni +ENV MNI_DATAPATH /usr/local/freesurfer/${FREESURFER_VERSION}/mni/data +ENV MNI_PERL5LIB /usr/local/freesurfer/${FREESURFER_VERSION}/mni/share/perl5 +ENV PERL5LIB /usr/local/freesurfer/${FREESURFER_VERSION}/mni/share/perl5 ENV FS_LICENSE='/license.txt'