容器自動化(一):docker基礎(上)


一,Docker簡介,功能特性與應用場景

1.1 Docker簡介

  • Docker是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。
  • 一個完整的Docker有以下幾個部分組成:
    • Docker Client 客戶端
    • Docker Daemon 守護進程
    • Docker Image 鏡像
    • Docker Container 容器

1.2 Docker功能特性

  • 隔離環境(系統,網絡,文件系統)與應用
  • 解決依賴與版本問題
  • 易於分發,開箱即用
  • 節點與容器快速擴容
  • 鏡像制作簡單便捷,管理方便

(1)隔離

  • 通過cgroup(隔離和跟蹤資源的使用)& namespace(組與組之間隔離)來實現輕量級的進程隔離
  • 對於容器中運行的進程來說,自己獨占了一個系統
  • 容器間網絡,文件及其他資源都互相隔離

(2)版本與依賴

  • 傳統模式下,多個不同環境或版本的項目需要部署在不同機器上,部署與后期維護管理復雜繁瑣。
  • 使用Docker,通過多個不同版本或者環境的鏡像,可以同時運行在一台機器上互不干擾,部署與后期維護簡單方便。

(3)分發與使用

  • 鏡像可以通過導入,導出,上傳到鏡像倉庫等多種方式進行分發
  • 在啟動了Docker的系統上直接使用docker run即可啟動鏡像,無需特別配置。

(4)擴容

  • 容器擴容簡單方便
  • 擴容節點只需安裝並啟動Docker即可

(5)鏡像制作

  • 鏡像的靈魂Dockerfile
  • 使用Dockerfile進行指令控制
  • 基於Linux命令,易於理解,快速上手
  • 易於定制與修改

1.3 Docker應用場景

  • Docker通常應用於如下場景:
    • web應用的自動化打包和發布;
    • 自動化測試和持續集成,發布;
    • 應用服務,如MySQL,Redis等,通過Docker實現快速部署;
    • k8s私有雲

1.3.1 場景1:多版本多種類系統與軟件

QQ截圖20180702193450.png-206.3kB

1.3.2 場景2: 環境

QQ截圖20180702215043.png-296.7kB

1.3.3 場景3: 分發

QQ截圖20180702215306.png-235.2kB

二,Docker的安裝

2.1 安裝環境

最小化安裝Centos7.5,關閉防火牆和selinux

2.2 版本選擇

  • Docker
    • 17.03之后版本變為Docker CE
  • Docker CE
    • 社區版,Community Edition
  • Docker EE
    • 企業版,Enterprise Edition
    • 收費版本,強調安全性,提供一些高級特性及商業支持

2.3 Docker安裝:標准版本

[root@Docker ~]# yum -y install docker

2.4 Docker安裝:CE社區版

首先清理掉yum安裝的docker標准版
這里有兩種方式

 
        

第一種清理docker方法

[root@Docker ~]# yum -y remove docker

第一種清理docker方法

[root@Docker ~]# yum history list       #查看yum安裝的歷史列表

[root@Docker ~]# yum history info 16      #查看yum歷史安裝ID為6的安裝信息

[root@Docker ~]# yum -y history undo 16      #進行yum安裝操作回退

 安裝Docker的CE社區版

 安裝依賴包

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

添加docker的CE版本的yum源配置文件

[root@Docker ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

安裝CE版本的docker

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

啟動docker,添加開機啟動,查看docker版本

[root@Wangwenli ~]# systemctl start docker
[root@Wangwenli ~]# systemctl enable docker

[root@Wangwenli ~]# docker version

三,Docker的操作命令

3.0 添加docker國內鏡像源

在開始學習docker之前,我們首先要更改一下docker的默認源鏡像下載地址(默認是從國外下載,很慢),我們需要添加國內的源地址

 [root@Wangwenli ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors":[ "https://registry.docker-cn.com" ]
}

[root@Wangwenli ~]# systemctl daemon-reload
[root@Wangwenli ~]# systemctl restart docker

3.1 Docker命令:search(用於從docker的官方公有鏡像倉庫查找鏡像)

 [root@Wangwenli ~]# docker search centos

  • 特別說明:
  • Name:鏡像的名字
  • DESCRIPTION:描述
  • STARS:星級(越高越好)
  • OFFICIAL:是否是官方發布的
  • AUTOMATED:是否自動化的

(2)查找星級多於100的centos鏡像 

 [root@Wangwenli ~]# docker search centos -f stars=100

  • 特別提示:
  • /:符號用於分割作者名稱和鏡像名稱
  • ansible/centos7-ansibleansible是作者名稱,centos7-ansible是鏡像名稱

(3)多條件查找--filter

查找官方發布的,星級大於100的centos鏡像

 [root@Wangwenli ~]# docker search centos --filter is-official=true --filter stars=100

3.2 Docker命令:pull(用於從Docker Hub上下載公有鏡像)

查找符合條件的hello-world鏡像

[root@Wangwenli ~]# docker search hello-world --filter is-official=true --filter stars=100

下載目標hello-world鏡像

[root@Wangwenli ~]# docker pull hello-world

下載目標centos:7鏡像(網速不好的話,需要點時間耐心等待

[root@Wangwenli ~]# docker pull centos:7
 

3.3 Docker命令:images

用於本地鏡像的查看

 

  • 特別說明:
  • REPOSITORY:鏡像倉庫(下邊羅列的都是本地已有鏡像名稱)
  • TAG:鏡像的標記(為了區分同名鏡像)
  • IMAGES ID:鏡像的ID
  • CREATED:此鏡像的創建時間
  • SIZE:此鏡像的大小

 

3.4 Docker命令:build

用於本地自定義鏡像的構建,需要創建Dockerfile文件

 創建Dockerfile文件的存儲目錄

[root@Docker ~]# mkdir -p /root/dockerfile/lib/centos/7
[root@Docker ~]# cd /root/dockerfile/lib/centos/7

 創建docker.sh腳本

[root@Docker 7]# vim docker.sh
[root@Docker 7]# cat docker.sh
#!/bin/bash

while true
do
    echo "nihao"
    sleep 5
done

 創建Dockerfile配置文件,文件名稱必須為Dockerfile,第一個字母必須大寫

 [root@Docker 7]# vim Dockerfile
[root@Docker 7]# cat Dockerfile
FROM centos      #從centos源鏡像的基礎上進行構建
LABEL MAINTATNER="wwl"     #作者的名稱

RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime    #RUN:在鏡像構建過程中運行命令
ADD docker.sh /home/test/ #從本地系統中把docker.sh文件添加到構建中的鏡像的/home/test/目錄下
RUN chmod +x /home/test/docker.sh   #在鏡像構建過程中運行命令
CMD ["/home/test/docker.sh"]   #構建鏡像完成時,最后執行的命令

根據Dockfile配置文件構建一個自定義鏡像

 [root@Docker 7]# docker build -t wwl/centos7:1 .   #-t 指定鏡像名稱 :1 設定鏡像的tag標記

3.5 Docker命令:run

運行一個本地鏡像

 [root@Docker 7]# docker run -dit 930caa8ceeb6 /bin/bash
1af173b11dbb11131a823f9ef64979cf2db906bb2d442d00447cc8161971cc66

    • 特別提示:
    • docker run:運行一個指定的images id
    • -d:放在后台運行
    • -i:可以進行命令交互
    • -t:制作一個偽終端用於登陸
    • 930caa8ceeb6:鏡像的ID,可以簡寫成930

3.6 Docker命令:ps

查看已經運行的鏡像的進程

[root@Docker 7]# docker ps -a  #查看所有運行的鏡像進程(包含退出的exit)

  • 特別提示:
  • STATUS:進程的狀態,UP表示正在運行中,EXIT表示已經退出了。

3.7 Docker命令:attach

從本地系統中切入到某個STATUS狀態是UP的鏡像進程里

 [root@Docker 7]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               
NAMES1af173b11dbb        930caa8ceeb6        "/bin/bash"         4 minutes ago       Up 4 minutes                            
upbeat_napier[root@Docker 7]# docker attach 1af173b11dbb  #切入到容器號為1af173b11dbb的鏡像進程里
[root@1af173b11dbb /]# ls     #已經進入容器里了
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@1af173b11dbb /]# exit   #退出容器
exit
[root@Docker 7]# docker ps -a    #容器的進程的STATUS已經處於EXIT狀態(之前是后台運行的,切入進去后執行exit就等於手動退出了)

3.8 Docker命令:stop

用於停止一個正在運行着的容器進程

 
再次在后台啟動一個鏡像

 增加了一個容器進程

停止一個運行着的容器進程

3.9 Docker命令:start

用於啟動一個已經停止了的容器進程

3.10 Docker命令:rm

用於刪除一個已經停止了的容器進程

 

3.11 Docker命令:rmi

用於刪除一個未用作容器啟動的本地鏡像

[root@Docker 7]# docker rmi 930
Error response from daemon: conflict: unable to delete 930caa8ceeb6 (cannot be forced) - image is being used by running container 8576060bb73d     #但要注意,被用作容器啟動的鏡像是不能刪除的(需先rm刪除容器進程)

 [root@Docker 7]# docker rmi -f 930
Error response from daemon: conflict: unable to delete 930caa8ceeb6 (cannot be forced) - image is being used by running container 8576060bb73d   #強行刪除被容器進程占用的鏡像也是不行的

 查看容器進程,被占用中

3.12 Docker命令:commit

將一個更改過的容器進程的容器狀態保存為一個新的鏡像

 查看啟動的容器進程

切入容器進程,在容器進程里創建yunjisuan目錄,退出容器進程

將更改后的容器進程保存為一個新的鏡像

 [root@Docker 7]# docker commit 857 wwl/centos:2
sha256:e11d502b90bc022ae5d8ed6b068e25e45f50a89edf6d9dfaf6caa7ede44c4acb

啟動新保存的鏡像

[root@Docker 7]# docker run -dit e11 /bin/bash
0ffd2ef0e3bdaa36f02cc4f59ea0e19c2355878dbe820e9053e7d4a8aafda7bd

查看新鏡像的容器進程

切入新鏡像的容器進程,我們發現之前創建的目錄仍舊存在

3.13 Docker命令:exec

用於從本地操作系統上直接向容器進程發布執行命令並返回結果

 

[root@Docker ~]# docker exec 0ff ls /tmp  #查看容器進程里的/tmp目錄下所有內容
ks-script-h2MyUP
yum.log
[root@Docker ~]# docker exec 0ff ls -d yunjisuan   #查看容器進程里/yunjisuan目錄
yunjisuan

3.14 Docker命令:cp

用於在容器進程和本地系統之間復制文件

 

[root@Docker ~]# docker exec 0ff ls /tmp    #向容器進程發布命令
ks-script-h2MyUP
yum.log
[root@Docker ~]# docker cp 0ff:/tmp/yum.log .    #將指定容器進程的/tmp/yum.log復制到當前目錄下
[root@Docker ~]# ls
anaconda-ks.cfg  dockerfile  yum.log    #已經復制過來了
[root@Docker ~]# docker cp anaconda-ks.cfg 0ff:/tmp/   #將本地文件復制到容器進程里
[root@Docker ~]# docker exec 0ff ls /tmp
anaconda-ks.cfg  #復制成功
ks-script-h2MyUP
yum.log

3.15 Docker命令:create

用於創建一個容器進程,但是並不啟動它

 

3.16 Docker命令:diff

查看容器進程與源鏡像做對比,發生了改變的文件或文件夾

啟動一個鏡像的容器進程

 [root@Docker ~]# docker run -dit e11
d1e90a6a0013e735c4fca03f1325e9a966fd356bec8d33bc534c1c73e7d90b30

切入容器進程,在容器進程中創建文件,退出容器進程

查看容器進程的變化

 

3.17 Docker命令:events

時時監測容器的變化情況

 前台時時監控容器的變化若要檢測,需要另外再起一個窗口進行操作

3.18 Docker命令:export

將容器進程的文件系統導出到本地

將容器進程導出成一個tar包

 

3.19 Docker命令:import

用於將export導出的文件系統創建為一個鏡像

3.20 Docker命令:history

用於查看一個鏡像的歷史修改紀錄

 

3.21 Docker命令:info

用於查看當前操作系統的docker運行信息

 [root@Docker ~]# docker info
Containers: 1    #容器進程1個
 Running: 1       #正在運行狀態的容器1個
 Paused: 0
 Stopped: 0
Images: 8    #一共有8個鏡像
Server Version: 18.09.1
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9754871865f7fe2f4e74d43e2fc7ccd237edcbce
runc version: 96ec2177ae841256168fcf76954f7177af9446eb
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-862.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 974.6MiB
Name: Docker
ID: 5YNS:BXNE:O23E:DZWE:ST6K:OEXH:LBAB:DCAD:5W3D:RUJU:FQ64:3O5O
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Registry Mirrors:
 https://registry.docker-cn.com/
Live Restore Enabled: false
Product License: Community Engine

3.22 Docker命令:inspect

查看某個鏡像的詳細信息

[root@Docker ~]# docker inspect ea32ac5ede08
[
    {
        "Id": "sha256:ea32ac5ede089e65676f3e00b7580be456234206999e75c767debd0071c7d7a7",
        "RepoTags": [
            "wwl/centos:3"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "Imported from -",
        "Created": "2019-01-14T07:43:56.554044061Z",
        "Container": "",
        "ContainerConfig": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": null,
            "Cmd": null,
            "Image": "",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "DockerVersion": "18.09.1",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": null,
            "Cmd": null,
            "Image": "",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 201779577,
        "VirtualSize": 201779577,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/3da3b10942aa4ef821dbe590d8c1b968ca72c06430618ffd317f
a0920ca860bd/merged",                "UpperDir": "/var/lib/docker/overlay2/3da3b10942aa4ef821dbe590d8c1b968ca72c06430618ffd317fa
0920ca860bd/diff",                "WorkDir": "/var/lib/docker/overlay2/3da3b10942aa4ef821dbe590d8c1b968ca72c06430618ffd317fa0
920ca860bd/work"            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:f92b22b571a9faebf9f5e013f8f7d84c0181c0610fdb8b20fc2da22f43b0b56d"
            ]
        },
        "Metadata": {
            "LastTagTime": "2019-01-14T15:43:56.603952511+08:00"
        }
    }
]

3.23 Docker命令:kill

強行停止一個或多個正在運行狀態的容器進程

 

3.24 Docker命令:save

用於將一個鏡像的文件系統導出到本地(export導出的是容器)

 重新build一個鏡像

save導出test:1這個鏡像(也可以用id號)

 

3.25 Docker命令:load

用於將save導出到本地的tar包,重新加載為鏡像(和源鏡像的名字標識完全一樣)

 刪除別的鏡像,就保留兩個

 將之前test:1這個鏡像的save備份導入系統

3.26 Docker命令:logs

用於輸出一個容器進程內的操作日志

 

只顯示容器日志的后5行

 

3.27 Docker命令:pause && unpause

用於將一個或多個容器的進程暫停和恢復

3.28 Docker命令:port

用於列出一個容器的端口映射及協議

 [root@Docker 7]# docker run -dit -p 6666:22 test:1  #啟動一個鏡像的容器進程 -p 指定本地6666端口映射到容器的22端口
d7641bcd7949432b0eaa084bd7600cf2631add788ecb2ec6f124ffa2532a5bd0
[root@Docker 7]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PO
RTS                  NAMESd7641bcd7949        test:1              "/home/test/docker.sh"   5 seconds ago       Up 3 seconds        0.
0.0.0:6666->22/tcp   romantic_gates2d5d764e0e22        test:1              "/home/test/docker.sh"   4 minutes ago       Up 4 minutes          
                     silly_jackson

 查看容器進程的端口映射及協議

 [root@Docker 7]# docker port d7641bcd7949
22/tcp -> 0.0.0.0:6666

[root@Docker 7]# docker pull nginx

[root@Docker 7]# docker run -dit --name nginx_test -p 80:80 7042885a156a  啟動本地鏡像nginx,進程名叫nginx_test,將本地的80端口映射到容器的80端口

nginx關閉了守護模式,就相當於nginx在前台啟動了,平常啟動nginx是在后台啟動,但是放后台啟動容器啟動不了,所以在啟動時關閉了nginx的守護模式

本地沒有安裝nginx,看的就是容器里的nginx,就是訪問宿主機的80端口,映射到了容器里的80端口

3.29 Docker命令:rename

給容器進程重命名

 

3.30 Docker命令:restart

重啟一個容器進程

3.31 Docker命令:stats

用於時時輸出容器的資源使用情況

 

--no-tream只輸出一次

3.32 Docker命令:tag

用於從一個指定的鏡像創建另外一個鏡像

3.33 Docker命令:top

用於顯示指定容器的進程信息

3.34 Docker命令:update

用於調整一個或多個容器的啟動配置

3.35 Docker命令:version and wait

version用於顯示docker的版本信息
wait用於捕捉一個或多個容器的退出狀態,並返回退出狀態碼

 顯示docker版本信息

 

監聽容器的退出狀態並返回狀態碼

[root@Docker 7]# docker wait wwl

需要在開一個窗口stop這個容器進程再查看

3.36 Docker命令:login && logout && push

  • login用於登陸docker hub官方公有倉庫
  • logout用於登出docker hub官方公有倉庫
  • push用於將本地鏡像提交到docker hub

由於docker hub國內已經無法注冊,因此無法演示上述內容

DockerHub官方公有鏡像倉庫:https://hub.docker.com/

 

四,管理應用程序數據

4.1 Volume和Bind Mount

將Docker主機數據掛載到容器

  • Docker提供三種不同方式將數據從宿主機掛載到容器中:volumes,bind mounts和tmpfs。
    • volumes:Docker管理宿主機文件系統的一部分(/var/lib/docker/volumes)
    • bind mounts:可以存儲在宿主機系統的任意位置
    • tmpfs:掛載存儲在宿主機系統的內存中,而不會寫入宿主機的文件系統

QQ截圖20180706235210.png-47.3kB

 

4.1.1 Volume

創建一個卷

下載一個nginx官方鏡像(前面已經下載過)

[root@Docker 7]# docker run -dit --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/
html nginx

  • 特別說明:
  • --name:容器的名字
  • --mount:掛載
  • src:源卷的名字
  • dst:掛載到容器中的路徑
向容器中的掛載目錄創建文件,查看是否掛載成功

[root@Docker 7]# docker exec nginx-test touch /usr/share/nginx/html/test.txt
[root@Docker 7]# docker exec nginx-test ls /usr/share/nginx/html/
50x.html
index.html
test.txt   #有了
[root@Docker 7]# ls /var/lib/docker/volumes/nginx-vol/_data/
50x.html  index.html  test.txt  #成功

清理容器進程

清理容器后,掛載的卷的數據仍舊存在

重新啟動鏡像nginx的容器進程

  • 特別提示:
  • docker run的-p參數:指定端口的映射,8880的意思就是將宿主機88端口的訪問映射到容器進程的80端口
現在我們通過瀏覽器訪問宿主機的88端口,進而訪問容器進程的80端口

 

在數據卷nginx-vol里換一個網頁在訪問

 

現在我們再啟動一個鏡像nginx的進程,讓兩個nginx的容器進程公用一個數據卷nginx-vol
[root@Docker 7]# docker run -dit --name nginx-test2 -p 89:80 --mount src=nginx-vol,dst=/usr/sh
are/nginx/html nginx

我們用瀏覽器訪問docker宿主機的89端口

 

 

 4.1.2 Bind Mounts

[root@Docker 7]# docker run -dit --name nginx-test3 -p 90:80 --mount type=bind,src=/var/lib/do
cker/volumes/nginx-vol/_data,dst=/usr/share/nginx/html nginx

我們用瀏覽器訪問docker宿主機的90端口

 

 

 特別提示:
bind mounts可以掛載宿主機上的任意目錄,而volume先得創建后才能掛載

  用卷管理,卷創建好是空的,然后掛載到鏡像里,鏡像里的源目錄是有東西的,它會自動出現在卷里,但是bind mounts會把鏡像里的東西給頂了,以這種方式掛過去,默認是以自己目錄為主,如果用卷,是以對方目錄為主

 

4.2 實戰容器部署LNMP網站平台

首先我們下載一個wordpress博客

wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz

4.2.1 創建MySQL數據庫容器

下載MySQL5.6版本鏡像:[root@Docker ~]# docker pull mysql:5.6

[root@Docker ~]# docker network create lnmp  #創建一個自定義網絡

啟動MySQL數據庫容器
[root@Docker ~]# docker run -dit --name lnmp_mysql --network lnmp -p 3306:3306 --mount src=mys
ql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 mysql:5.6 --character-set-server=utf8

 索引的長度不能超過254=254x3字節(一個漢字三字節),索引太長容易影響sql的效率

特別提示:

  • 自定義網絡lnmp如果不提前創建的話,在啟動容器進程時會報錯
  • 如果沒有提前pull好mysql:5.6那么容器在啟動時會自動下載對應鏡像
  • 如果沒有提前docker volume create mysql-vol,那么容器啟動時會自動創建

 4.2.2 向容器里的Mysql創建一個庫

 [root@Docker ~]# docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"'

 4.2.3 查看添加的庫

4.2.4 創建nginx+PHP環境容器

nginx和PHP都需要訪問網頁目錄,並且nginx和php的網頁路徑必須一樣,nginx和tomcat配合就不是,tomcat自己可以獨立訪問動靜態,只是tomcat處理靜態很差,太慢,前面才加了nginx,然后nginx推給8080端口就到了tomcat

 創建一個網頁目錄

 

下載richarvey/nginx-php-fpm鏡像

 [root@Docker ~]# docker pull richarvey/nginx-php-fpm

啟動richarvey/nginx-php-fpm鏡像的容器

 [root@Docker ~]# docker run -dit --name lnmp_web --network lnmp -p 88:80 --mount type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm

4.2.5 解壓wordpress到網頁目錄/app/wwwroot下

建一個靜態首頁

4.2.6 博客wordpress訪問測試

如果還訪問不了,那么執行下面的,重啟docker

 

通過瀏覽器進行docker宿主機的88端口的訪問測試
http://IP:88/

訪問成功后再去訪問

http://IP:88/wordpress

 

 

特別提示:
如果多次連續訪問同一網頁,那么瀏覽器有可能默認去掉指定的端口
因此,若訪問不到,請查看是否指定了88端口

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM