1. mysql_data 和 wwwroot
(用这可以避免当 mysql 更换时, 需再输入资料)
https://hub.docker.com/_/busybox/
$ docker run --name=mysql_data -v /var/lib/mysql -d busybox echo MySQL Data
$ cd /home/用户名
$ mkdir www
$ docker run --name=wwwroot -v /home/用户名/www:/var/www/html -d busybox echo wwwroot
* 这 2 个容器不需要开启, 因它们只是用作挂载主机的文件夹到容器中而已
2. Mysql Server 5.5 (3306/tcp)
https://hub.docker.com/_/mysql/
# mysql - 设置密码
$ docker run --name=mysql_server --volumes-from mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5
# mysql - 设置空密码
$ docker run --name=mysql_server --volumes-from mysql_data -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -d mysql:5.5
# 进入容器 mysql
$ docker exec -it mysql_server bash
$ mysql -uroot -p123456
mysql> create database test_db;
mysql> create table student (name VARCHAR(20), age INT(10));
mysql> insert into student (name, age) values ("Andrew", "40");
mysql> quit
$ exit # 退出回主机
# 检查容器 mysql_server 有没有 up
$ docker ps -a
$ docker start mysql_server
3. php-fpm-mod - 从 php-fpm 5.6.19 加入一些 mysql 等模块,
制作成 php-fpm-mysql 镜像 (9000/tcp)
https://hub.docker.com/_/php/
$ cd /home/用户名
$ mkdir dockerfile_php
$ cd dockerfile_php
$ gedit Dockerfile
# 应可以改去 php:5.6.21-fpm, 但 php:7-fpm 会有些模块不能安装
FROM php:5.6.19-fpm
# Install modules
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng12-dev \
&& docker-php-ext-install -j$(nproc) iconv mcrypt \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-configure mysqli --with-mysqli=mysqlnd \
&& docker-php-ext-install mysqli \
&& docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-configure mysql --with-mysql=mysqlnd \
&& docker-php-ext-install mysql
CMD ["php-fpm"]
# 编译镜像 php-fpm-mysql
$ docker build -t php-fpm-mysql /home/用户名/dockerfile_php
$ docker images
# 运行容器 php-fpm-mod
$ docker run --name php-fpm-mod --volumes-from wwwroot --link mysql_server:mysql -d php-fpm-mysql
$ docker exec -it php-fpm-mod cat /etc/hosts
172.17.0.2 mysql ad0d03214936 mysql_server # 从这里知道 mysql_server 的 IP
172.17.0.3 f20cb9377b85
# 在 php-fpm-mod 测试 mysql
$ docker exec -it php-fpm-mod ping -c 3 mysql
# 检查容器 php-fpm-mod 有没有 up
$ docker ps -a
$ docker start php-fpm-mod
4. 准备3个测试文件
$ gedit /home/用户名/www/index.html
<html>
<head>
<title>Testing</title>
</head>
<body>
Testing
</body>
</html>
$ gedit /home/用户名/www/index.php
<?php
phpinfo();
?>
$ gedit /home/用户名/www/mysql.php
<?php
$con = mysql_connect("172.17.0.2","root","123456");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test_db", $con);
$result = mysql_query("SELECT * FROM student");
while($row = mysql_fetch_array($result)) {
echo $row['name'] . " " . $row['age'];
echo "<br />";
}
mysql_close($con);
?>
5. Nginx Server (因要改设置文件, 所以要制作 nginx-fix 镜像)
https://hub.docker.com/_/nginx/
# 可以先运行容器 nginx_server, 备份里面的 /etc/nginx/conf.d/default.conf
$ docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx
$ docker cp nginx_server:/etc/nginx/conf.d/default.conf /home/用户名/default-ori.conf
$ docker stop nginx_server
$ docker rm nginx_server # 撤容器 nginx_server
# 准备编译 nginx-fix-0 镜像
$ cd /home/用户名
$ mkdir dockerfile_nginx
# 准备 nginx 设置文件
$ gedit /home/用户名/dockerfile_nginx/default.conf
server {
listen 80;
root /var/www/html;
index index.html index.htm index.php;
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
# 准备 Dockerfile 编译镜像
$ gedit /home/用户名/dockerfile_nginx/Dockerfile
FROM nginx
COPY default.conf /etc/nginx/conf.d/
# 编译镜像 nginx-fix-0
$ docker build -t nginx-fix-0 /home/用户名/dockerfile_nginx
$ docker images
# 运行容器 nginx_server
$ docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx-fix-0
如果现在去浏览 http://127.0.0.1/index.php # 可用 ifconfig 找 IP
会发现空白一片
以下开始 Fix 问题..
# $ docker exec -it nginx_server cat /etc/nginx/fastcgi_params
# 容器 nginx_server 中复制 fastcgi_params 出来
$ docker cp nginx_server:/etc/nginx/fastcgi_params /home/用户名/dockerfile_nginx
$ docker stop nginx_server
$ docker rm nginx_server # 撤容器 nginx_server
$ docker rmi nginx-fix-0 # 撤镜像 nginx-fix-0
# 在 fastcgi_params 中添加一行
$ gedit /home/用户名/dockerfile_nginx/fastcgi_params
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
# 添加这行以解决空白页的问题
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 修改 Dockerfile, 添加 fastcgi_params 文件
$ gedit /home/用户名/dockerfile_nginx/Dockerfile
FROM nginx
COPY default.conf /etc/nginx/conf.d/
COPY fastcgi_params /etc/nginx/
# 重新编译镜像 nginx-fix
$ docker build -t nginx-fix /home/用户名/dockerfile_nginx
$ docker images
# 再运行容器 nginx_server
$ docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx-fix
# 检查容器 nginx_server 有没有 up
$ docker ps -a
$ docker start nginx_server
6. phpmyadmin (8080/tcp)
$ docker run --name phpmyadmin --link mysql_server -e PMA_HOST=mysql_server -p 8080:80 -d phpmyadmin/phpmyadmin
这个要用 http://127.0.0.1:8080
7. 开关容器程序 (不一定要用 docker-compose)
$ gedit control.sh
if [ `docker ps -a | grep -c "mysql_data"` -eq 0 ]
then
var1=`docker run --name=mysql_data -v /var/lib/mysql -d busybox echo MySQL Data`
fi
if [ `docker ps -a | grep -c "wwwroot"` -eq 0 ]
then
var1=`docker run --name=wwwroot -v /home/用户名/www:/var/www/html -d busybox echo wwwroot`
fi
if [ `docker ps -a | grep -c "mysql_server"` -eq 0 ]
then
var1=`docker run --name=mysql_server --volumes-from mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5`
fi
if [ `docker ps -a | grep -c "php-fpm-mod"` -eq 0 ]
then
var1=`docker run --name php-fpm-mod --volumes-from wwwroot --link mysql_server:mysql -d php-fpm-mysql`
fi
if [ `docker ps -a | grep -c "nginx_server"` -eq 0 ]
then
var1=`docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx-fix`
var1=`docker stop nginx_server`
fi
var=`docker ps`
if [ `echo $var | grep -c "80/tcp" ` -gt 0 ]
then
var1=`docker stop nginx_server`
var1=`docker rm nginx_server`
if [ `echo $var | grep -c "9000/tcp" ` -gt 0 ]
then
var1=`docker stop php-fpm-mod`
var1=`docker rm php-fpm-mod`
fi
if [ `echo $var | grep -c "3306/tcp" ` -gt 0 ]
then
var1=`docker stop mysql_server`
var1=`docker rm mysql_server`
fi
else
var1=`docker start mysql_server`
if [ `echo $var | grep -c "9000/tcp" ` -eq 0 ]
then
var1=`docker start php-fpm-mod`
fi
if [ `echo $var | grep -c "80/tcp" ` -eq 0 ]
then
var1=`docker start nginx_server`
fi
fi
var=`docker ps`
echo "$var"
$ ./control.sh
没有评论:
发表评论