4.4docker基礎詳細版--在容器中部署靜態網站

利用docker技術在容器中使用nginx部署一個靜態網站。


容器的端口映射


在使用run的時候指定-p或-P來進行端口映射:

-P:將爲容器暴露的所有端口進行映射
    eg:docker run -P -it centos /bin/bash

-p:指定映射哪些容器的端口
    eg:1、只指定容器端口(宿主機端口隨機映射)
        docker run -p 80 -it centos /bin/bash

        2、同時指定宿主機端口和容器端口
        docker run -p 8080:80 -it centos /bin/bash

        3、指定ip和容器的端口
        docker run -p 0.0.0.0:80 -it centos /bin/bash

        4、指定ip:宿主機端口:容器端口
        docker run -p 0.0.0.0:8080:80 -it centos /bin/bash

部署服務


步驟

  1. 創建映射80端口的交互式容器
  2. 安裝nginx
  3. 安裝vim
  4. 創建靜態頁面
  5. 修改配置文件
  6. 運行nginx
  7. 驗證訪問

搭建

創建一個映射80端口的交互式容器:

docker run -p 80 --name web -it centos /bin/bash

配置epel源:

[root@4168ac0dfa0f /]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -P /etc/yum.repos.d

[root@4168ac0dfa0f /]# rpm -ivh /etc/yum.repos.d/epel-release-latest-7.noarch.rpm

[root@4168ac0dfa0f /]# yum clean all

安裝nginx,vim

[root@4168ac0dfa0f /]# yum install -y nginx vim

建立存放頁面的目錄和頁面:

[root@4168ac0dfa0f /]# mkdir -p /var/www/html

[root@4168ac0dfa0f /]# cd /var/www/html/

[root@4168ac0dfa0f /]# vim index.html
    <html>
    <head>
        <title>Test docker-ng</title>
    </head>
    <body>
        <h1>IF you see this, you success run a nginx in docker!</h1>
    </body>
    </html>

編輯nginx配置文件:

[root@4168ac0dfa0f html]# vim /etc/nginx/nginx.conf
    修改root  /var/www/html;

運行nginx:

[root@4168ac0dfa0f html]# nginx

[root@4168ac0dfa0f html]# ps -ef | grep nginx

使用CTRL+P CTRL+Q讓容器運行在後臺

在物理機中查看容器:

[root@docker ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                   NAMES
4168ac0dfa0f        centos              "/bin/bash"         12 minutes ago      Up 12 minutes       0.0.0.0:32768->80/tcp   web

[root@docker ~]# docker port web
80/tcp -> 0.0.0.0:32768

可以看到,容器的80端口映射到主機的32768端口上

驗證網站是否可訪問:

命令行中訪問:
[root@docker ~]# curl 127.0.0.1:32768

這裏寫圖片描述

也可以在瀏覽器中訪問:
這裏寫圖片描述

使用容器的IP地址訪問

使用inspect參數查看docker容器的ip:

[root@docker ~]# docker inspect 4168ac0dfa0f

這裏寫圖片描述

用curl訪問:

[root@docker ~]# curl 172.17.0.2

這裏寫圖片描述

關閉、重啓服務

現在web容器一直後臺運行:

[root@docker ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                   NAMES
4168ac0dfa0f        centos              "/bin/bash"         35 minutes ago      Up 35 minutes       0.0.0.0:32768->80/tcp   web

然後關閉容器後重新運行容器:

[root@docker ~]# docker stop web
web

[root@docker ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

[root@docker ~]# docker start -i web

[root@4168ac0dfa0f /]# ps -ef 
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 12:29 ?        00:00:00 /bin/bash
root         15      1  0 12:29 ?        00:00:00 ps -ef

發現nginx並沒有在重啓容器後自動運行

用docker的exec參數在容器外啓動nginx:

[root@docker ~]# docker exec web nginx

[root@docker ~]# docker top web
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4986                4973                0                   20:29               pts/1               00:00:00            /bin/bash
root                5044                1                   0                   20:31               ?                   00:00:00            nginx: master process nginx
polkitd             5045                5044                0                   20:31               ?                   00:00:00            nginx: worker process

可以看到nginx已經啓動了

現在重新訪問,又正常了:

[root@docker ~]# curl 127.0.0.1:32769
<html>
<head>
    <title>Test docker-ng</title>
</head>
<body>
    <h1>IF you see this, you success run a nginx in docker!</h1>
</body>
</html>

注意,容器停止後重新運行,映射的端口和IP地址可能會發生變化!

 本文轉自這裏

發佈了13 篇原創文章 · 獲贊 25 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章