Docker Compose编排部署LNMP服务

目录

安装docker-ce

阿里云镜像加速器

文件

启动


安装docker-ce

[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

--2023-08-03 18:34:32-- http://mirrors.aliyun.com/repo/Centos-7.repo

正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 140.249.32.202, 140.249.32.203, 140.249.32.204, ...

正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|140.249.32.202|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度:2523 (2.5K) [application/octet-stream]

正在保存至: "/etc/yum.repos.d/CentOS-Base.repo"

100%[============================================================>] 2,523 --.-K/s 用时 0s

2023-08-03 18:34:37 (356 MB/s) - 已保存 "/etc/yum.repos.d/CentOS-Base.repo" [2523/2523])

[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2

已加载插件:fastestmirror, product-id, search-disabled-repos, subscription-manager

可能报错 把原来的删掉从新安装

Transaction check error:

package device-mapper-persistent-data-0.8.5-3.el7_9.2.x86_64 is already installed

错误概要


[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2

[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2

[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

已加载插件:fastestmirror, product-id, subscription-manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo

repo saved to /etc/yum.repos.d/docker-ce.repo

阿里云镜像加速器

[root@localhost ~]# yum -y install docker-ce

[root@localhost ~]# systemctl start docker

[root@localhost ~]# systemctl enable docker

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

[root@localhost ~]# vim /etc/docker/daemon.json

[root@localhost ~]# cat /etc/docker/daemon.json

{

"registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]

}

[root@localhost ~]# systemctl daemon-reload

[root@localhost ~]# systemctl restart docker

[root@localhost ~]# docker version

Client: Docker Engine - Community

Version: 24.0.5

API version: 1.43

Go version: go1.20.6

Git commit: ced0996

Built: Fri Jul 21 20:39:02 2023

OS/Arch: linux/amd64

Context: default

Server: Docker Engine - Community

Engine:

Version: 24.0.5

API version: 1.43 (minimum version 1.12)

Go version: go1.20.6

Git commit: a61e2b4

Built: Fri Jul 21 20:38:05 2023

OS/Arch: linux/amd64

Experimental: false

containerd:

Version: 1.6.22

GitCommit: 8165feabfdfe38c65b599c4993d227328c231fca

runc:

Version: 1.1.8

GitCommit: v1.1.8-0-g82f18fe

docker-init:

Version: 0.19.0

GitCommit: de40ad0

配置基础镜像

[root@localhost ~]# cat centos-7-x86_64.tar.gz | docker import - centos:7

sha256:2069099083a89e56bd326f5352b6d0e7d3ad02ba20d00b5b0305b810501db76c

之前可能有冲突所以删除

[root@localhost ~]# docker rm -f $(docker ps -aq)

c0e35fc73253

文件

编写compose文件
[root@compose compose_lnmp]# cat docker-compose.yml 
version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 80:80
    networks:
      - lnmp
    volumes:
      - ./wwwroot:/usr/local/nginx/html

  php:
    hostname: php
    build:
      context: ./php
      dockerfile: Dockerfile
    ports:
      - 9000:9000
    networks:
      - lnmp
    volumes:
      - ./wwwroot:/usr/local/nginx/html

  mysql:
    hostname: mysql
    image: mysql:5.6
    ports:
      - 3306:3306
    networks:
      - lnmp
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/data:/var/lib/mysql
    command: --character-set-server=utf8
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: wordpress
      MYSQL_USER: user
      MYSQL_PASSWORD: user123

networks:
  lnmp:

可以看到一份标准配置文件应该包含 version、services、networks 三大部分,共有三级标签,每一级都是缩进两个空格。下面来详细说明一下里面的内容:
version: '3'  这是定义compose的版本号为version 3,可以参考官方文档详细了解具体有哪些版本 https://docs.docker.com/compose/compose-file/
services:
nginx:这是services下面的二级标签,名字用户自己定义,它将是服务运行后的名称;
hostname: nginx 这是定义容器的主机名,将写入到/etc/hostname中;
build:
 context: ./nginx 指定nginx服务的上下文路径;
 dockerfile:Dockerfile 指定通过上面指定路径中的Dockerilfe来构建;
ports:
 - 80:80 端口映射没什么好说的;
networks:
 -lnmp 指定的网络环境
volumes:把宿主机的/wwwroot目录绑定到容器中的/usr/local/nginx/html目录;

php:这个二级标签服务和下面的内容跟nginx差不多;
mysql:这个二级标签服务也和nginx、php差不多,唯一不同的是多了个images标签、还有定义了些环境变量。
image: mysql:5.6 它是通过mysql:5.6镜像来构建mysql服务器,前面nginx、php都指定了上下文通过Dockerfile来构建的。
  environment:
   MYSQL_ROOT_PASSWORD:定义root用户密码变量为123456;
   MYSQL_DATABASE:定义了数据变量为wordpress;
   MYSQL_USER:定义了普通用户变量为user;
   MYSQL_PASSWORD:定义了普通用户密码变量为user123;
3、networks:
   lnmp: 相当于执行docker network create lnmp命令了;

[root@localhost compose_lnmp]# ll
总用量 4
-rw-r--r--. 1 root root 807 6月   3 2019 docker-compose.yml
drwxr-xr-x. 4 root root  30 6月  22 2019 mysql
drwxr-xr-x. 2 root root  83 8月   3 20:57 nginx
drwxr-xr-x. 2 root root  64 8月   3 20:56 php
drwxr-xr-x. 2 root root  41 6月  22 2019 wwwroot
[root@localhost compose_lnmp]# ls mysql
conf  data
[root@localhost compose_lnmp]# vim mysql/conf/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/tmp/mysql.sock
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysql/mysql.log
pid-file=/tmp/mysql.pid

[root@localhost compose_lnmp]# vim nginx/nginx.conf 

user nginx nginx;
worker_processes 1;
worker_rlimit_nofile 102400;

events {
        use epoll;
        worker_connections 4096;
}

events {
        use epoll;
        worker_connections 4096;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;

        server {
        listen       80;
        server_name  localhost;
        charset utf-8;

        location / {
            root   html;
            index  index.php index.html index.htm;
        }
        location ~ \.php$ {
            root html;
                        fastcgi_index index.php;
            fastcgi_pass 192.168.50.59:9000;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
}

daemon off;

[root@localhost compose_lnmp]# vim mysql/data/
auto.cnf            ib_logfile0         mysql/              wordpress/          
ibdata1             ib_logfile1         performance_schema/ 
[root@localhost compose_lnmp]# vim nginx/nginx.conf 
[root@localhost compose_lnmp]# vim php/              源文件照搬的
Dockerfile         php-5.6.39.tar.gz  php.ini            
[root@localhost compose_lnmp]# vim php/php.ini 

[PHP]

;;;;;;;;;;;;;;;;;;;
; About php.ini   ;
;;;;;;;;;;;;;;;;;;;

[root@localhost compose_lnmp]# vim wwwroot/index.
index.html  index.php   
[root@localhost compose_lnmp]# vim wwwroot/index.html 
[root@localhost compose_lnmp]# vim wwwroot/index.php 

<?php
phpinfo();
?>
~     

[root@localhost compose_lnmp]# vim wwwroot/index.html 

www.crushlinux.com
~                   

[root@localhost ~]# /root/docker-compose -f docker-compose.yml up -d

-bash: /root/docker-compose: 权限不够

[root@localhost ~]# chmod 777 /root/docker-compose

[root@localhost ~]# cd compose_lnmp

启动

[root@localhost compose_lnmp]# /root/docker-compose -f docker-compose.yml up -d

成功

查看

[root@localhost compose_lnmp]# /root/docker-compose ps

Name Command State Ports


compose_lnmp_mysql_1 docker-entrypoint.sh --cha ... Up 0.0.0.0:3306->3306/tcp,:::3306->3306/tc

p

compose_lnmp_nginx_1 /run.sh Up 0.0.0.0:80->80/tcp,:::80->80/tcp

compose_lnmp_php_1 ./sbin/php-fpm -c /usr/loc ... Up 0.0.0.0:9000->9000/tcp,:::9000->9000/tc

成功

拜拜了

相关推荐
程序员南飞1 小时前
ps aux | grep smart_webrtc这条指令代表什么意思
java·linux·ubuntu·webrtc
StrokeAce1 小时前
linux桌面软件(wps)内嵌到主窗口后的关闭问题
linux·c++·qt·wps·窗口内嵌
热爱嵌入式的小许5 小时前
Linux基础项目开发1:量产工具——显示系统
linux·运维·服务器·韦东山量产工具
雪域迷影8 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql
福大大架构师每日一题9 小时前
22.1 k8s不同role级别的服务发现
容器·kubernetes·服务发现
韩楚风9 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
莹雨潇潇9 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
陈苏同学9 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO9 小时前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu710 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器