主要目的是熟悉 Docker 的命令,所以关于 Nginx 没有详细说明,静态网站也非常简单。
步骤
大致步骤如下
- 创建映射 80 端口的交互式容器
- 安装 Nginx
- 安装 Vim
- 创建静态页面与配置 Nginx
- 运行 Nginx
- 访问页面
创建映射 80 端口的交互式容器
$ docker run -p 80 --name web1 -i -t ubuntu /bin/bash
安装 Nginx
apt-get update
apt-get install -y nginx
安装 Vim
apt-get install -y vim
创建静态页面与配置 Nginx
创建静态页面
mkdir -p /var/www/html
cd /var/www/html/
新建文件 index.html
cat index.html
<html>
<head>
<title>Nginx to Docker</title>
</head>
<body>
<h1>Hello, I'm Website in Docker!<h1>
</body>
</html>
配置 Nginx
查看 nginx 安装目录信息
whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
ls /etc/nginx/
conf.d koi-utf modules-available proxy_params sites-enabled win-utf
fastcgi.conf koi-win modules-enabled scgi_params snippets
fastcgi_params mime.types nginx.conf sites-available uwsgi_params
更改 Ningx 默认配置文件,将 root
字段改成刚刚 index.html
所在的目录
vim /etc/nginx/sites-enabled/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
...
启动 Ngixn
root@6a6a2f7df11d:/var/www/html# cd /
root@6a6a2f7df11d:/# nginx
root@6a6a2f7df11d:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:59 pts/0 00:00:00 /bin/bash
root 1018 1 0 12:12 ? 00:00:00 nginx: master process nginx
www-data 1019 1018 0 12:12 ? 00:00:00 nginx: worker process
root 1020 1 0 12:12 pts/0 00:00:00 ps -ef
可以看到 nginx
已经成功启动,我们现在使用 CTRL + p
+ CTRL + q
退出,让容器在后台运行。
访问
在宿主机查看运行中的容器,可以看到容器是在后台运行到的,并没有退出;
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a6a2f7df11d ubuntu "/bin/bash" 24 minutes ago Up 24 minutes 0.0.0.0:32770->80/tcp web1
查看容器端口映射
docker port web1
80/tcp -> 0.0.0.0:32770
访问
$ curl 127.0.0.1:32770
<html>
<head>
<title>Nginx to Docker</title>
</head>
<body>
<h1>Hello, I'm Website in Docker!<h1>
</body>
</html>
还可以通过容器 IP 地址访问
使用 docker inspect web1 查看容器详细信息,找到 IPAddress
字段这就是容器的 IP
,可以看到 "IPAddress": "172.17.0.2"
。
curl 172.17.0.2
<html>
<head>
<title>Nginx to Docker</title>
</head>
<body>
<h1>Hello, I'm Website in Docker!<h1>
</body>
</html>
其他
停止容器
$ docker stop web1
重新启动容器
$ docker start -i web1
root@6a6a2f7df11d:/#
可以看到重启容器后,nginx 并没有运行
# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:40 pts/0 00:00:00 /bin/bash
root 10 1 0 12:41 pts/0 00:00:00 ps -ef
如果要重新运行 nignx 可以像刚刚那样,在容器里运行,也可以在宿主机是用 exec
命令运行 nignx,下面演示在使用 exec
命令。 先使用 CTRL + p
+ CTEL + q
退出容器,然后执行 exec
命令
docker exec web1 nginx
查看 web1 容器进程,可以看到 nginx 已经启动了
$ docker top web1
UID PID PPID C STIME TTY TIME CMD
root 14965 14943 0 20:40 pts/0 00:00:00 /bin/bash
root 15398 14965 0 20:44 ? 00:00:00 nginx: master process nginx
www-data 15399 15398 0 20:44 ? 00:00:00 nginx: worker process
现在我们再访问一下,发现访问不了了,为什么呢,因为每次重启容器,容器的 IP 跟 端口映射 都会发生改变
$ curl localhost:32770
curl: (7) Failed to connect to localhost port 32770: Connection refused
可以使用上面说的 docker port
命令跟 docker inspect
分别查看端口映射和容器 IP
$ docker port web1
80/tcp -> 0.0.0.0:32771
$ curl localhost:32771
<html>
<head>
<title>Nginx to Docker</title>
</head>
<body>
<h1>Hello, I'm Website in Docker!<h1>
</body>
</html>
使用新的端口访问成功
命令解释
docker run 镜像名
:运行容器,-p
指定容器端口,--nae
指定容器名字,-i -t
交互式运行
CTRL + p
+ CTRL + q
:退出容器,容器会继续再后台运行
exit
: 退出容器,容器也停止运行
docker ps
:查看正在运行的容器,-a
查看所有容器
docker port 容器名
:查看容器端口映射
docker inspect 容器名
:查看容器详细信息
docker stop 容器名
:停止容器
docker start -i 容器名
:交互式的重新启动一个已经停止的容器
docker exec 容器名 命令
: 让指定容器,执行指定命令
docker top 容器名
:查看容器中的进程信息
网友评论