單機編排LNMP+Harbor+WeaveScope

一、架構圖

二、目的

使用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.----

圖片.png

配置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

圖片.png

圖片.png

新建倉庫

圖片.png

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:

 

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