2017级系统综合实践第3次实践作业

完成Docker-compose的安装

①下载docker-compose最新版本

curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

②修改目录权限,否则后续docker-compose up命令会报错

sudo chmod +x /usr/local/bin/docker-compose

创建软连接至一个PATH目录下,一般为/usr/bin

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose


docker-compose --version 出现版本号表示安装成功

Dockerfile编写

①创建项目文件夹: touch docker-compose.yml dockerfile_mysql dockerfile_nginx dockerfile_php default.conf && mkdir mysql_data web && tree,其中default.conf为nginx的默认配置文件,mysql_data用来挂载mysql目录,web用来挂载nginx和php的目录

②拉取需要的镜像
mysql: docker pull mysql

docker pull php:7.4-fpm

③编辑配置文件

  • dockerfile_mysql
#基础镜像
FROM mysql
#作者信息
MAINTAINER lqy
#设置root密码
ENV MYSQL_ROOT_PASSWORD admin
#禁止空密码登录
ENV MYSQL_ALLOW_EMPTY_PASSWORD no
  • dockerfile_php
#基础镜像
FROM php:7.4-fpm
#作者信息
MAINTAINER lqy
RUN apt-get update && apt-get install -y 
        libfreetype6-dev 
        libjpeg62-turbo-dev 
        libpng-dev 
    && docker-php-ext-install pdo_mysql 
    && docker-php-ext-configure gd --with-freetype --with-jpeg 
    && docker-php-ext-install -j$(nproc) gd
  • dockerfile_nginx
#基础镜像
FROM nginx
#作者信息
MAINTAINER lqy
#声明暴露的端口
EXPOSE 80
  • default.conf
server {
    listen       80;        #修改映射端口
    server_name  localhost;

    location / {
        root   /web/html;     #修改工作目录
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ .php$ {
        root           /web/php;        #修改工作目录
        fastcgi_pass   myphp:9000;        #修改为容器名
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}
  • docker-compose.yml
version: "3"
services:
 nginx:
    image: mynginx_image                #指定镜像名
    container_name: mynginx             #指定容器名
    build:
      context: .
      dockerfile: dockerfile_nginx      #指定dockerfile文件
    ports:
      - "80:80"                       #修改端口映射
    volumes:
      - ./web:/usr/local/lnmp/web/html                 #挂载容器卷,本地/容器内修改文件后,另一方都会同步更新;
      - ./default.conf:/etc/nginx/conf.d/default.conf     #挂载配置文件

 php:
    image: myphp_image
    container_name: myphp
    build:
      context: .
      dockerfile: dockerfile_php
    environment:
      MYSQL_PASSWORD: admin            #设置好环境变量,在php代码中使用变量名直接引用
    volumes:
      - ./web:/usr/local/lnmp/web/php                  #挂载工作目录到本机web目录

 mysql:
   image: mysql_image
   container_name: mysql
   build:
      context: .
      dockerfile: dockerfile_mysql
   ports:
     - "3306:3306"
   volumes:
     - ./mysql_data:/var/lib/mysql       #挂载容器卷,实现数据同步,防止数据丢失

④在web目录中新建index.html和index.phpcd web && touch index.html index.php并编辑

#index.html
HELLO LQY
#index.php
<?php phpinfo();?>

使用Compose实现多容器运行机制
①执行docker-compose文件docker-compose up -d --build


②查看容器 docker ps -a和docker images镜像

③分别访问测试页面index.html和index.php

(4)服务测试
①进行连接部分修改

②创建数据库成功

③创建数据表成功

④新纪录插入成功

⑤修改成功

⑥mysql查看

主要问题和解决方法

①那个选做,不是我不想做啊,我耗费了一个晚上,还是卡在了这里

②还是编译文件
我的文件内容,像地址用户名什么的每次都会出一点问题,所以下次我一定要细心细心再细心,不能浪费太多时间

原文地址:https://www.cnblogs.com/liang-an/p/12852674.html