docker-ce 搭建的 lamp 開發環境筆記


工作目錄: /home/{username}/dockers/lamp

將docker容器的apache的80 映射為本地主機的81

# sudo docker pull mattrayner/lamp
git clone https://github.com/wakasann/docker-lamp.git
cd docker-lamp

# Build the 18.04 image
docker build -t=wakasann/lamp:latest -f ./1804/Dockerfile .

mkdir -p ~/dockers/lamp/{app,mysql}
cd ~/dockers/lamp

# Launch a 18.04 based image
# 容器需手動啟動
sudo docker run --name lamptest -p "80:80" -p "3306:3306" -p "443:443" -v ${PWD}/app:/app -v ${PWD}/mysql:/var/lib/mysql  wakasann/lamp:latest

# 容器自啟動
sudo docker run --restart=always --name lamptest -p "80:80" -p "3306:3306" -p "443:443" -v ${PWD}/app:/app -v ${PWD}/mysql:/var/lib/mysql  wakasann/lamp:latest

--restart=always 參數的值always 是容器停止之后,會進行重新啟動

php 7.3

運行日志:

vagrant@vagrant:~/dockers/lamp$ sudo docker run --name lamptest -p "81:80" -p "3306:3306" -v ${PWD}/app:/app -v ${PWD}/mysql:/var/lib/mysql  mattrayner/lamp:latest-1804
sed: can't read /etc/php/7.2/apache2/php.ini: No such file or directory
rm: cannot remove '/var/run/mysqld/mysqld.sock': No such file or directory
=> An empty or uninitialized MySQL volume is detected in /var/lib/mysql
=> Installing MySQL ...
=> Done!
=> Waiting for confirmation of MySQL service startup
=> Creating MySQL admin user with random password
ERROR 1133 (42000) at line 1: Can't find any matching row in the user table
=> Done!
========================================================================
You can now connect to this MySQL Server with YDvRU5FwZf2n

    mysql -uadmin -pYDvRU5FwZf2n -h<host> -P<port>

Please remember to change the above password as soon as possible!
MySQL user 'root' has no password but only allows local connections

enjoy!
========================================================================
/usr/lib/python2.7/dist-packages/supervisor/options.py:298: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
  'Supervisord is running as root and it is searching '
2019-12-04 02:42:22,994 CRIT Supervisor running as root (no user in config file)
2019-12-04 02:42:22,995 INFO Included extra file "/etc/supervisor/conf.d/supervisord-apache2.conf" during parsing
2019-12-04 02:42:22,997 INFO Included extra file "/etc/supervisor/conf.d/supervisord-mysqld.conf" during parsing
2019-12-04 02:42:23,049 INFO RPC interface 'supervisor' initialized
2019-12-04 02:42:23,050 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2019-12-04 02:42:23,050 INFO supervisord started with pid 1
2019-12-04 02:42:24,053 INFO spawned: 'mysqld' with pid 500
2019-12-04 02:42:24,059 INFO spawned: 'apache2' with pid 501
2019-12-04 02:42:25,707 INFO success: mysqld entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2019-12-04 02:42:25,708 INFO success: apache2 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

上面會輸出 mysql admin用戶的密碼

fix mcrypt.so at php 7.3

進入docker lamp 容器中

sudo docker exec -ti lamptest /bin/bash

查看 php版本

root@43cdda3f409c:/usr/lib/php/20180731# php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'mcrypt.so' (tried: /usr/lib/php/20180731/mcrypt.so (/usr/lib/php/20180731/mcrypt.so: cannot open shared object file: No such file or directory), /usr/lib/php/20180731/mcrypt.so.so (/usr/lib/php/20180731/mcrypt.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.3.12-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Nov 28 2019 07:37:16) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.12, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.12-1+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
    with Xdebug v2.8.0, Copyright (c) 2002-2019, by Derick Rethans

修復 Unable to load dynamic library 'mcrypt.so' 在 php 7.3

# 驗證 php和 pecl的版本
php -v
pecl version

安裝 mcrypt 擴展

Mcrypt PECL 擴展

apt-get -y install gcc make autoconf libc-dev pkg-config
apt-get -y install libmcrypt-dev
apt-get install php7.3-dev # 讓phpize命令可執行,如果出現phpize: not found需執行這句
pecl install mcrypt

當你看到顯示的提示:

libmcrypt prefix? [autodetect] : 

按 [Enter] 回車鍵 來自動選擇。

當通過 pecl 安裝成功之后,你應該將mcrypt.so 擴展添加到 php.ini

輸出的內容像:

...
Build process completed successfully
Installing '/usr/lib/php/20180731/mcrypt.so'
install ok: channel://pecl.php.net/mcrypt-1.0.3
configuration option "php_ini" is not set to php.ini location
You should add "extension=mcrypt.so" to php.ini

從上面的輸出獲取到安裝的路徑,並將其加入到 cli和apache php.ini 配置文件中(因Docker lamp已經執行了這一步,只做備忘)

sudo bash -c "echo extension=/usr/lib/php/20180731/mcrypt.so > /etc/php/7.3/cli/conf.d/mcrypt.ini"
sudo bash -c "echo extension=/usr/lib/php/20180731/mcrypt.so > /etc/php/7.3/apache2/conf.d/mcrypt.ini"

重啟apache

service apache2 restart

驗證 mcrypt 已經按照成功

$ php -i | grep "mcrypt"
/etc/php/7.3/cli/conf.d/20-mcrypt.ini,
Registered Stream Filters => zlib.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, convert.iconv.*, mcrypt.*, mdecrypt.*
mcrypt
mcrypt support => enabled
mcrypt_filter support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => no value => no value

  1. 修改myql sql_mode
#Form lamp docker
vim /etc/mysql/my.cnf
vim /etc/my.cnf

都在文件末尾添加以下內容:

[mysqld]
sql_mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#max_allowed_packet=100M

重啟docker lamp容器之后,在 phpmyadmin 中

#phpmyadmin run sql
show variables like 'sql_mode';

臨時設置 sql_mode

#phpmyadmin run sql
set global sql_mode='ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
  1. 修正 apache2 默認列出 Indexs
# Form docker
vim /etc/apache2/sites-available/000-default.conf

<Directory /var/www/html>Options Indexes FollowSymLinks MultiViews 改為 Options FollowSymLinks MultiViews(移除 Indexes

按ESC鍵,輸入:wq保存文件修改

# Form docker,restart apache2
service apache2 restart

rsync note

通過ssh的方式,將遠程的文件同步到當前服務器的一個文件夾下

將 遠程的 /home/vagrant/sh/ 文件放入到本機的/home/vagrant/syncfrom155文件夾中

rsync -v -r -e ssh vagrant@192.168.1.155:/home/vagrant/sh/* /home/vagrant/syncfrom155

補充 docker容器自啟動

$ docker run --help
...
--restart string                 Restart policy to apply when a container exits (default "no")
...

顯示 docker run 命令的幫助信息

因上面docker 命令啟動 lamp 容器時,沒有加--restart=always 參數

docker run --restart=always

如果已創建容器並已啟動,可通過下面的命令進行添加:

docker update --restart=always <CONTAINER ID>

如果想容器在 docker stop 之后,不想讓容器自啟動,嘗試通過

docker update --restart=no <CONTAINER ID>

References


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM