一、架構圖
二、目的
使用docker-compose單機編排lnmp環境,並實現iWebShop商城發佈。且鏡像推送到私有倉庫,後期編排更加方便。最後部署Weave Scope監控容器。
三、Harbor倉庫安裝
harbor安裝需要使用docker-compose
安裝docker-compose
[root@harbor ~]# yum install epel-release -y
[root@harbor ~]# yum install python-pip -y
[root@harbor ~]# pip install docker-compose
[root@harbor ~]# docker-compose --version
docker-compose version 1.24.0, build 0aa5906
部署Harbor
[root@harbor ~]# tar xf harbor-offline-installer-v1.8.0.tgz.tar -C /usr/local
修改配置文件
[root@harbor ~]# vim /usr/local/harbor/harbor.yml
hostname = 192.168.231.32 #設置主機名
刷新配置文件
[root@harbor ~]# /usr/local/harbor/prepare
進行安裝
[root@harbor ~]# /usr/local/harbor/install.sh
✔ ----Harbor has been installed and started successfully.----
配置docker
添加不安全的註冊,否則不能推送進行,需要配置https
[root@harbor ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.231.32"]
}
重啓docker
[root@harbor ~]# systemctl restart docker
瀏覽器訪問
輸入主機ip,用戶名和密碼默認爲:admin,Harbor12345
新建倉庫
lnmp服務器推送鏡像進行測試
配置docker
[root@lnmp ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.231.32:80"]
}
重啓docker
[root@lnmp ~]# systemctl restart docker
給鏡像打標籤
[root@lnmp ~]# docker tag centos:7 192.168.231.32/real/centos:7
登錄私有鏡像庫
[root@lnmp ~]# docker login 192.168.231.32
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
推送鏡像
[root@lnmp ~]# docker push 192.168.231.32/real/centos:7
三、nginx安裝
[root@lnmp ~]# mkdir -p lnmp/{nginx,mysql,php}
[root@lnmp ~]# mkdir -p lnmp/nginx/{html,conf.d,log}
docker-compose編寫
[root@lnmp lnmp]# cat docker-compose.yml
version: '2.2'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/html:/usr/share/nginx/html #網頁文件
- ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf #nginx配置文件
- ./nginx/log:/var/log/nginx/ #nginx日誌
environment:
- TZ=Asia/Shanghai
container_name: "nginx"
networks:
- front
networks:
front:
nginx配置文件
[root@lnmp ~]# cat lnmp/nginx/conf.d/default.conf
server {
index index.php index.html;
server_name php-docker.local;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /usr/share/nginx/html;
}
創建index.html
[root@lnmp ~]# cat lnmp/nginx/html/index.html
<h1>welcome to nginx</h1>
啓動容器
[root@lnmp lnmp]# docker-compose up -d
訪問測試
四、php安裝
編寫php的Dockerfile文件
[root@lnmp ~]# cat lnmp/php/Dockerfile
FROM php:7-fpm
COPY zhongkeda.list /etc/apt/sources.list
RUN apt-get update && apt-get install -y libfreetype6-dev libjpeg-dev libpng-dev zlib1g-dev libzip-dev\
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd \
&& docker-php-ext-install mysqli \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install zip \
&& docker-php-ext-install sockets \
&& rm -r /var/lib/apt/lists/*
上邊安裝相關擴展,與mysql進行連接
創建debian鏡像源
否則下載會很慢
[root@lnmp ~]# cat lnmp/php/zhongkeda.list
deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb-src http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
deb-src http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
創建php鏡像
[root@lnmp php]# pwd
/root/lnmp/php
[root@lnmp php]# docker build -t php:test .
給鏡像打標籤
[root@lnmp ~]# docker tag php:test 192.168.231.32/real/php:test
編寫docker-compose.yml
[root@lnmp lnmp]# cat docker-compose.yml
version: '2.2'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/html:/usr/share/nginx/html
- ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx/log:/var/log/nginx/
depends_on: #解決容器的依賴、啓動先後的問題
- php
environment:
- TZ=Asia/Shanghai
container_name: "nginx"
networks:
- front
php:
image: 192.168.231.32/real/php:test
volumes:
- ./nginx/html:/usr/share/nginx/html
container_name: "php"
networks:
- front
networks:
front:
修改nginx的配置文件
使nginx和php連接
[root@lnmp lnmp]# cat nginx/conf.d/default.conf
server {
index index.php index.html;
server_name php-docker.local;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /usr/share/nginx/html;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
創建php文件
[root@lnmp lnmp]# cat nginx/html/index.php
<?php
phpinfo();
?>
重啓項目中的服務
[root@lnmp lnmp]# docker-compose up -d
訪問測試
五、mysql安裝
編寫docker-compose文件
添加
mysql:
image: mysql:5.6
restart: always
ports:
- "3306:3306"
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=iwebshop
volumes:
- ./mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
- ./mysql/data:/var/lib/mysql
container_name: "mysql"
networks:
- front
創建相關文件
[root@lnmp ~]# mkdir lnmp/mysql/data/
[root@lnmp ~]# egrep -v "^$|#" lnmp/mysql/mysqld.cnf
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log_bin = mysql-bin
binlog_format = mixed
log-error = /var/log/mysql/error.log
symbolic-links=0
創建php文件進行測試
[root@lnmp lnmp]# cat nginx/html/index.php
<?php
$servername = "mysql"; //mysql服務器
$username = "root"; //用戶名
$password = "123456"; //密碼
try {
$conn = new PDO("mysql:host=$servername;dbname=iwebshop", $username, $password);
//數據庫iwebshop
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>
編排
[root@lnmp lnmp]# docker-compose up -d
查看
[root@lnmp lnmp]# docker-compose ps
Name Command State Ports
----------------------------------------------------------------------
mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
nginx nginx -g daemon off; Up 0.0.0.0:80->80/tcp
php docker-php-entrypoint php-fpm Up 9000/tcp
訪問測試
六、部署iWebShop商城
iWebShop包解壓
[root@lnmp ~]# unzip iWebShop5.5臨時試用版本.zip
[root@lnmp ~]# mv iWebShop5.5/* lnmp/nginx/html/
[root@lnmp ~]# mv upload.zip lnmp/nginx/html/upload
[root@lnmp ~]# unzip lnmp/nginx/html/upload/upload.zip
給其他用戶添加寫權限
[root@lnmp ~]# chmod o+w lnmp/nginx/html/*
[root@lnmp ~]# chmod o+w lnmp/nginx/html/config/*
瀏覽器進行安裝
七、部署Weave Scope
Weave Cloud是一種可視化,管理和監控Docker容器的快速而簡單的方法,使開發人員能夠專注於編寫代碼。
編輯docker-compose.yml
添加
scope:
image: weaveworks/scope:1.11.2
network_mode: "host" #此時容器使用本地主機的網絡,它擁有完全的本地主機接口訪問權限。
pid: "host" #跟主機系統共享進程命名空間。
privileged: true #允許容器中運行一些特權命令
labels:
- "works.weave.role=system" #爲容器添加 Docker 元數據(metadata)信息
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:rw"
command:
- "--probe.docker=true"
構建鏡像並啓動容器
[root@lnmp lnmp]# docker-compose up -d
查看
瀏覽器訪問:
ip:4040
監控本機的3個容器,包括其內存、CPU等
總:
version: '2.2'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/html:/usr/share/nginx/html
- ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx/log:/var/log/nginx/
depends_on:
- php
environment:
- TZ=Asia/Shanghai
container_name: "nginx"
networks:
- front
restart: always
php:
image: 192.168.231.32/real/php:test
volumes:
- ./nginx/html:/usr/share/nginx/html
environment:
- TZ=Asia/Shanghai
container_name: "php"
networks:
- front
- back
mysql:
image: mysql:5.6
restart: always
ports:
- "3306:3306"
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=iwebshop
volumes:
- ./mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
- ./mysql/data:/var/lib/mysql
container_name: "mysql"
networks:
- back
scope:
image: weaveworks/scope:1.11.2
network_mode: "host"
pid: "host"
privileged: true
labels:
- "works.weave.role=system"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:rw"
command:
- "--probe.docker=true"
networks:
front:
back: