docker安装neo4j之后,发现了一些不一样的点,所以学习一下
一、ps -ef,发现进程信息是/sbin/tini -g -- /docker-entrypoint.sh neo4j,那么tini是什么玩意儿呢
照样查了几篇文章,总结一下就是操作系统需要init进程来收割僵尸进程,而之前一般情况下,docker里都不运行init进程,只运行应用进程,应用进程是不会去收割僵尸进程的,于是会造成资源泄漏。但是如果运行完整的init进程,又会造成胖容器的问题。于是tini应运而生,简而言之他就是一个精简版的init。
二、之后进入容器内部执行命令
/bin/sh /docker-entrypoint.sh dump-config
提示/docker-entrypoint.sh: line 43: syntax error: unexpected redirection
查了几篇文章,了解到sh说起来只是一个规范,他有bourne shell、bourne again shell、tcsh、korn shell、ash、dash等多种实现.。而/bin/sh只是一个链接,指向操作系统里默认的实现。于是ls -l /bin/sh
/bin/sh -> /bin/busybox,原来是busybox,他是一个主要用于嵌入式系统的精简的linux工具集,他的默认shell是ash
而docker-entrypoint.sh的she-bang是#!/bin/bash -eu,语法并不能完全兼容,所以抛错,于是改为
/bin/bash /docker-entrypoint.sh dump-config
三、想了解下这个操作系统是什么版本的呢,为啥工具集是busybox呢,之前都没见过的。
cat /proc/version,发现操作系统版本是Linux version 4.9.184-linuxkit (root@a8c33e955a82) (gcc version 8.3.0 (Alpine 8.3.0) ),Alpine又是什么玩意儿呢。
打开官网一看,
Small. Simple. Secure.
Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.
这介绍写得好啊,非常明白,最显著的优点就是small了,镜像大小只有5M不到,跟其他操作系统比简直就是数量级的差别啊,小的好处很多,镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。目前 Docker 官方已开始推荐使用 Alpine
替代之前的 Ubuntu
做为基础镜像环境。