leezu edited a comment on issue #18093: CI: unify centos7_base.sh and centos7_core.sh URL: https://github.com/apache/incubator-mxnet/pull/18093#issuecomment-615955998 @marcoabreu The current style is broken. We need to get rid of it and replace it with a better style. Let me elaborate. This practice of copying shell files into the container leads to constant docker cache invalidation and makes for a horrible development experience. We need to reconsider this strategy and find a better solution that actually works. Just try generating a docker image locally. It will never rely on the mxnetci docker cache. You can check a number of references about this problem - https://stackoverflow.com/questions/48551953/why-does-my-docker-cache-get-invalidated-by-this-copy-command - Request for reason of cache invalidation: moby/moby#9294 - COPY invalidates cache: moby/moby#21913 That's problem Nr 1 with copying shell scripts. But let's discuss a bit more about what (I suppose) we actually attempt to achieve with these shell scripts and why I believe it's not the best solution: Each of our docker containers has a certain _purpose_, such as providing a build setup, providing a setup with cuda drivers, providing a minimal setup for testing of release artifacts etc. For each _purpose_ we like to ensure / test it on a variety of platforms (CentOS7 and some newer Ubuntu distro for build; various older and newer Linux distros for testing release artifacts). This leads to a combinatorial number of Dockerfiles. The shell scripts are used to avoid duplicating the same install steps in each Dockerfile. The problem here is, that there is a disconnect between the content of each shell script and the places of use that leads to a unmaintainable mess of shell scripts in our repo. Just look at the contents of https://github.com/apache/incubator-mxnet/tree/37dbbd4/ci/docker/install Instead of this unholy mess, I suggest to firstly simplify the Dockerfiles. As you see in this PR, at least some of the shell scripts install way to many dependencies for the Dockerfiles in which they are included. Other shell scripts can be completely removed by switching from Ubuntu 16.04 base image to 20.04 base image and using system dependencies instead of compiling stuff from source (we can use a very recent version of Ubuntu, because we already ensure compatibility with old distros based on CentOS7). In summary, this allows us to greatly simplify each Dockerfile. Secondly, instead of having a separate Dockerfile for every particular setting (`Dockerfile.publish.centos7_gpu_cu102`, `Dockerfile.publish.centos7_gpu_cu101`, ...), just have a single Dockerfile for a class of settings (`Dockerfile.publish.centos7` in this example) and use a `ARG` argument to that dockerfile to specify the base image. Together, this will greatly simplify our setup and greatly improve the developer experience by fixing the cache. This PR doesn't implement it yet obviously, but is a first step as it simplifies the unholy mess.
---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [email protected] With regards, Apache Git Services
