二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • 最佳实践

  • 迎刃而解

  • Nginx

  • Php

  • Zabbix

  • AWS

  • Prometheus

  • Grafana

  • Loki

  • CentOS

  • Supervisord

  • Systemd

  • Docker

    • 从DockerHub到阿里云镜像仓库:整理汇总我同步过的docker镜像(公开可匿名pull)
    • docker的几种安装方式
    • docker配置加速器的几种方案
    • docker搭建官方版私有仓库(了解)
    • Docker笔记之企业级仓库harbor搭建
    • 认识了解Dockerfile
    • 利用Dockerfile创建一些基础镜像
    • Docker笔记之与镜像相关的命令整理
    • 从docker容器时间问题探究到Namespace问题
    • Docker笔记之制作kafka镜像
    • Docker笔记之制作lnmp镜像
      • 1,说明
      • 2,基础镜像。
      • 3,最终镜像。
      • 4,启动验证。
      • 5,实际应用。
        • 1,准备工作。
        • 2,构建应用。
        • 3,持久化启动。
      • 6,镜像下载。
    • Docker笔记之使用apline镜像
    • Docker笔记之修改默认数据存储目录
    • Docker笔记之修改默认网段
    • docker磁盘或者镜像清理相关内容
    • centos镜像添加chrome浏览器以及中文字体
    • 利用buildx构建支持多CPU架构平台的docker镜像
    • docker exec命令中含有通配符执行失败的问题
    • Docker 调试构建失败的 Dockerfile 的方法
    • Docker容器如何优雅地访问宿主机网络
  • Docker-Compose

  • Rancher

  • Ansible

  • OpenLdap

  • GitLab

  • GitHub

  • Etcd

  • Consul

  • RabbitMQ

  • Kafka

  • Mysql

  • MongoDB

  • OpenVPN

  • Kvm

  • VMware

  • 配置文件详解

  • Other

  • 运维观止
  • Docker
二丫讲梵
2019-08-05
目录

Docker笔记之制作lnmp镜像

文章发布较早,内容可能过时,阅读注意甄别。

有时候有一些 PHP 项目,可能稳定性并不是最高的指标,简单,便捷,好用才是,那么使用一个镜像来跑,似乎也是非常合适的,今天就来做一下 lnmp 的镜像,以便于后边使用。

# 1,说明

此镜像基于 lnmp 一键安装包制作,制作过程如下。

# 2,基础镜像。

首先启动一个 centos-7.4 的基础镜像,然后在镜像内把 lnmp 环境安装好。

$ docker run -itd --name eryajf registry.cn-hangzhou.aliyuncs.com/eryajf/centos:7.4
1

然后进入到镜像中,下载 lnmp 包,进行安装。

$ docker exec -it eryajf sh
$ wget http://175.6.32.4:88/soft/lnmp/lnmp1.4-full.tar.gz
$ tar xf lnmp1.4-full.tar.gz
$ cd lnmp1.4-full
$ ./install.sh
1
2
3
4
5

经过简单初始选项,就进入了安装阶段。

  • 特别注意1:这个地方 MySQL 的密码为root,而且开启了远程登录,以便于后边映射出去之后方便远程登录。
  • 特别注意2:我把这里的 NGINX 启动方式,改成了前台启动,以便于后边最终镜像的制作。

等待一会儿,一个完整的 lnmp 环境就安装好了,然后精简一下当前镜像当中的内容,把不要的东东都删掉,然后把这个镜像保存成一个基础镜像。

$ docker commit eryajf lnmp:0.1
1

申明

原创文章eryajf,未经授权,严禁转载,侵权必究!此乃文中随机水印,敬请读者谅解。

Copyright 二丫讲梵 (opens new window) 版权所有

# 3,最终镜像。

上边保存了一个 lnmp:0.1的镜像,此时还不能作为一个常规镜像来使用,因为刚刚 commit 保存的镜像并不会保存应用的状态,因此我们需要在此基础之上,利用 Dockerfile 进行简单的改造。

$ mkdir lnmp
$ cd lnmp
1
2

Dockerfile:

$ cat Dockerfile
FROM       lnmp:0.1
MAINTAINER eryajf <Linuxlql@163.com>
ADD   run.sh  /
EXPOSE 80
EXPOSE 3306
ENTRYPOINT [ "sh", "-c", "/run.sh" ]
1
2
3
4
5
6
7

run.sh:

$ cat run.sh
#!/bin/bash
#start php
/usr/local/php/sbin/php-fpm
#start mysql
/etc/init.d/mysql start
#start nginx
/usr/local/nginx/sbin/nginx
1
2
3
4
5
6
7
8

然后就可以构建最终的镜像了。

$ docker bilid -t lnmp:1.0 .
1

这样,就制作好了最终的镜像了。

# 4,启动验证。

因为我们在 Dockerfile 当中定义了两个端口,那么直接使用如下方式启动,系统会自动给我们映射两个随机的端口。

$ docker run -itd --name lnmp -P lnmp:1.0
1

然后可以看一眼映射的随机端口。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
5ba0968e8b6b        lnmp:1.0               "sh -c /run.sh"     22 minutes ago      Up 22 minutes       0.0.0.0:32771->80/tcp, 0.0.0.0:32770->3306/tcp   lnmp
1
2
3

这个时候访问一下localhost:32771应该就能看到 NGINX 的欢迎页面了。

img

# 5,实际应用。

# 1,准备工作。

准备好程序所需要的各种包以及配置。

$ ls
Dockerfile nginx.conf run.sh     typecho
1
2

Dockerfile

$ cat Dockerfile
FROM    registry.cn-hangzhou.aliyuncs.com/eryajf/lnmp:1.4
MAINTAINER eryajf <Linuxlql@163.com>
COPY typecho/ /home/wwwroot/typecho
COPY nginx.conf /usr/local/nginx/conf
ADD   run.sh  /
EXPOSE 80
EXPOSE 3306
ENTRYPOINT [ "sh", "-c", "/run.sh" ]
1
2
3
4
5
6
7
8
9

nginx.conf

user  www www;
worker_processes auto;
error_log  /home/wwwlogs/nginx_error.log  crit;
pid        /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
daemon off;
events
    {
        use epoll;
        worker_connections 51200;
        multi_accept on;
    }
http
    {
        include       mime.types;
        default_type  application/octet-stream;
        server_names_hash_bucket_size 128;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;
        sendfile   on;
        tcp_nopush on;
        keepalive_timeout 60;
        tcp_nodelay on;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;
        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";
        #limit_conn_zone $binary_remote_addr zone=perip:10m;
        ##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.
        server_tokens off;
        access_log off;
server
    {
        listen 80 default_server;
        #listen [::]:80 default_server ipv6only=on;
        server_name _;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/typecho;
    location ~ .*\.php(\/.*)*$ {
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
        include pathinfo.conf;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        expires      30d;
    }
    location ~ .*\.(js|css)?$ {
        expires      12h;
    }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

run.sh

$ cat run.sh
#!/bin/bash
chmod -R 777 /home/wwwroot/typecho
#start php
/usr/local/php/sbin/php-fpm
#start mysql
/etc/init.d/mysql start
#start nginx
/usr/local/nginx/sbin/nginx
1
2
3
4
5
6
7
8
9

# 2,构建应用。

$ docker build -t daohang:1.0 .
1

构建完成之后,就可以启动了。

$ docker run -itd --name daohang -p 80:80 -p 3306:3306 daohang:1.0
1

启动之后,访问 localhost/install.php执行安装的步骤,当然,安装的时候,还需要连接上数据库创建一下数据库,然后就能使用了。关于后续的数据库持久化等问题,可自行思考解决。

# 3,持久化启动。

为了保证服务重启数据不丢失,需要进行一定的持久化操作,目前最重要的内容有两部分,其一是数据库,其二是应用包。

那么在刚刚已经启动的基础上,可以先把数据拷贝出来一份,然后挂载到宿主机,就实现了数据的持久化了。

$ docker cp daohang:/usr/local/mysql/var /data/daohang/data
$ docker cp daohang:/home/wwwroot/typecho /data/daohang/typecho
1
2

然后重新以挂载方式启动服务:

$ docker run -itd --name daohang -p 80:80 -p 3306:3306 -v /data/daohang/data:/usr/local/mysql/var -v /data/daohang/typecho:/home/wwwroot/typecho --privileged daohang:1.0
1

--privileged表示容器内使用 root 来运行,如果不加这条选项,那么挂载后的 MySQL 启动将会报错,所以加上这条配置。

如此启动,就能够实现数据的持久化了。

# 6,镜像下载。

如上过程中涉及到的两个镜像,我都已经打包好上传到了公网,有需要的,可以下载使用。

阿里云地址:

$ docker pull registry.cn-hangzhou.aliyuncs.com/eryajf/lnmp:1.4
$ docker pull registry.cn-hangzhou.aliyuncs.com/eryajf/typecho:1.0
1
2

dockerhub 地址:

 $ docker pull eryajf/lnmp:1.4
 $ docker pull eryajf/typecho:1.0
1
2
微信 支付宝
#docker#nginx#lnmp
上次更新: 2024/07/04, 22:40:37
Docker笔记之制作kafka镜像
Docker笔记之使用apline镜像

← Docker笔记之制作kafka镜像 Docker笔记之使用apline镜像→

最近更新
01
学习周刊-总第212期-2025年第21周
05-22
02
从赵心童世锦赛夺冠聊聊我的斯诺克情缘
05-16
03
学习周刊-总第211期-2025年第20周
05-15
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式