本文主要是爲了記錄我研究Alpine部署typecho的過程,固然過程並不像文章裏這麼順利,主要是開始搞錯了方向,使我遇到了"技術難題".若是你也苦惱 容器內服務開機自啓的問題,建議看看《誰是Docker容器的init(1)進程》/)php
docker run \
--name vsftpd \
-d \
-e FTP_USER=www \
-e FTP_PASS=my-password \
-e PASV_ADDRESS=5.6.7.8 \
-e PASV_MIN=21100 \
-e PASV_MAX=21110 \
-p 21:21 \
-p 21100-21110:21100-21110 \
avenus/vsftpd-alpinemysql
docker exec -it vsftpd shnginx
發現開啓了不少端口 -p 21100-21110:21100-21110這些都是被動模式端口,關於被動端口百度是這樣說的:git
FTP 分爲兩類,PORT FTP和PASV FTP,PORT FTP是通常形式的FTP。它們的區別在於使用數據傳輸端口(ftp- data)的方式。PORT FTP由FTP服務器指定數據傳輸所使用的端口,默認值爲20。PASV FTP由FTP客戶端決定數據傳輸的端口。github
因此能夠經過更改vsftpd配置文件關閉全部端口,從新打包鏡像,刪除-p 21100-21110:21100-21110,只保留21端口sql
ftp客戶端須要關閉被動模式docker
vi /etc/apk/repositories數據庫
http://mirrors.aliyun.com/alp...
http://mirrors.aliyun.com/alp...apache
更新一下使源地址生效
apk update
apk add --no-cache nginx
mkdir /run/nginx
創建ftp用戶並能夠直接操做nginx目錄
adduser -h /etc/nginx -s /sbin/nologin php -G root
更改目錄屬性,賦予ftp用戶讀寫權限
chmod -R 777 /etc/nginx
用軟件登錄FTP
在/etc/nginx裏新建一個html文件夾
在文件夾裏新建一個 index.html文件作爲nginx的首頁
hello world
server {
listen 80 default_server;
location / {
index index.html;
root /etc/nginx/html;
}
location = /404.html {
internal;
}
}
訪問http://192.168.5.116:18080頁面顯示hello world表示成功
apk add php7-fpm php7-mcrypt php7-soap php7-openssl php7-gmp php7-json php7-dom php7-pdo php7-zip php7-apcu php7-pdo_pgsql php7-bcmath php7-pdo_mysql php7-pdo_sqlite php7-gettext php7-xmlreader php7-xmlrpc php7-bz2 php7-iconv php7-pdo_dblib php7-curl php7-ctype php7-mbstring php7-gd
在html文件夾新建info.php文件
<?php
phpinfo();
server {
listen 80;
index index.html index.php;
location / {
index index.html;
root /etc/nginx/html;
#實現PHP僞靜態 由於會用typecho作例子因此這個是適用於typecho的
#能夠百度其餘nginx僞靜態寫法
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-e $request_filename){
rewrite (.*) /index.php;
}
}
# You may need this to prevent return 404 recursion.
location = /404.html {
internal;
}
#添加php支持
location ~ .php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /etc/nginx/html/$fastcgi_script_name;
include fastcgi_params;
}
}
php-fpm7 --daemonize
nginx -s reload
打開瀏覽器訪問http://192.168.5.116:18080/info.php會顯示php信息,表示成功
下載typecho 解壓,ftp上傳到html文件夾,
打開瀏覽器訪問http://192.168.5.116:18080
typecho call to undefined function session_start()
#查詢有關session軟件
apk search session
#選擇本身php 版本對應的插件
apk add php7-session
#重啓PHP
killall php-fpm7
php-fpm7 --daemonize
Call to undefined function token_get_all()
同理查找到了這個擴展 php7-tokenizer-7.1.17-r0 安裝後重啓
安裝管理軟件
apk add openrc
設置開機自啓
rc-update add php-fpm7
rc-update add nginx
測試是否能夠正常啓動
rc-service vsftp start
報錯了 awk: /etc/network/interfaces: No such file or directory
sed -i 's/#rc_sys=""/rc_sys="lxc"/g' /etc/rc.conf &&\
echo 'rc_provide="loopback net"' >> /etc/rc.conf
將CMD改爲init系統啓動
這時FTP連不上了???
把vsftpd也添加到開機自啓
rc-update add vsftpd
測試是否能夠啓動
rc-service vsftp start
sh到這裏發現vsftp 也能夠本身安裝,具體方法網上也有並不難,這裏就再也不說明了
打包鏡像
docker commit -a "liwenwen" -m "apache" alpine lnmp-alpine:vxx
docker run \ --name blog \ --restart=always \ -d \ -p 81:80 \ -p 8081:8080 \ -p 21:21 \ lnmp-alpine:vxx