Alpine是一個小型的linux系統,官方docker鏡像只有不到5MB,很是適合做爲容器鏡像。html
Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and Busybox. A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!
爲了更好地瞭解alpine,我在虛擬機上安裝了一個本地alpine。linux
上官網下載一個標準STANDARD鏡像。建立一個虛擬機,我用的 VMWare Fusion,掛載好下載的iso鏡像。nginx
而後啓動就能夠了,不過這時信息沒有存盤,須要使用安裝腳本安裝系統到磁盤。安裝過程其實很簡單,初次使用,最重要的是要知道有這個安裝腳本。git
安裝腳本叫作 setup-alpine,其實仔細看的話,系統每次啓動和登錄的時候都會有提示。github
安裝系統細節就不說了,若是有疑問可查官方文檔。安裝完成後,須要重啓系統。重啓以後,就是從磁盤啓動的了。web
下面具體說說如何使用:docker
一、配置安裝源。shell
# vim /etc/apk/repositories https://mirrors.ustc.edu.cn/alpine/edge/main https://mirrors.ustc.edu.cn/alpine/edge/community https://mirrors.ustc.edu.cn/alpine/edge/testing
二、安裝ssh服務。Alpine使用的包管理工具叫 apk。服務管理系統叫 OpenRC。vim
# apk update # apk add openssh # rc-service sshd start # rc-update add sshd
三、修改sshd配置文件,容許root登陸。bash
# vim /etc/ssh/sshd_config PermitRootLogin yes # service sshd restart
這時就可使用終端遠程登錄了。
四、安裝用戶管理工具,修改root用戶的shell爲bash,默認使用的是ash。
# apk add shadow # usermod -s /bin/bash root
五、安裝經常使用工具。
# apk add vim bash bash-completion
六、設置經常使用別名。
# vim /etc/profile export LS_OPTIONS='--color=auto' alias ls='ls $LS_OPTIONS' alias ll='ls $LS_OPTIONS -l' alias l='ls $LS_OPTIONS -lA'
七、其實在testing源裏面,已經有現成的tengine安裝包了。不過這裏我會測試手動編譯,不會直接使用安裝包。
# apk policy tengine tengine policy: 2.1.0-r4: https://mirrors.ustc.edu.cn/alpine/edge/testing
八、如何查看安裝包包含哪些文件。有兩種方法,不過都只能查看已經安裝的包。
# apk manifest tengine | awk '{print $2}' etc/tengine/scgi_params etc/tengine/fastcgi_params etc/tengine/tengine.conf etc/tengine/uwsgi_params etc/tengine/fastcgi.conf etc/tengine/mime.types etc/tengine/koi-win etc/tengine/mime.types.default etc/tengine/koi-utf etc/tengine/browsers etc/tengine/uwsgi_params.default etc/tengine/scgi_params.default etc/tengine/module_stubs etc/tengine/nginx.conf.default etc/tengine/fastcgi_params.default etc/tengine/win-utf etc/tengine/fastcgi.conf.default etc/logrotate.d/tengine etc/init.d/tengine usr/sbin/nginx usr/sbin/dso_tool usr/html/index.html usr/html/50x.html usr/share/licenses/tengine/LICENSE
# apk info -a tengine | grep -v \.h tengine-2.1.0-r4 description: tengine-2.1.0-r4 webpage: http://tengine.taobao.org/ tengine-2.1.0-r4 installed size: 1519616 tengine-2.1.0-r4 depends on: so:libc.musl-x86_64.so.1 so:libcrypto.so.42 so:libpcre.so.1 so:libssl.so.44 so:libz.so.1 tengine-2.1.0-r4 provides: cmd:dso_tool cmd:nginx tengine-2.1.0-r4 is required by: tengine-2.1.0-r4 contains: etc/tengine/scgi_params etc/tengine/fastcgi_params etc/tengine/tengine.conf etc/tengine/uwsgi_params etc/tengine/fastcgi.conf etc/tengine/mime.types etc/tengine/koi-win etc/tengine/mime.types.default etc/tengine/koi-utf etc/tengine/browsers etc/tengine/uwsgi_params.default etc/tengine/scgi_params.default etc/tengine/module_stubs etc/tengine/nginx.conf.default etc/tengine/fastcgi_params.default etc/tengine/win-utf etc/tengine/fastcgi.conf.default etc/logrotate.d/tengine etc/init.d/tengine usr/sbin/nginx usr/sbin/dso_tool tengine-2.1.0-r4 triggers: tengine-2.1.0-r4 affects auto-installation of: tengine-2.1.0-r4 replaces: tengine-2.1.0-r4 license: Custom
九、安裝開發組件。
# apk add alpine-sdk (1/26) Installing fakeroot (1.22-r0) (2/26) Installing sudo (1.8.22-r2) (3/26) Installing pax-utils (1.2.2-r1) (4/26) Installing libressl2.6-libtls (2.6.4-r0) (5/26) Installing libressl (2.6.4-r0) (6/26) Installing libattr (2.4.47-r6) (7/26) Installing attr (2.4.47-r6) (8/26) Installing tar (1.30-r0) (9/26) Installing patch (2.7.6-r1) (10/26) Installing lzip (1.19-r2) (11/26) Installing abuild (3.1.0-r4) Executing abuild-3.1.0-r4.pre-install (12/26) Installing libmagic (5.32-r0) (13/26) Installing file (5.32-r0) (14/26) Installing g++ (6.4.0-r6) (15/26) Installing fortify-headers (0.9-r0) (16/26) Installing build-base (0.5-r1) (17/26) Installing lz4-libs (1.8.1.2-r0) (18/26) Installing lzo (2.10-r2) (19/26) Installing squashfs-tools (4.3-r4) (20/26) Installing libburn (1.4.8-r0) (21/26) Installing libedit (20170329.3.1-r3) (22/26) Installing libacl (2.2.52-r4) (23/26) Installing libisofs (1.4.8-r0) (24/26) Installing libisoburn (1.4.8-r0) (25/26) Installing xorriso (1.4.8-r0) (26/26) Installing alpine-sdk (0.5-r0)
其中,build-base包含gcc,libc,make,g++。
# apk info -a build-base build-base-0.5-r1 webpage: http://dev.alpinelinux.org/cgit build-base-0.5-r1 installed size: 4096 build-base-0.5-r1 depends on: binutils file gcc g++ make libc-dev fortify-headers
十、編譯安裝tengine。這裏我加了ldap模塊。
# apk add libressl-dev openldap-dev zlib-dev pcre-dev # mkdir /usr/local/src # cd /usr/local/src # git clone https://github.com/kvspb/nginx-auth-ldap.git # wget http://tengine.taobao.org/download/tengine-2.2.0.tar.gz # tar xvf tengine-2.2.0.tar.gz # cd tengine-2.2.0/ # ./configure --prefix=/usr/local/nginx --with-http_reqstat_module=shared --add-module=../nginx-auth-ldap # make -j 2 # make install # make dso_install
十一、安裝supervisor。
# apk add supervisor
修改supervisor的配置文件。
# vim /etc/supervisord.conf [unix_http_server] file=/run/supervisord.sock ; (the path to the socket file) [supervisord] logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log) loglevel=info ; (log level;default info; others: debug,warn,trace) pidfile=/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP) environment=LC_ALL=en_US.UTF-8,LANG=en_US.UTF-8,LANGUAGE=en_US.UTF-8 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///run/supervisord.sock ; use a unix:// URL for a unix socket [program:nginx-app] command = /usr/local/nginx/sbin/nginx
這裏須要手動建立日誌目錄,否則supervisord沒法啓動。算是一個坑。
# mkdir /var/log/supervisor # service start supervisord
# supervisorctl nginx-app RUNNING pid 33479, uptime 0:00:02
# apk --help apk-tools 2.9.1, compiled for x86_64. usage: apk COMMAND [options] [ARGS] The following commands are available: add Add PACKAGEs to 'world' and install (or upgrade) them, while ensuring that all dependencies are met del Remove PACKAGEs from 'world' and uninstall them fix Repair package or upgrade it without modifying main dependencies update Update repository indexes from all remote repositories info Give detailed information about PACKAGEs or repositories search Search package by PATTERNs or by indexed dependencies upgrade Upgrade currently installed packages to match repositories cache Download missing PACKAGEs to cache and/or delete unneeded files from cache version Compare package versions (in installed database vs. available) or do tests on literal version strings index Create repository index file from FILEs fetch Download PACKAGEs from global repositories to a local directory audit Audit the directories for changes verify Verify package integrity and signature dot Generate graphviz graphs policy Show repository policy for packages stats Show statistics about repositories and installations manifest Show checksums of package contents Global options: -h, --help Show generic help or applet specific help -p, --root DIR Install packages to DIR -X, --repository REPO Use packages from REPO -q, --quiet Print less information -v, --verbose Print more information (can be doubled) -i, --interactive Ask confirmation for certain operations -V, --version Print program version and exit -f, --force Enable selected --force-* (deprecated) --force-binary-stdout Continue even if binary data is to be output --force-broken-world Continue even if 'world' cannot be satisfied --force-non-repository Continue even if packages may be lost on reboot --force-old-apk Continue even if packages use unsupported features --force-overwrite Overwrite files in other packages --force-refresh Do not use cached files (local or from proxy) -U, --update-cache Alias for --cache-max-age 60 --progress Show a progress bar --progress-fd FD Write progress to fd --no-progress Disable progress bar even for TTYs --purge Delete also modified configuration files (pkg removal) and uninstalled packages from cache (cache clean) --allow-untrusted Install packages with untrusted signature or no signature --wait TIME Wait for TIME seconds to get an exclusive repository lock before failing --keys-dir KEYSDIR Override directory of trusted keys --repositories-file REPOFILE Override repositories file --no-network Do not use network (cache is still used) --no-cache Do not use any local cache path --cache-dir CACHEDIR Override cache directory --cache-max-age AGE Maximum AGE (in minutes) for index in cache before refresh --arch ARCH Use architecture with --root --print-arch Print default arch and exit This apk has coffee making abilities.
最後這句造咖啡的能力好奇特地查了一下,真的有這個feature...不過沒什麼用。
# apk fetch coffee Go and fetch your own coffee.