【docker系列】docker深入淺出之安裝Nginx+PHP+MySQL

Docker 安裝 Nginx

方法一、docker pull nginx

查找 Docker Hub 上的 nginx 鏡像

summer@ubuntu:~$  docker search nginx
NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                     Official build of Nginx.                        3260      [OK]       
jwilder/nginx-proxy       Automated Nginx reverse proxy for docker c...   674                  [OK]
richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable ...   207                  [OK]
million12/nginx-php       Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS...   67                   [OK]
maxexcloo/nginx-php       Docker framework container with Nginx and ...   57                   [OK]

這裏我們拉取官方的鏡像

$ docker pull nginx

等待下載完成後,我們就可以在本地鏡像列表裏查到 REPOSITORY 爲 nginx 的鏡像。

summer@ubuntu:~$ docker images nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              555bbd91e13c        3 days ago          182.8 MB

nginx 部署

首先,創建目錄 nginx, 用於存放後面的相關東西。

$ mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf

拷貝容器內 Nginx 默認配置文件到本地當前目錄下的 conf 目錄,容器 ID 可以查看 docker ps 命令輸入中的第一列:

docker cp 6dd4380ba708:/etc/nginx/nginx.conf ~/nginx/conf
  • www: 目錄將映射爲 nginx 容器配置的虛擬目錄。
  • logs: 目錄將映射爲 nginx 容器的日誌目錄。
  • conf: 目錄裏的配置文件將映射爲 nginx 容器的配置文件。

部署命令

$ docker run -d -p 80:80 --name wavefar-nginx -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx

命令說明:

  • -p 80:80: 將容器的 80 端口映射到主機的 80 端口。

  • -d:設置容器在在後臺一直運行。

  • --name wavefar-nginx將容器命名爲 wavefar-nginx。

  • ~/nginx/www:/usr/share/nginx/html:將我們自己創建的 www 目錄掛載到容器的 /usr/share/nginx/html。

  • -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:將我們自己創建的 nginx.conf 掛載到容器的 /etc/nginx/nginx.conf。

  • -v ~/nginx/logs:/var/log/nginx:將我們自己創建的 logs 掛載到容器的 /var/log/nginx。

啓動以上命令後進入 ~/nginx/www 目錄:

$ cd ~/nginx/www

創建 index.html 文件,內容如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>IT俱樂部(52it.club)</title>
</head>
<body>
    <h1>我的第一個標題</h1>
    <p>我的第一個段落。</p>
</body>
</html>

輸出結果爲:

相關命令

如果要重新載入 NGINX 可以使用以下命令發送 HUP 信號到容器:

$ docker kill -s HUP wavefar-nginx

重啓 NGINX 容器命令:

$ docker restart wavefar-nginx 

啓動 NGINX 容器命令:

$ docker start wavefar-nginx 

停止 NGINX 容器命令:

$ docker stop wavefar-nginx 

Docker 安裝 PHP

安裝 PHP 鏡像

docker pull php

查找Docker Hub上的php鏡像

summer@ubuntu:~$ sudo docker search php
NAME                                                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
php                                                       While designed for web development, the PH...   4486      [OK]       
phpmyadmin/phpmyadmin                                     A web interface for MySQL and MariaDB.          766                  [OK]
richarvey/nginx-php-fpm                                   Container running Nginx + PHP-FPM capable ...   712                  [OK]
adminer                                                   Database management in a single PHP file.       242       [OK]       
php-zendserver                                            Zend Server - the integrated PHP applicati...   164       [OK]       
webdevops/php-nginx                                       Nginx with PHP-FPM                              125                  [OK]
webdevops/php-apache-dev                                  PHP with Apache for Development (eg. with ...   102                  [OK]
webdevops/php-apache                                      Apache with PHP-FPM (based on webdevops/php)    85                   [OK]
phpunit/phpunit                                           PHPUnit is a programmer-oriented testing f...   71                   [OK]
bitnami/php-fpm                                           Bitnami PHP-FPM Docker Image                    69                   [OK]
nazarpc/phpmyadmin                                        phpMyAdmin as Docker container, based on o...   60                   [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5      ubuntu-16-nginx-php-phpmyadmin-mysql-5          50                   [OK]
tetraweb/php                                              PHP 5.5, 5.6, 7.0, 7.1 for CI and running ...   32                   [OK]

這裏我們拉取官方的鏡像,標籤爲5.6-fpm

summer@ubuntu:~$ docker pull php:5.6-fpm

等待下載完成後,我們就可以在本地鏡像列表裏查到REPOSITORY爲php,標籤爲5.6-fpm的鏡像。

summer@ubuntu:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
php                 5.6-fpm             3458979c7744        3 months ago        344 MB

首先,創建目錄php-fpm,用於存放後面的相關東西。

summer@ubuntu:~$ mkdir -p ~/php-fpm/logs ~/php-fpm/conf

logs目錄將映射爲php-fpm容器的日誌目錄

conf目錄裏的配置文件將映射爲php-fpm容器的配置文件

 

使用php-fpm鏡像

運行容器

summer@ubuntu:~$ sudo docker run -p 9000:9000 --name  wavefar-php-fpm -v ~/nginx/www:/www -v $PWD/conf:/usr/local/etc/php -v $PWD/logs:/phplogs   -d php:5.6-fpm
d6bb33b4d196336d7dff16d02369a212847a7e0a14779962ab5578cf1325fb38

命令說明:

  • -p 9000:9000 :將容器的9000端口映射到主機的9000端口

  • --name wavefar-php-fpm :將容器命名爲myphp-fpm

  • -v ~/nginx/www:/www :將主機中項目的目錄www掛載到容器的/www

  • -v $PWD/conf:/usr/local/etc/php :將主機中當前目錄下的conf目錄掛載到容器的/usr/local/etc/php

  • -v $PWD/logs:/phplogs :將主機中當前目錄下的logs目錄掛載到容器的/phplogs

查看容器啓動情況

summer@ubuntu:~$ docker ps
CONTAINER ID    IMAGE         COMMAND      ...    PORTS                    NAMES
d6bb33b4d196    php:5.6-fpm   "php-fpm"    ...    0.0.0.0:9000->9000/tcp   wavefar-php-fpm

 

修改docker容器Nginx裏的配置信息:

1、進入docker容器

sudo docker exec -it wavefar-nginx /bin/bash

2、由於默認docker容器裏沒有安裝vim,所以需要安裝vim

更新來源

root@caba367f2269:/# apt-get update   

修改來源

root@caba367f2269:/# mv /etc/apt/sources.list /etc/apt/sources.list.bak && \

    echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list && \

    echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list && \

    echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list && \

    echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list

安裝vim

root@caba367f2269:/# apt-get install -y vim  

PS:此處是通過nginx+php實現web服務,nginx配置文件的fastcgi_pass應該配置爲wavefar-php-fpm容器的IP。

fastcgi_pass  172.17.0.3:9000;

容器IP的查方法

docker inspect 容器ID或容器名 |grep '"IPAddress"'

Docker 安裝 MySQL

方法一、docker pull mysql

查找Docker Hub上的mysql鏡像

summer@ubuntu:~$ docker search mysql
NAME                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                    MySQL is a widely used, open-source relati...   2529      [OK]       
mysql/mysql-server       Optimized MySQL Server Docker images. Crea...   161                  [OK]
centurylink/mysql        Image containing mysql. Optimized to be li...   45                   [OK]
sameersbn/mysql                                                          36                   [OK]
google/mysql             MySQL server for Google Compute Engine          16                   [OK]
appcontainers/mysql      Centos/Debian Based Customizable MySQL Con...   8                    [OK]
marvambass/mysql         MySQL Server based on Ubuntu 14.04              6                    [OK]
drupaldocker/mysql       MySQL for Drupal                                2                    [OK]
azukiapp/mysql           Docker image to run MySQL by Azuki - http:...   2                    [OK]
...

這裏我們拉取官方的鏡像,標籤爲5.6

summer@ubuntu:~$ docker pull mysql:5.6

等待下載完成後,我們就可以在本地鏡像列表裏查到REPOSITORY爲mysql,標籤爲5.6的鏡像。

summer@ubuntu:~$ docker images |grep mysql
mysql               5.6                 2c0964ec182a        3 weeks ago         329 MB

首先,創建目錄mysql,用於存放後面的相關東西。

summer@ubuntu:~$ mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf

data目錄將映射爲mysql容器配置的數據文件存放路徑

logs目錄將映射爲mysql容器的日誌目錄

conf目錄裏的配置文件將映射爲mysql容器的配置文件

 

創建完成後,我們可以在本地的鏡像列表裏查找到剛剛創建的鏡像

summer@ubuntu:~$: docker images |grep mysql
mysql               5.6                 2c0964ec182a        3 weeks ago         329 MB

使用mysql鏡像

運行容器

summer@ubuntu:~$ docker run -p 3306:3306 --name wavefar-mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
21cb89213c93d805c5bacf1028a0da7b5c5852761ba81327e6b99bb3ea89930e

命令說明:

  • -p 3306:3306:將容器的 3306 端口映射到主機的 3306 端口。

  • -v -v $PWD/conf:/etc/mysql/conf.d:將主機當前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。

  • -v $PWD/logs:/logs:將主機當前目錄下的 logs 目錄掛載到容器的 /logs。

  • -v $PWD/data:/var/lib/mysql :將主機當前目錄下的data目錄掛載到容器的 /var/lib/mysql 。

  • -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼。

查看容器啓動情況

summer@ubuntu:~$ docker ps 
CONTAINER ID    IMAGE         COMMAND                  ...  PORTS                    NAMES
21cb89213c93    mysql:5.6    "docker-entrypoint.sh"    ...  0.0.0.0:3306->3306/tcp   wavefar-mysql

編寫shell腳本,快速啓動docker

建立一個目錄專門存放docker啓動腳本:

summer@ubuntu:~$ sudo mkdir start_docker

cd start_docker

1、添加MySQL快速啓動腳本:

sudo vim start_docker_mysql.sh

添加以下內容並保存:

sudo docker run --name mysql -p 3306:3306 -d -e MYSQL_ROOT_PASSWORD=123456 -v /home/docker-mysql:/var/lib/mysql  mysql

2、添加PHP快速啓動腳本:

sudo vim start_docker_php.sh

添加以下內容並保存:

sudo docker run --name php \
--link=mysql:mysql -d \
-v ~/nginx/www:/home/www \
-v ~/nginx/logs:/var/log/nginx \
-v /tmp:/tmp \
-v /etc/localtime:/etc/localtime --privileged=true \
php

3、添加Nginx 快速啓動腳本:

sudo vim start_docker_nginx.sh

添加以下內容並保存:

sudo docker stop nginx
sudo docker rm nginx
sudo docker run \
--name nginx \
--link=php:phpfpm \
--link=mysql:mysql \
-d -p 80:80 \
-v ~/nginx/www:/home/www \
-v ~/nginx/vhosts:/etc/nginx/conf.d \
-v ~/nginx/logs:/var/log/nginx \
nginx

4、添加Redis 快速啓動腳本

sudo vim start_docker_redis.sh

添加以下內容並保存:

sudo docker run -p 6379:6379 -v $PWD/data:/data  -d redis:3.2 redis-server --appendonly yes

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章