Docker docker-compose 配置lnmp開(kāi)發(fā)環(huán)境

1 安裝Docker

本機(jī)在CentOs7 下安裝Docker,其他平臺(tái)也一樣
首先查看當(dāng)前內(nèi)核版本是否高于 3.10

$ uname -r
3.10.0-327.el7.x86_64
//安裝docker  
yum -y install docker
//啟動(dòng)docker
service docker start
//查看版本信息
docker info

安裝hello-world 鏡像

docker run hello-world

運(yùn)行時(shí)的輸出可以看到docker 是從本地鏡像開(kāi)始找,如果沒(méi)有該鏡像則去Docker Hub 去下載并運(yùn)行。

2 安裝MySQL

獲取MySQL 我直接用的官方的鏡像,輸入以下命令

docker pull mysql:5.6

運(yùn)行MySQL

docker run -p 3306:3306 --name test_mysql -v $PWD/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d --privileged=true mysql:5.6

命令說(shuō)明:

-p 3306:3306:將容器的3306端口映射到主機(jī)的3306端口
-v PWD/mysql/data:/var/lib/mysql:將主機(jī)當(dāng)前目錄下的mysql/data文件夾掛載到容器的/var/lib/mysql 下,在mysql容器中產(chǎn)生的數(shù)據(jù)就會(huì)保存在本機(jī)mysql/data目錄下
-e MYSQL_ROOT_PASSWORD=123456:初始化root用戶的密碼
-d 后臺(tái)運(yùn)行容器
--name 給容器指定別名
--privileged=true centos7 可能會(huì)碰到權(quán)限問(wèn)題,需要加參數(shù)

執(zhí)行以下命令進(jìn)入mysql 運(yùn)行環(huán)境

docker exec -it test_mysql bash

這樣就進(jìn)入mysql容器了,可以查看mysql 命令
mysql -u root -p 
輸入密碼就可以操作數(shù)據(jù)庫(kù)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.07 sec)
mysql> create database if not exists test_db;
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> use test_db
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> create table people (name varchar(10), age int);
Query OK, 0 rows affected (0.13 sec)

mysql> insert into people values('liming',10);
Query OK, 1 row affected (0.03 sec)

3 安裝PHP

同樣使用官方的php鏡像,不過(guò)需要支持mysql擴(kuò)展。所以我們這次用Dockerfile 來(lái)構(gòu)建一個(gè)鏡像,以下是Dockerfile

 FROM  php:5.6-fpm
 RUN apt-get update && apt-get install -y \
 libfreetype6-dev \
 libjpeg62-turbo-dev \
 libpng12-dev \
 vim \
 && docker-php-ext-install pdo_mysql \
 && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
 && docker-php-ext-install gd \

我們?cè)谠镜膒hp5.6上安裝了一些工具以及擴(kuò)展。

build 我們新建的鏡像

docker build -t="php-fpm5.6/v2" .

然后用這個(gè)鏡像跑一個(gè)php環(huán)境的容器

docker run -d -p 9000:9000 -v /home/tanhui/composeTest/code/:/var/www/html/ --name php-with-mysql --link test_mysql:mysql  --volumes-from test_mysql --privileged=true php-fpm5.6/v2

參數(shù)解析

-v 將本地磁盤(pán)上的php代碼掛載到docker 環(huán)境中,對(duì)應(yīng)docker的目錄是 /var/www/html/ 
--name 新建的容器名稱 php-with-mysql
--link 鏈接的容器,鏈接的容器名稱:在該容器中的別名,運(yùn)行這個(gè)容器是,docker中會(huì)自動(dòng)添加一個(gè)host識(shí)別被鏈接的容器ip
--privileged=true 權(quán)限問(wèn)題

進(jìn)入容器

docker exec -it php-with-mysql bash
cd /var/www/html && ls

這里就會(huì)看到你本地磁盤(pán)下所掛載的文件,在該目錄下可以添加一個(gè) mysql.php 文件,如下

try {
    $dbh = new PDO('mysql:host=mysql;dbname=test_db', 'root','12
3456');
    foreach($dbh->query('SELECT * from people') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

退出編輯

root@f5c9b982690a:/var/www/html# php mysql.phpphp mysql.php
Array
(
    [name] => liming
    [0] => liming
    [age] => 10
    [1] => 10
)

輸出結(jié)果如上,這樣我們php鏈接mysql就成功了。

4 安裝Nginx鏡像

本地編輯nginx配置文件 default.conf 絕對(duì)路徑為(/home/tanhui/composeTest/nginx/conf/default.conf)
文件內(nèi)容如下

    server {
        listen       80;
        server_name  localhost;
    
        location / {
            root   /var/www/html;
            index  index.html index.htm index.php; # 增加index.php
        }
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /var/www/html;
        }
        location ~ \.php$ {
            root           /var/www/html; # 代碼目錄
            fastcgi_pass   phpfpm:9000;    # 修改為phpfpm容器
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; # 修改為$document_root
            include        fastcgi_params;
        }
    }

運(yùn)行容器

docker run -d --link php-with-mysql:phpfpm --volumes-from php-with-mysql -p 80:80 -v /home/tanhui/composeTest/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf --name nginx-php --privileged=true  nginx

參數(shù)解析

--link php-with-mysql:phpfpm 將php容器鏈接到nginx容器里來(lái),phpfpm是nginx容器里的別名。
--volumes-from php-with-mysql 將php-with-mysql 容器掛載的文件也同樣掛載到nginx容器中
-v /home/tanhui/composeTest/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf  將nginx 的配置文件替換,掛載本地編寫(xiě)的配置文件

docker exec -it nginx-php bash
root@32de01dbee49:/# cd /var/www/html/&&ls
index.php  mysql.php  testmysql.php  webview

我們可以看到掛載在php-mysql容器里的文件夾同樣也被掛載在nginx容器里,這時(shí)在本機(jī)方案127.0.0.1/mysql.php,數(shù)據(jù)庫(kù)中的數(shù)據(jù)就在瀏覽器上輸出了。
這樣 nginx+php+mysql 的連接就基本完成了。

5 docker-compose

接下來(lái)介紹另一種方法docker-compose

上面介紹了用純docker 命令啟動(dòng)容器,鏈接容器,但是每次啟動(dòng)容器時(shí)都要填寫(xiě)一堆參數(shù),難免容易出錯(cuò),出錯(cuò)了之后還要?jiǎng)h除該容器才能重新跑。接下來(lái)就介紹一下 docker-compose.

一個(gè)使用Docker容器的應(yīng)用,通常由多個(gè)容器組成。使用Docker Compose,不再需要使用shell腳本來(lái)啟動(dòng)容器。在配置文件中,所有的容器通過(guò)services來(lái)定義,然后使用docker-compose腳本來(lái)啟動(dòng),停止和重啟應(yīng)用,和應(yīng)用中的服務(wù)以及所有依賴服務(wù)的容器。

首先安裝docker-compose

// 安裝pip
sudo yum install epel-release
sudo yum install -y python-pip
//使用pip 安裝
sudo pip install -U docker-compose

Compose的默認(rèn)配置文件是docker-compose.yml。讓我們看看下面這個(gè)文件:

nginx:
  build: ./nginx
  ports:
    - "80:80"
  links:
    - "phpfpm"
  volumes:
    - /home/tanhui/composeTest/code/:/var/www/html/
    - /home/tanhui/composeTest/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf
phpfpm:
  build: ./phpfpm
  ports:
    - "9000:9000"
  volumes:
    - ./code/:/var/www/html/
  links:
    - "mysql"
mysql:
  build: ./mysql
  ports:
    - "3306:3306"
  volumes:
    - /home/tanhui/composeTest/mysql/data/:/var/lib/mysql/
  environment:
    MYSQL_ROOT_PASSWORD : 123456

以上的配置文件路徑有絕對(duì)路徑,有相對(duì)路徑,build 參數(shù)代表該路徑下的Dockerfile
先看一下大概的目錄結(jié)構(gòu)

$ tree composeTest
composeTest
├── code
│   ├── index.php
│   ├── mysql.php
│   └── testmysql.php
│       
├── docker-compose.yml
├── index.php
├── mysql
│   ├── data
│   │   ├── auto.cnf
│   │   ├── ibdata1
│   │   ├── ib_logfile0
│   │   ├── ib_logfile1
│   │   ├── mysql [error opening dir]
│   │   ├── performance_schema [error opening dir]
│   │   └── test_db [error opening dir]
│   └── Dockerfile
├── nginx
│   ├── conf
│   │   └── default.conf
│   └── Dockerfile
└── phpfpm
    └── Dockerfile

10 directories, 23 files

// Dockerfile 如下
$ cat composeTest/mysql/Dockerfile
FROM mysql:5.6

# tanhui @ localhost in ~ [20:57:51]
$ cat composeTest/phpfpm/Dockerfile
 FROM  php:5.6-fpm
 RUN apt-get update && apt-get install -y \
 libfreetype6-dev \
 libjpeg62-turbo-dev \
 libpng12-dev \
 vim \
 && docker-php-ext-install pdo_mysql \
 && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
 && docker-php-ext-install gd \
 
# tanhui @ localhost in ~ [20:58:19]
$ cat composeTest/nginx/Dockerfile
FROM nginx:latest
RUN apt-get update && apt-get install -y vim

現(xiàn)在運(yùn)行這三個(gè)容器只要使用命令 docker-compose up -d

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容