02@Docker网络介绍及网络模式的使用

Docker网络的介绍

Docker 本身的技术依赖于 Linux 内核虚拟化技术的发展。所以 Docker 对 Linux 内核的特性有很强的依赖
Docker 使用到的与 Linux 网络有关的技术分别有:网络名称空间、Veth、Iptables、网桥、路由

一、Docker网络原理

1、docker网络介绍

   Linux中,为了支持网络协议栈的多个实例,Linux 在网络协议栈中引入了网络名称空间(Network Namespace)
这些独立的协议栈被隔离到不同的命名空间中处于不同的命名空间的网络协议栈是完全隔离的,彼此之间无法进行网络通信,就好像两个“平行宇宙”通过这种对网络资源的隔离,通过这种对网络资源的隔离,就能在一个宿主机上虚拟多个不同的网络环境,Docker 正是利用这种网络名称空间的特性,实现了不同容器之间的网络隔离。
在 Linux 的网络命名空间 内可以有自己独立的 Iptables 来转发、NAT 及 IP 包过滤等功能。 
Linux 的网络协议栈是十分复杂的,为了支持独立的协议栈,相关的这些全局变量都必须修改为协议栈私有
最好的办法就是让这些全局变量成为一个 Net Namespace 变量的成员,然后为了协议栈的函数调用加入一个 Namespace 参数。这就是 Linux 网络名称空间的核心。
所以的网络设备都只能属于一个网络名称空间。当然, 通常的物理网络设备只能关联到 root 这个命名空间中。虚拟网络设备则可以被创建并关联到一个给定的命名空 间中,而且可以在这些名称空间之间移动

2、Docker网络原理

1》Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
2》Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器

linux多个网络的实现状态
在这里插入图片描述

二、docker网络基础

namespace(命名空间)和cgroup是软件容器化(想想Docker)趋势中的两个主要内核技术。简单来说,cgroup是一种对进程进行统一的资源监控和限制,它控制着你可以使用多少系统资源(CPU,内存等),而namespace是对全局系统资源的一种封装隔离,它通过Linux内核对系统资源进行隔离和虚拟化的特性,限制了您可以看到的内容

【网络命名空间】

#命名空间的叙述:
Linux 3.8内核提供了6种类型的命名空间:Process ID (pid)、Mount (mnt)、Network (net)、InterProcess Communication (ipc)、UTS、User ID (user)。
  例如:pid命名空间内的进程只能看到同一命名空间中的进程。mnt命名空间,可以将进程附加到自己的文件系统(如chroot)。在本文中,我只关注网络命名空间 Network (net)。
网络命名空间为命名空间内的所有进程提供了全新隔离的网络协议栈。这包括网络接口,路由表和iptables规则。通过使用网络命名空间就可以实现网络虚拟环境,实现彼此之间的网络隔离,这对于云计算中租户网络隔离非常重要

1、Veth 设备对

在这里插入图片描述

Veth设备对是为了在不同的网络名称空间之间进行通信,利用它可以直接将两个网络名称空间链接起来。
由于要连接的两个网络命名空间,所以Veth设备是成对出现的,很像一对以太网卡,并且中间有一根直连的网线。既然是一对网卡,那么我们将其中一端称为另一端的peer。
在Veth设备的一端发送数据时,它会将数据直接发送到另一端,并触发另一端的接收操作

2、网络原理实验的实现

需求 : 建立两个名称空间, 并实现相互 ping 通

# 查看、添加、 删除 namespace 命令 
ip netns list                # 查看
ip netns add [namespace]     # 添加
ip netns delete [namespace]  # 删除
-------------------------------------------------------------------------------------------

# 实验测试

1)################################# 建立两个名称空间   ######################################
[root@hzl ~]# ip netns add test1
[root@hzl ~]# ip netns add test2
[root@hzl ~]# ip netns list
test2
test1



2################################### 建立一对 veth设备对 ##########################################
[root@hzl ~]# ip link add veth1 type veth peer name veth2
[root@hzl ~]# ip link




3################################# veth 分别添加到名称空间 test1 及 test2 中  ################################
[root@hzl ~]# ip link set veth1 netns test1
[root@hzl ~]# ip link set veth2 netns test2






4################################# 检查是否添加成功  ####################################
[root@hzl ~]# ip netns exec test1 ip link
[root@hzl ~]# ip netns exec test2 ip link






5)# ###############################  设置 IP , 并将其状态 up  ####################################
[root@hzl ~]# ip netns exec test1 ip addr add 172.17.0.111/20 dev veth1
[root@hzl ~]# ip netns exec test2 ip addr add 172.17.0.112/20 dev veth2
[root@hzl ~]# ip netns exec test1 ip link set dev veth1 up
[root@hzl ~]# ip netns exec test2 ip link set dev veth2 up






6############################## 查看 IP 是否设置成功 #########################################
[root@hzl ~]# ip netns exec test1 ip a
[root@hzl ~]# ip netns exec test2 ip a






7#############################检测一下是否能相互 ping 通  #######################################
[root@hzl ~]# ip netns exec test1 ping 172.17.0.112
[root@hzl ~]# ip netns exec test2 ping 172.17.0.111

【网桥】

Linux 可以支持多个不同的网络,它们之间能够相互通信,就需要一个网桥。 网桥是二层的虚拟网络设备,它是把若干个网络接口“连接”起来,从而报文能够互相转发。网桥能够解析收发的报文,读取目标 MAC 地址的信息,和自己记录的 MAC 表结合,来决定报文的转发目标网口
在这里插入图片描述

#网桥的概述:
网桥设备 brO 绑定了 eth0、 eth1 。对于网络协议械的上层来说,只看得到 brO 。
因为桥接是在数据链路层实现的 ,上层不需要关心桥接的细节,于是协议枝上层需要发送的报文被送到 brO ,网桥设备的处理代码判断报文该被转发到 ethO 还是 ethl ,或者两者皆转发。
反过来,从 ethO 或从 ethl 接收到的报文被提交给网桥的处理代码,在这里会判断报文应该被转发、丢弃还是提交到协议枝上层。 而有时 ethl 也可能会作为报文的源地址或目的地址 直接参与报文的发送与接收,从而绕过网桥

1、网桥的使用

#网桥命令格式 : 
docker network [命令参数]


#查看当前系统有哪些网桥 "ls"
[root@hzl ~]#docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
befd59194a71        bridge              bridge              local
94f8e35f3357        host                host                local
79fb28a9a12e        none                null                local



#创建网桥 "create"
[root@hzl ~]#docker network create hzl
ffac93578a0ce40395936d226bd097fd049ad077022419a9b6b074b6fe2f892b
[root@hzl ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
befd59194a71        bridge              bridge              local
94f8e35f3357        host                host                local
79fb28a9a12e        none                null                local
ffac93578a0c        hzl                 bridge              local         #新创建的网桥


#查看网桥信息,格式 : 
docker network inspect [网桥的名称|网桥ID]

[root@hzl ~]#docker network inspect hzl
[
    {
        "Name": "hzl",
        "Id": "ffac93578a0ce40395936d226bd097fd049ad077022419a9b6b074b6fe2f892b",
        "Created": "2020-12-03T11:56:35.554136022+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]



#删除网桥 "rm"
[root@hzl ~]#docker network rm hzl
shawn
[root@hzl ~]#docker network ls       #查看发现"hzl"删除了
NETWORK ID          NAME                DRIVER              SCOPE
befd59194a71        bridge              bridge              local
94f8e35f3357        host                host                local
79fb28a9a12e        none                null                local






#清理网桥 "prune"         #创建多个网桥,使用prune进行全部删除
[root@hzl ~]# docker network create hzl1
f4d2f2b57b48cd35b3cc9eddad0377cae95d213032ed0d6a92e9de9571adeb4e  #创建成功
[root@hzl ~]# docker network create hzl2
ea66ed0d06adbe7f5211f3ae38b6edeb47dffac0f53240e9204fd3dcaf4670d5  #创建成功
[root@hzl ~]# docker network create hzl3
222d6e298d6091cea0a6229e19c84825a41ea92b7c0b512db47c858dde7259f0  #创建成功
[root@hzl ~]# docker network prune
WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y   #问你是否要这样做"yes"
Deleted Networks:                            #将要删除以下网桥
hzl1
hzl2
hzl3



#查看网桥
[root@hzl ~]#docker network ls     # 删除了所有的hzl网桥	
NETWORK ID          NAME                DRIVER              SCOPE
befd59194a71        bridge              bridge              local
94f8e35f3357        host                host                local
79fb28a9a12e        none                null                local
 


ps :使用prune可以清空所有网桥,但是只能清空自己创建的,且没有使用的网桥

【iptables】

iptables是 linux 系统自带的优秀且完全免费的基于包过滤的防火墙工具、它的功能十分强大、使用非常灵活、可以对流入、流出及流经服务器的数据包进行精细的控制

#iptables的概述:

1》在Linux网络协议棋中有一组回调函数挂接点,通过这些挂接点挂接的钩子函数可以在Linux 网络棋处理数据包的过程中对数据包进行 些操作,例如过滤、修改、丢弃等 整个挂接点技术叫作 Netfilter lptables

2》Netfilter 负责在内核中执行各种挂接的规则,运行在内核模式中:而 lptables 是在用户模式下运行的进程,负责协助维护内核中 Netfilter 的各种规则表 通过 者的配合来实现整个 Linux网络协议战中灵活的数据包处理机制

【网络总述】

在这里插入图片描述

三、Docker网络模式

安装Docker时,它会自动创建三个网络, none 、host、bridge(创建容器默认连接到此网络)

1、Docker系统自带的网络模式

#查看当前系统有哪些网络(网桥):docker network ls
[root@docker ~]# docker network ls 
NETWORK ID     NAME      DRIVER    SCOPE
b5e4fae2126d   bridge    bridge    local
c0e4bda04846   host      host      local
3620d3b3be5b   none      null      local

2、网络原理

1》 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0)
2》 Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP, 同时Docker网桥是每个容器的默认网关
3》 因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信
4》 Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接Container-IP访问到容器
5》 如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过 [宿主机IP]:[容器向外暴露的端口] 访问容器

3、

四、Docker四类网络模式

在这里插入图片描述

docker 网络模式:
1》host模式 : 与Linux宿主主机共享网络
2》container模式 :与另一个容器共享网络
3》none模式 : 只为容器提供回环网络
4》bridge模式 : 网桥模式(多个容器间的网络互通,推荐使用网桥)

【host模式】

相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址, 容易造成端口冲突
但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的

在这里插入图片描述

#格式 :
 docker run --network host [镜像名称或ID]



#实列
[root@docker ~]# docker run -d --name hzl --network host nginx:latest
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
d121f8d1c412: Pull complete
ebd81fc8c071: Pull complete
655316c160af: Pull complete
d15953c0e0f8: Pull complete
2ee525c5c3cc: Pull complete
Digest: sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Status: Downloaded newer image for nginx:latest
06941559a3f7e0c53cf228302dedc2040c10f2eb0b6e3d0f962c065b0e0419ce
[root@docker ~]#  docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
06941559a3f7        nginx               "/docker-entrypoint.…"   6 minutes ago       Up 6 minutes                            my-web


[root@docker ~]#  curl 127.0.0.1:80    #链接本地回环
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }

【Container 模式】

这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享
新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等
同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信
在这里插入图片描述

#格式 :
 docker run --network "containe:[共享容器名称]" [镜像名称或ID]



#实列:
1#创建共享容器 "cont01"
[root@hzl ~]#docker run -dit --name cont01 busybox:latest sh


2#创建链接容器 "cont02", 并指定网络模式 "container"
[root@hzl ~]#docker run -dit --name cont02 --network "container:cont01" busybox:latest sh



3#查看两个容器的 "ip", 发现一样
[root@hzl ~]#docker exec cont01 ip a
[root@hzl ~]#docker exec cont02 ip a

【none模式】

该模式将容器放置在它自己的网络栈中,但是并不进行任何配置, 只提供回环
该模式关闭了容器的网络功能 , 一般是因为容器并不需要网络(例如只需要写磁盘卷的批处理任务)
在这里插入图片描述

#格式 : 
docker run --network none [镜像名称或ID]




#实列:
[root@hzl ~]# docker run -dit --network none --name none_test nginx:latest sh
e3c4f1c05099ee0e1997a1c8f0971c15ad9611a8739f282d3387112f3ceed1af



[root@docker ~]# docker run  -itd --name hzl  --network none busybox
b9dde79754bc110314be4aecde1251dcdd6ce28fdf43102ae184b79c6e7414bc
[root@docker ~]# docker exec -it hzl sh
/ # ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

【Bridge 网桥模式】

1》相当于Vmware中的Nat模式,容器使用独立network Namespace,并连接到docker0虚拟网卡(默认模式)
2》虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中
3》bridge模式是docker的默认网络模式,不写 –network 参数,就是bridge模式
4》使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能
在这里插入图片描述

#测试使用网桥

[root@docker ~]# docker run -itd --name test busybox
dd17d863b2957a29df44b2552365eb0cfc01552fd4ec6b8b63e28dfd0d61472e
[root@docker ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fa:16:3e:4a:9c:c7 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.4/20 brd 172.16.15.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe4a:9cc7/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ab:42:6a:8a brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
inet6 fe80::42:abff:fe42:6a8a/64 scope link
       valid_lft forever preferred_lft forever
5: veth870d996@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
    link/ether ae:36:24:dc:11:6d brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::ac36:24ff:fedc:116d/64 scope link
       valid_lft forever preferred_lft forever
7: veth6acb18a@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
    link/ether 4e:03:b1:5e:40:91 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::4c03:b1ff:fe5e:4091/64 scope link
       valid_lft forever preferred_lft forever



[root@docker ~]# docker exec -it test bash
/ # ping 172.16.0.4
PING 172.16.0.4 (172.16.0.4): 56 data bytes
64 bytes from 172.16.0.4: seq=0 ttl=64 time=0.113 ms
64 bytes from 172.16.0.4: seq=1 ttl=64 time=0.101 ms
^C
--- 172.16.0.4 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.101/0.107/0.113 ms 

【网桥模式的常用命令】

1> 创建网桥:docker network create [网桥名称]
2> 删除网桥:docker network rm [网桥名称]
3> 连接网桥:docker network connect  [网桥名称] [容器] 
4> 断开连接:docker network disconnect [网桥名称] [容器] 
5> 查看网桥列表:docker network ls
6> 清空网桥:docker network prune

五、使用网桥模式搭建 lnmp

1)#下载wordpress
 [root@docker ~]# wget https://cn.wordpress.org/latest-zh_CN.tar.gz       
--2021-07-28 04:23:50--  https://cn.wordpress.org/latest-zh_CN.tar.gz
正在解析主机 cn.wordpress.org (cn.wordpress.org)... 198.143.164.252
正在连接 cn.wordpress.org (cn.wordpress.org)|198.143.164.252|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:15783657 (15M) [application/octet-stream]
正在保存至: “latest-zh_CN.tar.gz”

100%[============================================================================================================================>] 15,783,657  1.10MB/s 用时 25s    

2021-07-28 04:24:16 (618 KB/s) - 已保存 “latest-zh_CN.tar.gz” [15783657/15783657])

[root@docker ~]# 



2#创建目录(挂在目录)
[root@docker ~]# mkdir /tmp/html/
[root@docker ~]# tar xf  latest-zh_CN.tar.gz -C /tmp/
[root@docker html]# cd /tmp/
[root@docker html]# mv /tmp/wordpress/* /tmp/html
[root@docker html]# ll
总用量 208
-rw-r--r--  1 1006 1006   405 26 2020 index.php
-rw-r--r--  1 1006 1006 19915 11 2021 license.txt
-rw-r--r--  1 1006 1006  7346 76 20:23 readme.html
drwxr-xr-x  2 1006 1006     6 728 04:56 wordpress
-rw-r--r--  1 1006 1006  7165 121 2021 wp-activate.php
drwxr-xr-x  9 1006 1006  4096 727 05:00 wp-admin
-rw-r--r--  1 1006 1006   351 26 2020 wp-blog-header.php
-rw-r--r--  1 1006 1006  2328 217 21:08 wp-comments-post.php
-rw-r--r--  1 1006 1006  3004 521 18:40 wp-config-sample.php
drwxr-xr-x  5 1006 1006    69 727 05:00 wp-content
-rw-r--r--  1 1006 1006  3939 731 2020 wp-cron.php
drwxr-xr-x 25 1006 1006  8192 727 05:00 wp-includes
-rw-r--r--  1 1006 1006  2496 26 2020 wp-links-opml.php
-rw-r--r--  1 1006 1006  3900 516 01:38 wp-load.php
-rw-r--r--  1 1006 1006 45463 47 02:39 wp-login.php
-rw-r--r--  1 1006 1006  8509 414 2020 wp-mail.php
-rw-r--r--  1 1006 1006 22297 62 07:09 wp-settings.php
-rw-r--r--  1 1006 1006 31693 58 04:16 wp-signup.php
-rw-r--r--  1 1006 1006  4747 109 2020 wp-trackback.php
-rw-r--r--  1 1006 1006  3236 69 2020 xmlrpc.php








3#创建hzl网桥
[root@docker ~]# docker network create hzl
a9bcbcc97636f7af947f5a70f292b14c864069d39d18f9716461874821d8ece6
[root@docker ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
b5e4fae2126d   bridge    bridge    local
c0e4bda04846   host      host      local
a9bcbcc97636   hzl       bridge    local        #新创建的网桥
3620d3b3be5b   none      null      local



4#运行容器并创建数据库(mysql5.7)
[root@docker ~]# docker run -d -e MYSQL_ROOT_PASSWORD=123 -e MYSQL_DATABASE=wordpress --network hzl --name mysql mysql:5.7 
3190f43b52f4f4e71317ac9e513e85102464748da656898aecaab225a25316c4
[root@docker ~]# docker ps |grep mysql
3190f43b52f4   mysql:5.7                  "docker-entrypoint.s…"   21 seconds ago   Up 20 seconds   3306/tcp, 33060/tcp                         mysql


5#容器创建数据库
[root@docker ~]# docker exec -it mysql bash
root@eaa09a4ecb7d:/# mysql -uroot -p123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)






6#运行容器(php)
[root@docker /]# docker run -d --network hzl -v /tmp/html:/usr/share/nginx/html --name php alvinos/php:v2-fpm-mysql 
0384243cbd340f8d13ee052356b09beda11050dce94aee2321fae7467d508002
[root@docker /]# docker ps |grep php
0384243cbd34   alvinos/php:v2-fpm-mysql   "php-fpm -F"             11 seconds ago      Up 10 seconds      9000/tcp                            php






7#运行容器(nginx)
[root@docker opt]# docker run -d  -p 80:80 -v /tmp/html/:/usr/share/nginx/html --name nginx --network hzl nginx:latest 
78947a955e12517e9c347529cdb96bdbfea679ecd4b20df6b2db3bce814136fb
[root@docker opt]# docker ps 
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                               NAMES
78947a955e12   nginx:latest               "/docker-entrypoint.…"   4 seconds ago    Up 3 seconds    0.0.0.0:80->80/tcp, :::80->80/tcp   nginx







8#创建nginx用户www
[root@docker tmp]# docker exec -it nginx bash
root@7e11f2dcc096:/# useradd www
root@7e11f2dcc096:/# id www
uid=1000(www) gid=1000(www) groups=1000(www)
root@7e11f2dcc096:/# 





9#修改配置文件一(nginx)
[root@docker opt]# docker cp nginx:/etc/nginx/conf.d/default.conf .
[root@docker opt]# vim default.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    root   /usr/share/nginx/html;
    location / {
        index index.php index.html index.htm;
    }

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

}

[root@docker opt]# docker cp default.conf nginx:/etc/nginx/conf.d/default.conf    #nginx配置文件更改




#修改配置文件二(nginx)
[root@docker opt]# docker cp nginx:/etc/nginx/nginx.conf .
[root@docker opt]# vim nginx.conf 
user  www;
........
...

[root@docker opt]# docker cp nginx.conf nginx:/etc/nginx/nginx.conf    # nginx配置文件更改







10#检查容器内配置文件状态
[root@docker opt]# docker exec -it nginx bash      #进入容器查看状态
root@7e11f2dcc096:/# cat /etc/nginx/conf.d/default.conf 
root@7e11f2dcc096:/# cat /etc/nginx/nginx.conf





11#容器重启nginx
[root@docker opt]# docker restart nginx 
nginx
[root@docker opt]# docker ps
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                               NAMES
78947a955e12   nginx:latest               "/docker-entrypoint.…"   2 minutes ago    Up 6 seconds    0.0.0.0:80->80/tcp, :::80->80/tcp   nginx
0384243cbd34   alvinos/php:v2-fpm-mysql   "php-fpm -F"             36 minutes ago   Up 36 minutes   9000/tcp                            php
eaa09a4ecb7d   mysql:5.7                  "docker-entrypoint.s…"   43 minutes ago   Up 43 minutes   3306/tcp, 33060/tcp                 mysql







12#使用浏览器访问http://192.168.15.80:80         
#如下图所示:








13#配置文件添加
[root@docker opt]# cd /tmp/html/         
[root@docker html]# vim wp-config.php 
<?php
/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the installation.
 * You don't have to use the web site, you can copy this file to "wp-config.php"
 * and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * MySQL settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * @link https://wordpress.org/support/article/editing-wp-config-php/
 *
 * @package WordPress
 */

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );

/** MySQL database username */
define( 'DB_USER', 'root' );

/** MySQL database password */
define( 'DB_PASSWORD', '123' );

/** MySQL hostname */
define( 'DB_HOST', 'mysql' );

/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

/**#@+
 * Authentication unique keys and salts.
 *
 * Change these to different unique phrases! You can generate these using
 * the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
 *
 * You can change these at any point in time to invalidate all existing cookies.
 * This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define( 'AUTH_KEY',         '!(U`)XKDao$-+^DMF)k5u+Mlr_4]89O)M+@egsAzE2^D*[5^r!)F4;^6+I|P%C_&' );
define( 'SECURE_AUTH_KEY',  '>]o&e5<R/W!)x?SzWcbR+3IrQ*~WxvgTsUu[h+YK> GM~ul#=r5l@ZCt3^dqgaXG' );
define( 'LOGGED_IN_KEY',    'GVhRCl&eUNKBe1{9<[ ^i4=#n6`oU(s))lM6ll@#v[OJmAv-q=?8P%@<.Vl^{@Z/' );
define( 'NONCE_KEY',        'CG~PMLQb]V4e4kTDw;ZIu]<_FcHq9!T*d4Qk67BI.zLRC *gaNVX!s}MzIM:G+iY' );
define( 'AUTH_SALT',        'b%tN)c17}2i[>fu`N$O{DpR H~^{y8EO3lm+MWKi!8#]3iz6T/Vb@CLBV+O^u%ct' );
define( 'SECURE_AUTH_SALT', '{yRYIoXuWHv]!TM_=B}qII]2j-J5^a2Vn]^~E$9r]IG.p[k)/{3kKpw$>t8?Lc(+' );
define( 'LOGGED_IN_SALT',   'Wwgi8a=>OnbS6^YK$ 6}IJZGIhO hS-,I7D d42n+;RJN==rCZ@ZpkVTnXt(P=T:' );
define( 'NONCE_SALT',       'o<P;(H[5gIKH:Lvkpor5I|unC%;k|<$: W9&f]g`b)KgkAukAu2H>FCNWB%=e{HX' );

/**#@-*/

/**
 * WordPress database table prefix.
 *
 * You can have multiple installations in one database if you give each
 * a unique prefix. Only numbers, letters, and underscores please!
 */
$table_prefix = 'wp_';

/**
 * For developers: WordPress debugging mode.
 *
 * Change this to true to enable the display of notices during development.
 * It is strongly recommended that plugin and theme developers use WP_DEBUG
 * in their development environments.
 *
 * For information on other constants that can be used for debugging,
 * visit the documentation.
 *
 * @link https://wordpress.org/support/article/debugging-in-wordpress/
 */
define( 'WP_DEBUG', false );

/* Add any custom values between this line and the "stop editing" line. */



/* That's all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
	define( 'ABSPATH', __DIR__ . '/' );
}

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';




1》访问页面状态
在这里插入图片描述
2》按要求输入指定的信息

在这里插入图片描述
3》设置配置文件(添加配置文件)
在这里插入图片描述
4》设定邮箱,创建用户
在这里插入图片描述
5》安装成功,进行登录
在这里插入图片描述
6》登录账户(wordpress)
在这里插入图片描述
7》登录后访问的界面
在这里插入图片描述
8》访问进入主界面
在这里插入图片描述
9》就这样🆗了

posted @ 2021-07-28 19:28  ଲ一笑奈&何  阅读(198)  评论(0编辑  收藏  举报