个别学习一项技术,会先用一个最简略的例子或最典型的例子来向大家解说入门内容,所以此文为大家介绍应用 docker 装置 nginx 容器服务。从根底应用的角度来讲,此文简直涵盖了 docker 最外围的内容:镜像拉取、容器运行、端口映射、文件映射,尽管根底但很重要,所以倡议认真学习。
一、拉取镜像
docker pull 命令用于拉取利用镜像,docker pull nginx
命令用于拉取最新版本的 nginx 镜像。下文为拉取镜像过程的响应后果:
# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
c229119241af: Pull complete
2215908dc0a2: Pull complete
08c3cb2073f1: Pull complete
18f38162c0ce: Pull complete
10e2168f148a: Pull complete
c4ffe9532b5f: Pull complete
Digest: sha256:2275af0f20d71b293916f1958f8497f987b8d8fd8113df54635f2a5915002bf1
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
从上文咱们能够看出 nginx 镜像是从 docker.io
这个网址拉取下来的。
应用 docker images
命令能够查看以后操作系统中下载了哪些镜像文件。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 12766a6745ee 33 hours ago 142MB
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
- REPOSITORY 镜像仓库及镜像名称,如果不显示镜像仓库,默认就是
docker.io
- TAG 镜像的版本或者是里程碑标签,latest 示意最新版本
- IMAGE ID 镜像的惟一标识
- CREATED 这个镜像被创立的工夫
- SIZE 示意镜像文件的大小
二、运行镜像启动容器
通过 docker run
命令启动一个容器,容器名称为 nginx-zimug。
# docker run -d --name nginx-zimug -p 80:80 nginx
81bb1211144bc0991a789f860458548643c60b5459466c14d0604be9a4ccbfd7
-d
示意容器在后盾运行--name
为容器起一个名字-p
端口映射,格局为宿主机端口: 容器端口
,上文中含意是将容器中的端口 80 映射到宿主机的端口 80,对外提供拜访服务。- 最初一个字段为镜像名称
浏览器 HTTP 协定拜访宿主机的 80 端口,如果是 80 端口能够省略。失去的拜访后果如下, 阐明咱们的 nginx 服务曾经启动胜利了。
通过 docker ps
能够查看正在运行中的容器,如下所示:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
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.conf |
nginx 配置文件目录 | /var/log/nginx | /root/nginx/logs |
在宿主机中新建文件目录
mkdir -p /root/nginx/logs /root/nginx/html /root/nginx/conf;
将容器中的文件 copy 到宿主机中
将 nginx 配置文件 copy 到宿主机中
docker cp nginx-zimug:/etc/nginx/nginx.conf /root/nginx/conf;
将一个模仿的 html 文件放入 html 目录
将上面的文件保留为 index.html 放入宿主机的 /root/nginx/html
目录,因为存在映射关系,实际上也是放入了容器的 /usr/share/nginx/html
目录。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title> 应用 docker 搭建 nginx web 服务 </title>
</head>
<body>
<h1> 拜访胜利 </h1>
<p> 厉害了!</p>
</body>
</html>
四、再次启动容器服务
-v
参数表白了宿主机文件与容器中文件的映射关系,格局为-v 宿主机目录: 容器文件系统目录
。启动一个新的容器,容器的名字叫做 nginx-prod
docker run -d -p 80:80 \
--name nginx-prod \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/nginx/logs:/var/log/nginx nginx
在启动新容器之前,将 nginx-zimug 旧的容器删掉。如果不删除旧的容器,新容器的端口与旧容器端口会发生冲突。应用如下命令删除容器:
docker stop nginx-zimug;
docker rm nginx-zimug;
执行下面的 docker run
命令,启动新的容器。启动后通过浏览器拜访宿主机 80 端口,响应后果如下证实 nginx 失常提供 web 服务了。
同时能够在宿主机上批改 nginx 配置,也能够查看运行时日志文件。批改后果会影响容器 nginx 服务的运行,因为宿主机的配置文件与容器内的配置文件存在映射关系。
欢送关注我的布告号:字母哥杂谈,回复 003 赠送本文所在专栏《docker 修炼之道》的 PDF 版本,30 余篇精品 docker 文章。字母哥博客:zimug.com