Docker 技术部署基于 LAMP 服务器环境网站

一、Docker

正如其生动的 logo,我瞅着这萌萌的 docker 小鲨鱼拖载着多个集装箱(docker容器),便心生喜爱。

image-20200630214052886

docker 是运行于 Linux 内核,基于操作系统层面的虚拟化技术。相比传统物理层级的虚拟机具有:

占用资源少、秒级启动、快速部署、应用隔离、便于迁移、保证开发测试生产环境一致性、多租户环境等优势。

  • 安装

    uname -r #查看linux内核3.10以上
    
    yum -y update #系统升级
    
    yum install -y docker #安装docker
    
    reboot #重启linux
    
    systemctl start docker #开启docker服务
    
    docker version #查看docker版本号验证
    
    1592674135719
  • 思路

通过docker网络,来实现容器之间的访问。

我画了幅示意图如下:

1592665123026

(一)Docker 容器

创建并运行容器:

docker run -d  [镜像名/id](hash码) #-d后台运行
  • 查看容器

    docker ps #查看正在运行的容器

    docker ps -a #查看所有容器

  • 删除容器

    docker rm [容器名/id] #删除容器(exited的)

  • 控制容器状态

    docker stop [容器名/id] # exited 状态

    docker start/restart [容器名/id] # up 状态

  • 进入运行容器

    docker exec -it [容器名/id] bash # -it 交互式终端 bash 运行shell程序

    exit # 从容器里退出到宿主机

(二)Docker 映射

–port 将宿主机的数据卷映射到容器目录中

–volume 将宿主机的端口映射到容器端口

docker run -p 宿主机端口:容器端口 -v 数据卷名:容器目录 --privileged=true [镜像名/id]  #--p特殊权限
  • 数据卷功能:供一个或多个容器使用的宿主机特殊目录;用来持久化数据,它的生命周期独立于容器外

  • 数据卷操作

    docker volume create 数据卷名 #创建数据卷(自动生成一个目录)

    docker volume ls #列出已有数据卷

    docker volume inspect 数据卷名 #查看某个数据卷(包括它的目录)

    docker volume rm 数据卷名 #删除数据卷(先删使用该卷的容器)

(三)Docker 网络

创建并启动容器的同时,再把容器加到特定的网络:

docker run --network 网络名  [镜像名/id]
  • 网络功能:实现多个 docker 容器之间的网络互联

  • 网络操作

    docker network create 网络名 #创建网络

    docker network ls #列出已有网络

    docker network inspect 网络名 #查看某个网络

    docker network rm 网络名 #删除网络

二、LAMP 服务器环境部署网站

基于 Linux + Apache + Mysql + Php 的服务器环境,部署网站到 Docker 容器。

systemctl stop firewalld #先暂时关闭防火墙 
systemctl restart docker #并重启docker服务

1592675153213

(一)为网站文件创建一个数据卷

  1. 数据卷创建

    docker volume create webvol
    

    1592675239813

  2. Xftp 工具上传文件—>数据卷 webvol 的目录 /var/lib/docker/volumes/webvol/_data

    开启网卡,得到宿主机的 ip 地址

    1592674838638

    Xftp 访问宿主机 ip 地址,并上传文件

    1592675922781
  3. Linux 解压文件: unzip Discuz_X3.3_SC_UTF8.zip #先cd到webvol/_data

    1592676521976

  4. 修改文件的权限:chmod -R 777 upload

    1592676740023

(二)为数据库创建一个数据卷

  1. 数据卷创建

    docker volume create dbvol 
    

    1592677006357

  2. 数据的持久化,防止对应容器删除后,数据库内容也随之被删除

(三)准备 Apache、Mysql 镜像

  1. 拉取网站服务器:docker pull webdevops/php-apache-dev

  2. 拉取数据库服务器:docker pull mysql:5.5.62

    1592677224898

(四)创建 docker 网络

docker network create mynet

1592677316919

(五)启动 Apache、Mysql 容器,并映射端口、目录和加入网络

  1. 启动 Apache 容器

    docker run -d -p 8086:80 -v webvol:/app --network mynet --privileged=true webdevops/php-apache-dev
    

    1592677724309

    • apache 网站发布目录 /app
    • 进入容器中查看 cat /opt/docker/etc/httpd/vhost.conf 配置
  2. 启动 Mysql 容器

    docker run -d -p 3306:3306 -v dbvol:/var/lib/mysql --network mynet -e MYSQL_ROOT_PASSWORD=123456 --privileged=true  mysql:5.5.62   #-e 容器运行设定参数
    

    1592677891434

    • mysql 数据存放目录 /var/lib/mysql
    • 进入容器中查看 cat /etc/mysql/my.cnf 配置
    1. 查看正在运行的容器
    docker container ls   #可以看到mysql和apache容器已经正在运行
    

    1592684926814

(六)访问网站

​ http://192.168.0.124:8086/upload # http://宿主机ip地址:apache端口/upload 该网站文件夹

1592730224010

(七)安装及填写数据库信息

​ 修改数据库服务器地址为 linux 宿主机的ip,数据库密码是运行 mysql 容器时的密码等。

  • 安装Discuz!X
1592730341991
  • 填写数据库服务器地址(同宿主机ip),数据库密码等。
1592730501013
  • 正在安装
1592730639320
  • 论坛网站已成功部署安装

三、数据卷的数据持久化

当我停止 docker 服务后,再启动 docker 服务;

systemctl stop docker
systemctl start docker
docker container ls
dcoker volume ls

1592686039697
此时容器 mysql 和 apache 已经关闭不运行

数据卷 dbvol 和 webvol 依然存在,其中的数据自然存在,这就是持久化

想要再次部署,只需再 run 一次容器,不用再创建数据卷。
1592686950849

四、原创内容,手动码字不易,喜欢请点赞收藏。

未经许可不得转载,不得盗用图片,欢迎关注本博主其他原创文章。

展开阅读全文
©️2020 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值