【docker专栏4】使用docker安装nginx提供web服务

打印 上一主题 下一主题

主题 511|帖子 511|积分 1533

一般学习一项技术,会先用一个最简单的例子或最典型的例子来向大家讲解入门内容,所以此文为大家介绍使用docker安装nginx容器服务。从基础使用的角度来讲,此文几乎涵盖了docker最核心的内容:镜像拉取、容器运行、端口映射、文件映射,虽然基础但很重要,所以建议认真学习。
一、拉取镜像

docker pull命令用于拉取应用镜像,docker pull nginx命令用于拉取最新版本的nginx镜像。下文为拉取镜像过程的响应结果:
  1. # docker pull nginx
  2. Using default tag: latest
  3. latest: Pulling from library/nginx
  4. c229119241af: Pull complete
  5. 2215908dc0a2: Pull complete
  6. 08c3cb2073f1: Pull complete
  7. 18f38162c0ce: Pull complete
  8. 10e2168f148a: Pull complete
  9. c4ffe9532b5f: Pull complete
  10. Digest: sha256:2275af0f20d71b293916f1958f8497f987b8d8fd8113df54635f2a5915002bf1
  11. Status: Downloaded newer image for nginx:latest
  12. docker.io/library/nginx:latest
复制代码
从上文我们可以看出nginx镜像是从docker.io这个网址拉取下来的。
使用docker images命令可以查看当前操作系统中下载了哪些镜像文件。
  1. # docker images
  2. REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
  3. nginx         latest    12766a6745ee   33 hours ago   142MB
  4. hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB
复制代码

  • REPOSITORY镜像仓库及镜像名称,如果不显示镜像仓库,默认就是docker.io
  • TAG镜像的版本或者是里程碑标签,latest表示最新版本
  • IMAGE ID 镜像的唯一标识
  • CREATED 这个镜像被创建的时间
  • SIZE表示镜像文件的大小
二、运行镜像启动容器

通过docker run命令启动一个容器,容器名称为nginx-zimug。
  1. # docker run -d --name nginx-zimug -p  80:80  nginx
  2. 81bb1211144bc0991a789f860458548643c60b5459466c14d0604be9a4ccbfd7
复制代码

  • -d表示容器在后台运行
  • --name为容器起一个名字
  • -p端口映射,格式为宿主机端口:容器端口,上文中含义是将容器中的端口80映射到宿主机的端口80,对外提供访问服务。
  • 最后一个字段为镜像名称
浏览器HTTP协议访问宿主机的80端口,如果是80端口可以省略。得到的访问结果如下,说明我们的nginx服务已经启动成功了。

通过docker ps可以查看正在运行中的容器,如下所示:
  1. CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
  2. 81bb1211144b   nginx     "/docker-entrypoint.…"   11 minutes ago   Up 11 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx-zimug
复制代码
三、文件映射

首先明确的是容器中的文件内容是可以被修改的,但是一旦容器重启,所有写入到容器中的,针对数据文件、配置文件的修改都将丢失。所以为了保存容器的运行状态,执行结果,我们需要将容器内的一些重要的数据文件、日志文件、配置文件映射到宿主机上。
以nginx为例,nginx有三个重要的文件目录:
容器中路径宿主机中自定义映射路径存储网站网页的目录/usr/share/nginx/html/root/nginx/html日志目录/etc/nginx/nginx.conf/root/nginx/conf/nginx.confnginx配置文件目录/var/log/nginx/root/nginx/logs在宿主机中新建文件目录
  1. mkdir -p  /root/nginx/logs  /root/nginx/html  /root/nginx/conf;
复制代码
将容器中的文件copy到宿主机中
将nginx配置文件copy到宿主机中
  1. docker cp nginx-zimug:/etc/nginx/nginx.conf /root/nginx/conf;
复制代码
将一个模拟的html文件放入html目录
将下面的文件保存为index.html放入宿主机的/root/nginx/html目录,因为存在映射关系,实际上也是放入了容器的/usr/share/nginx/html目录。
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>使用docker搭建nginx web服务</title>
  6. </head>
  7. <body>
  8.     <h1>访问成功</h1>
  9.     <p>厉害了!</p>
  10. </body>
  11. </html>
复制代码
四、再次启动容器服务

-v参数表达了宿主机文件与容器中文件的映射关系,格式为-v 宿主机目录:容器文件系统目录。启动一个新的容器,容器的名字叫做nginx-prod
  1. docker run -d -p 80:80 \
  2. --name nginx-prod \
  3. -v /root/nginx/html:/usr/share/nginx/html \
  4. -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
  5. -v /root/nginx/logs:/var/log/nginx  nginx
复制代码
在启动新容器之前,将nginx-zimug旧的容器删掉。如果不删除旧的容器,新容器的端口与旧容器端口会发生冲突。使用如下命令删除容器:
  1. docker stop nginx-zimug;
  2. docker rm nginx-zimug;
复制代码
执行上面的docker run命令,启动新的容器。启动后通过浏览器访问宿主机80端口,响应结果如下证明nginx正常提供web服务了。

同时可以在宿主机上修改nginx配置,也可以查看运行时日志文件。修改结果会影响容器nginx服务的运行,因为宿主机的配置文件与容器内的配置文件存在映射关系。

欢迎关注我的公告号:字母哥杂谈(侧边栏扫码关注),回复003赠送本文所在专栏《docker修炼之道》的PDF版本,30余篇精品docker文章。字母哥博客:zimug.com

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表