如果你已经研究过老高的为樱花打造的KCPTUN,此docker镜像就是基于Alpine最新版,当时只是简单的使用了一下,这次老高想深入研究一下docker的Alpine。
Alpine做名词将意思是高山植物,估计想表达简单,耐用的意思吧。
官网
- Alpine Linux Docker Image
- alpine - Docker Store
- 目前最新tag为 3.5
特点
通过阅读官方说明,简单的总结一下这个镜像
- 集成musl libc,提供完整又强大的功能
- 集成busy_box,胜于busy_box
- 镜像小,节省传输时间,和docker简直是天作之合!
获取
docker pull alpine
docker images
# 由图看到只有3.99 MB大小,基于alpine而build出来的endoffight/shadowsocks-kcp也只有14.5 MB
运行
由于启用一个镜像必须有一个进程,所以我们运行ash(Bash in alpine)
# 启动一个容器
docker run --name=al -itd alpine ash
# 进入系统
docker exec -it al ash
APK包管理命令
# 更新源
apk add --update
# 缓存的index文件保存在/var/cache/apk/文件夹中
ls -al /var/cache/apk/
# 搜索nginx,目前nginx最新是1.11,1.10.3是最新的稳定版,看来库里的软件还是很新的
apk search nginx
nginx-1.10.3-r0
...
# libsodium 也有,这不是就shadowsocks而生的么?
apk search libsodium
libsodium-1.0.11-r0
libsodium-dev-1.0.11-r0
# 安装命令
apk add --update --no-cache python openrc
# 组安装,--virtual web_tools表示后面的程序都会被归到web_tools组,最后删除的时候可以一起被删
apk --update add --virtual web_tools nginx php7-fpm
# 删除
apk del python
# 列出已安装的程序
apk info|sort
apk -vv info|sort
服务管理
# 非docker环境的服务管理
rc-service nginx start
rc-service nginx stop
rc-service nginx php
实战
下面进入实战环节,让我们配置一个最简单的Nginx+PHP运行环境吧!
新建
docker run --name=web -itd alpine ash
docker exec -it web ash
添加软件
apk add --no-cache --virtual web_tools nginx php7-fpm supervisor
配置supervisor
# supervisor 前台运行
sed -i 's/\;nodaemon=false/nodaemon=true/g' /etc/supervisord.conf
vi /etc/supervisord.conf
# 添加如下内容
[program:php-fpm]
command=php-fpm7 -F
stdout_logfile=/var/log/php7/php.log
# /dev/stdout
stdout_logfile_maxbytes=1MB
stderr_logfile=/var/log/php7/php_error.log
# /dev/stderr
stderr_logfile_maxbytes=1MB
[program:nginx]
command=nginx -g 'daemon off;'
stdout_logfile=/var/log/nginx/nginx.log
stdout_logfile_maxbytes=1MB
stderr_logfile=/var/log/nginx/nginx_error.log
stderr_logfile_maxbytes=1MB
配置nginx
true > /etc/nginx/conf.d/default.conf
vi /etc/nginx/conf.d/default.conf
# add
server {
listen 80;
root /www;
index index.html index.htm index.php;
server_name localhost;
client_max_body_size 32m;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/lib/nginx/html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
新建PHP文件
vi /www/index.php
# add
<?php
echo "Hello world!\n";
运行
/usr/bin/supervisord
查看
外部新启一个终端查看
docker exec -it web ash
curl lcoalhost
# get
# Hello world!
完