利用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
部署服務
步驟
- 創建映射80端口的交互式容器
- 安裝nginx
- 安裝vim
- 創建靜態頁面
- 修改配置文件
- 運行nginx
- 驗證訪問
搭建
創建一個映射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地址可能會發生變化!
本文轉自這裏