设置容器的映射端口
-P 暴露所有端口进行映射
-p 暴露指定容器端口
run [-P] [-p]
四种方式
// containerPort
// 只指定容器端口,宿主机的端口是随机的
docker run -p 80 -i -t mydocker1 /bin/bash
// hostPort
// 同时指定了 宿主机端口 和 容器端口
docker run -p 8080:80 -i -t mydocker1 /bin/bash
// ip::containerPort
// 指定ip 和容器的端口
docker run -p 0.0.0.0:80 -i -t mydocker1 /bin/bash
// ip::hostPort
// ip,宿主机和容器端口同时指定
docker run -p 0.0.0.0:8080:80 -i -t mydocker1 /bin/bash
示例: Nginx部署
步骤:
- 创建映射80端口的交互式容器
- 安装 Nginx
- 安装vim 编辑器
- 创建静态页面
- 修改 Nginx配置文件
- 运行Nginx
- 验证网页访问
创建映射80端口的交互式容器
docker run -p 80 --name web -i -t ubuntu /bin/bash
安装 Nginx
建议换阿里云源
apt install -y nginx
安装vim 编辑器
apt install vim
创建静态页面
mkdir -p /var/www/html
cd /var/www/html
vim index.html
修改 Nginx配置文件
root@e6bb5696e362:/var/www/html# whereis nginx
nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx
root@e6bb5696e362:/var/www/html# ls /etc/nginx
conf.d koi-utf nginx.conf sites-available uwsgi_params
fastcgi.conf koi-win proxy_params sites-enabled win-utf
fastcgi_params mime.types scgi_params snippets
root@e6bb5696e362:/var/www/html# ls /etc/nginx/sites-enabled/
default
root@e6bb5696e362:/var/www/html# vim /etc/nginx/sites-enabled/default
nginx配置文件
root 指定路径已经是正确的就不用修改。
运行Nginx
root@e6bb5696e362:/var/www/html# nginx
root@e6bb5696e362:/var/www/html# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:16 ? 00:00:00 /bin/bash
root 1249 1 0 16:45 ? 00:00:00 nginx: master process nginx
www-data 1250 1249 0 16:45 ? 00:00:00 nginx: worker process
www-data 1251 1249 0 16:45 ? 00:00:00 nginx: worker process
root 1253 1 0 16:45 ? 00:00:00 ps -ef
让容器运在后台
CTRL + P
CTRL + Q
验证网页访问
hejing@learning:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e6bb5696e362 ubuntu "/bin/bash" 32 minutes ago Up 32 minutes 0.0.0.0:32768->80/tcp web
hejing@learning:~$ docker port web
80/tcp -> 0.0.0.0:32768
hejing@learning:~$ docker top web
UID PID PPID C STIME TTY TIME CMD
root 7398 7382 0 00:16 pts/19 00:00:00 /bin/bash
root 8907 7398 0 00:45 ? 00:00:00 nginx: master process nginx
www-data 8908 8907 0 00:45 ? 00:00:00 nginx: worker process
www-data 8909 8907 0 00:45 ? 00:00:00 nginx: worker process
hejing@learning:~$
hejing@learning:~$ curl http://127.0.0.1:32768
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js
"></script>
<style type="text/css">
.hello{
color:red;
}
</style>
</head>
<body>
<h3> welcome to <b class="hello">uic</b></h3>
<select name="a1" id="a1" >
<option value="a"> A</option>
<option value="b"> B</option>
<option value="c"> C</option>
</select>
//此处 省略了 其余 html 代码
浏览器打开查看
效果图
使用容器地址来查看
hejing@learning:~$ docker inspect web
image.png
hejing@learning:~$ curl http://172.17.0.2
image.png
浏览器再打开查看
image.png
停止容器 web 并重新启动容器 web, nginx并没有跟随启动
hejing@learning:~$ docker stop web
web
hejing@learning:~$ docker start -i web
root@e6bb5696e362:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 17:07 ? 00:00:00 /bin/bash
root 13 1 0 17:07 ? 00:00:00 ps -ef
root@e6bb5696e362:/#
// 可以使用 docker exec 命令
// 先进入守护容器
CTRL + P
CTRL + Q
hejing@learning:~$ docker exec web nginx
hejing@learning:~$ docker top web
UID PID PPID C STIME TTY TIME CMD
root 9595 9578 0 01:07 pts/19 00:00:00 /bin/bash
root 9736 1 0 01:11 ? 00:00:00 nginx: master process nginx
www-data 9737 9736 0 01:11 ? 00:00:00 nginx: worker process
www-data 9738 9736 0 01:11 ? 00:00:00 nginx: worker process
停止容器重新启动,分配地址和端口可能改变
docker inspect web
容器端口.png