Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
FROM ubuntu, то это уже личные проблемы каждого, такие люди и curl ... | bash и sudo make install делают. Инструмент не виноват в глупости того, кто пользуется инструментом. Молотком можно людей калечить, а можно гвозди забивать..dockerignore с уменьшением веса финального образа. Этот файл влияет только на процесс сборки, то есть что будет доступно для копирования в Dockerfile. Однако, если не копировать, то образ и не будет увеличиваться. Так что на вес образа влияла команда вида COPY * /tmp (или ADD).$ du -sh .
413M .
$ cat Dockerfile
FROM alpine
COPY serial.txt /tmp/serial.txt
$ cat .dockerignore
cat: .dockerignore: No such file or directory
$ ls -lah serial.txt
-rw-r--r-- 1 frol frol 30 May 25 15:43 serial.txt
$ docker build -t qq .
Sending build context to Docker daemon 432.5 MB
Sending build context to Docker daemon
Step 0 : FROM alpine
---> 8697b6cc1f48
Step 1 : COPY serial.txt /tmp/serial.txt
---> 2209f356a4ea
Removing intermediate container 9d055644cb5b
Successfully built 2209f356a4ea
$ docker images | grep qq
qq latest 2209f356a4ea 5 seconds ago 5.238 MB
.dockerignore нет, docker build запаковал в tar все файлы и получил 435МБ, которые «отправил на сборку» (так работает build) и в образ я добавил только файл serial.txt, весящий 30 байт, но финальный образ весит 5.2МБ!.dockerignore может сократить этап архивирования для build, но файлы из текущего каталога не попадут в образ если вы их туда не скопируете командами COPY или ADD, что видно из моего эксперимента.Use a .dockerignore file
For faster uploading and efficiency during docker build, you should use a .dockerignore file to exclude files or directories from the build context and final image. For example, unless.git is needed by your build process or scripts, you should add it to .dockerignore, which can save many megabytes worth of upload time.
ADD chkconfig /sbin/chkconfig
ADD init.ora /
ADD initXETemp.ora /
ADD oracle-xe_11.2.0-1.0_amd64.debaa /
ADD oracle-xe_11.2.0-1.0_amd64.debab /
ADD oracle-xe_11.2.0-1.0_amd64.debac /
# ADD oracle-xe_11.2.0-1.0_amd64.deb /
RUN cat /oracle-xe_11.2.0-1.0_amd64.deba* > /oracle-xe_11.2.0-1.0_amd64.deb
...
# Remove installation files
RUN rm /oracle-xe_11.2.0-1.0_amd64.deb*
ну init это один процес, и процес который init мэнеджит — еще один, уже два.
Run only one process per container
In almost all cases, you should only run a single process in a single container. Decoupling applications into multiple containers makes it much easier to scale horizontally and reuse containers. If that service depends on another service, make use of container linking.
Docker. Best practices на примере образа Oracle xe 11g