分解docker在lnmp环境搭建中的作用

TaoTaoFu 2019-06-25

前言

初学者在dcoker学习过程中,可能不太清楚docker中那么多的命令,参数,工具在lnmp环境搭建中起了什么作用,下面跟着我来熟悉一下。(本文面向的是不怎么熟悉linux的:phper)

镜像,容器,仓库

镜像:Docker 镜像就是一个只读的模板。
容器:Docker 利用容器来运行应用。
仓库:仓库是集中存放镜像文件的场所。

在环境搭建中的作用:通过镜像创建容器,通过容器安装运行应用,最后可以将容器生成为镜像保存到仓库
创建容器的三种方法:

  1. 使用centos镜像,通过命令创建一个容器

    docker pull centos
    # pull 拉取镜像
    docker run -it -P --name 'centos-test' --rm centos /bin/bash
    # --name 指定容器别名
    # -P 通过NAT机制将容器标记暴露的端口自动映射到本地主机的临时端口
    # -i 保持标准输入打开 默认为false
    # -t 是否分配一个伪终端
    # 启动一个bash终端,允许用户进行交互
  2. 使用centos基础镜像,通过Dockerfile创建自定义镜像

    FROM centos
    docker build -t centos-slef/laster .
  3. 使用centos基础镜像,通过docker-compose创建容器并启动

    lnmp:
    image: centos
    # 使用build 参数,会通过 Dockerfile 创建镜像并基于此镜像创建运行容器
    # 使用image 参数,会直接通过 image 指定的镜像创建并运行容器
    docker-compose up --build
  4. 通过容器创建镜像

    1. 在容器中安装lnmp环境
    2. 退出并执行

      docker commit -a 'amor' -m 'add lnmp' c6b9b6cf3174 lnmp:1.4.0
          # -a 作者信息
          # -m 备注
          # c6b9b6cf3174 容器id 运行的通过:docker ps 查看 停止的通过:docker ps -qa 查看

Dockerfile

Dockerfile:Dockerfile 是一个文本格式的配置文件,用户可以使用Dockerfile来快速的创建自定义镜像。
在环境搭建中的作用:

  1. 对于不想用Dockerfile创建lnmp环境的人来说,可以起到微调以容器创建的镜像的作用

    # 假设,我们已经通过容器创建了一个镜像 lnmp:1.4.0
    FROM lnmp:1.4.0
    RUN yum install -y git
    # 当然你可以继续递归:通过lnmp:1.4.0镜像,创建容器,进入容器安装应用,生成镜像
  2. 对于运维来说,直接可以用Dockerfile创建lnmp环境镜像

docker-compose

Docker官方编排工具,负责实现对Docker容器集群的快速编排。定位:定义和运行多个Docker容器的应用.

现在我们有这样的一个需求,我不单单需要lnmp环境,可能还需要lamp环境,可能还有redis。如果不用docker-compose 我们可能将上述讲的命令每搭建一次就需要执行一遍,有没有能统一管理的?有,就是docker-compose.
在环境搭建中的作用:
快速创建镜像,快速创建并运行容器,实现统一管理。

lnmp:
  build: . # 根据当前路径下的Dockerfile创建镜像
  ports:   # 将定义的端口暴露并映射到本地
    - "80:80"
    - "443:443"
    - "22:22"
  volumes: # 挂载文件夹
    # nginx 配置文件夹
    - ./conf/nginx/:/usr/local/nginx/conf/
    # mysql 配置文件
    - ./conf/mysql/my.cnf:/etc/my.cnf:rw
    # php配置文件
    - ./conf/php/:/usr/local/php/etc/
    # 项目目录
    - /data/Nutcloud/Ubuntu/website/:/data/website/
    # nginx 日志
    - /data/Nutcloud/Ubuntu/docker/lnmp/log:/
  links: # 容器互联
    - redis:redis
  tty: true # 保证docker-compose 执行后,容器不自动退出
redis:
  image: redis:latest
  ports:
    - "6379:6379"

相关推荐