1. 程式人生 > >linux 下 docker NGINX+PHP+MYSQL+REDIS+Elasticsearch 開發環境搭建

linux 下 docker NGINX+PHP+MYSQL+REDIS+Elasticsearch 開發環境搭建

docker-compose 安裝請看此連結

其他

一步步跟我做,搭建屬於自己的 docker 開發環境
作者:風來了.fox
nginx 1.8.0
php 5.6.x

1.docker 安裝

1.1 ubuntu 14.x 15.x

sudo apt-get update
curl -sSL https://get.docker.io/ | sudo sh

1.2 centos 6.x 7.x

sudo yum update
curl -sSL https://get.docker.io/ | sudo sh

1.3 如果安裝出現錯誤

1.3.1

FATA[0000
] Error loading docker apparmor profile: fork/exec /sbin/apparmor_parser: no such file or directory ()

安裝apparmor軟體即可

sudo apt-get install apparmor  

下面需要建立使用者和所屬使用者組,根據1.4 設定

Warning: The docker group is equivalent to the root user; For details on how this impacts security in your system, see Docker Daemon Attack Surface for
details.

1.4 設定使用者和組

給 docker 設定使用者組和使用者

sudo useradd -g docker docker
sudo usermod -aG docker docker

2.docker 啟動

2.1 啟動

2.1.1 舊啟動方式

centos 6.x ,ubuntu 14.x

sudo service docker start

2.1.2 新的啟動方式

centos 7.x ,ubuntu 15.x

sudo systemctl start docker

2.2 停止

#centos 7.x ,ubuntu 15.x
sudo systemctl stop docker 或 #centos 6.x ,ubuntu 14.x sudo service docker stop

2.3 重啟

#centos 7.x ,ubuntu 15.x
sudo systemctl restart docker
或
#centos 6.x ,ubuntu 14.x
sudo service docker restart

2.4 docker狀態

#centos 7.x ,ubuntu 15.x
sudo systemctl status docker
或
#centos 6.x ,ubuntu 14.x
sudo service docker status

2.5 docker 版本

sudo docker -v

3 相關配置

配置檔案增加引數

sudo vi /etc/default/docker 

在配置檔案中新增或修改

DOCKER="/usr/bin/docker"

增加完成後,重啟docker

sudo systemctl restart docker

4 映象拉取

注意:
如果拉取時間過長,docker hub 會自動切斷連結,它會報超時錯誤!
這個時候再重新執行拉取命令即可,他會接著上次拉取斷的位置重新拉取的

4.1 mysql

#來自 https://hub.docker.com/_/mysql/
sudo docker pull mysql:5.6

拉取時間根據每人的網速有關
專案都是根據 mysql 5.6 版本的,所以這裡選擇5.6版本
mysql:5.6 表示 映象名稱:版本號

4.2 redis

#來自 https://hub.docker.com/_/redis/
sudo docker pull redis

redis 後面沒有版本號時,預設拉取最新的一版 即 redis:latest

4.3 ElasticSearch

#來自 https://hub.docker.com/_/elasticsearch/
sudo docker pull elasticsearch

elasticsearch 後面沒有版本號時,預設拉取最新的一版 即 elasticsearch:latest

4.4 nginx 和php

#來自 https://hub.docker.com/r/foxiswho/nginx-php
sudo docker pull foxiswho/nginx-php

lanmps 後面沒有版本號時,預設拉取最新的一版 即 lanmps:latest
nginx 版本 1.8.0
php 版本 5.6.x

4.5 memcached

有同學可能會使用這個快取,需要的拿去
我們目前專案沒有使用它

#來自 https://hub.docker.com/_/memcached/
sudo docker pull memcached

4.x 映象拉取相關問題

4.x.1 拉取不成功

重新執行拉取命令

4.x.2 哪種為拉取不成功

如下圖:紅色框內都是none 的表示拉取不成功,要重新執行拉取命令
這裡寫圖片描述

5 映象檢視

sudo docker images

6 生成容器

6.1 mysql

sudo docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6

–name 容器名稱

mysql 為自定義名稱

-p:暴露埠,對映埠(可以對映多個埠) 外部埠:容器內部埠

-p 3306:3306 對映埠

-e:設定任意環境變數(容器內)

MYSQL_ROOT_PASSWORD=root 這裡指 設定資料庫密碼為root

mysql:5.6 映象名稱:版本

6.2 redis

sudo docker run --name redis -p 6379:6379 -d redis:latest

redis 為自定義名稱
-p 6379:6379 對映埠, 即 外部埠:容器內埠
redis:latest 映象名稱:版本

6.3 ElasticSearch

sudo docker run --name es -p 9200:9200 -p 9300:9300 -d elasticsearch:latest

es 為自定義名稱
-p 9200:9200 對映埠(可以對映多個埠), 即 外部埠:容器內埠
elasticsearch:latest 映象名稱:版本

6.4 Nginx+PHP

6.4.1 方式一 容器內連結

docker run --name lanmps --link mysql:db --link es:es --link redis:redis -p 80:80 -v /home/lanmps/www:/www/wwwroot -d foxiswho/nginx-php

–name 容器名稱

–name lanmps 名為lanmps的容器

-p:暴露埠,對映埠(可以對映多個埠) 外部埠:容器內部埠

-p 80:80 外部80埠:容器內部80埠

-d:後臺模式執行,如果沒有則以前臺執行(當前程序關閉後,當前容器自動關閉)

foxiswho/nginx-php 映象名稱:版本

–link:容器內部通訊 容器名稱:內部別名(內部使用)

–link mysql:db 使用時,直接使用db 就可以訪問到資料庫mysql容器
php 訪問本地mysql 使用的是localhost,容器內部即可使用 db

-v:卷,外部目錄虛擬到容器內目錄 外部目錄:容器內目錄

-v /home/lanmps/www:/www/wwwroot
/home/lanmps/www 外部目錄,我的專案目錄
/www/wwwroot 容器內部目錄,這個是不能改變的

注意
本地 目錄設定許可權和使用者組
chown -R www:www /home/lanmps/www
chmod -R 777 /home/lanmps/www
這個時候訪問本機 127.0.0.1:80 就可以看到 你的專案站點了

6.4.2 方式二 使用IP埠連線

**

注意
使用IP埠連線,必須是固定IP才可以
**

docker run --name lanmps -p 80:80 -v /home/lanmps/www:/www/wwwroot -d foxiswho/nginx-php

例如 本機ip 為 192.168.1.122
那麼在連結 資料庫3306 的時候,ip設定為192.168.1.122,埠號 3306

注意
本地 目錄設定許可權和使用者組
chown -R www:www /home/lanmps/www
chmod -R 777 /home/lanmps/www
這個時候訪問本機 127.0.0.1:80 就可以看到 你的專案站點了

7. 容器命令

普通情況下容器建立時,該容器就會是啟動狀態,如果關機了,那麼就要啟動該容器

7.1 容器啟動

先啟動沒有任何連結的容器,最後啟動 有關聯的容器

sudo docker start 容器名稱

sudo docker start redis
sudo docker start mysql
sudo docker start es
sudo docker start lanmps

7.2容器關閉

sudo docker stop 容器名稱

sudo docker stop es

7.3 容器重啟

sudo docker restart 容器名稱

sudo docker restart es

7.4 容器狀態

sudo docker status 容器名稱
sudo docker status es

7.5 容器刪除

sudo docker rm 容器名稱

刪除所有容器

docker rm $(docker ps -q -a)

7.6 進入容器內部

sudo docker exec -it lanmps /bin/bash

7.7 檢視 正在執行的容器

sudo docker ps

7.8 檢視 所有容器

sudo docker ps -a

8 docker 映象命令

8.1 所有映象

sudo docker images

8.2 刪除映象

sudo docker rmi lanmps

刪除所有映象

docker rmi $(docker images -q) 

9 docker 容器匯入與匯出

匯出後再匯入 的映象會丟失所有的歷史

9.1 匯出 export

Export命令用於持久化容器(不是映象)

#1.先檢視 所有容器
sudo docker ps -a
#2.找到要匯出容器 的 CONTAINER ID,然後執行命令
sudo docker export 容器CONTAINER ID > 匯出地址檔名
即
sudo docker export 234wer2323dfdfdsfq > /home/export.tar

9.2 匯入 import

cat /home/export.tar | sudo docker import - lanmps:latest

10 docker 映象儲存與載入

儲存後再載入(saveed-loaded)的映象沒有丟失歷史和層(layer)

10.1 儲存 save

Save命令用於持久化映象(不是容器)

#1.先檢視 所有映象
sudo docker images
#2.找到要儲存的映象名稱
sudo docker save 映象名稱 > 儲存地址檔名
即
sudo docker save lanmps > /home/save-lanmps.tar

10.2 載入

docker load < /home/save-lanmps.tar

11 訪問專案站點

因為lanmps 設定的埠為80,那麼就可以直接 在瀏覽器上 輸入 127.0.0.1,
就可以看到 你的專案站點了