【云原生】第三篇--使用容器运行Nginx应用及Docker命令
容器化技术已经成为了现代软件部署的标配,而Docker无疑是容器化的先行者和领导者。今天咱们就来聊聊怎么用Docker运行一个Nginx服务,顺便熟悉一下Docker的基本操作。别看Nginx小小的,可它在服务器上能玩出不少花样呢!
咱们先从最简单的开始,docker run -d nginx:latest这条命令就能启动一个Nginx服务。别急着问我这是什么黑魔法,先看看到底发生了什么。Docker会自动去网上拉取Nginx的镜像,就像你网上购物一样,只不过这次下载的是一个完整的软件包。
运行完命令之后,你可能会疑惑:我的Nginx服务到底在不在运行呢?这时候就轮到docker ps出场了。它会列出所有正在运行的容器,就像你手机上的任务管理器一样。看到Up这个词了吗?说明你的Nginx服务已经起来了!
那问题来了,怎么访问这个Nginx服务呢?其实,这时候你根本不用关心容器的IP地址,因为Docker已经帮你配置好了!默认情况下,Nginx会监听80端口,直接在浏览器里输入http://localhost:80就能看到经典的Nginx欢迎页面了。
说到这儿,你可能会问:如果我想要让外网访问我的Nginx服务该怎么办?这就涉及到端口映射了!比如-p 80:80就能把容器的80端口映射到宿主机的80端口,这样全世界都能访问你的Nginx了。
最后,别忘了学习几个Docker的基本命令,比如docker stop停止容器,docker rm删除容器,还有docker exec进入容器内部。这些可都是容器运维的基本功呢!
好了,现在你已经掌握了运行一个Nginx容器的全流程,不妨动手试试看,说不定你发现Docker也没那么可怕嘛!
使用容器运行Nginx应用及Docker命令
- 一、使用容器运行Nginx应用
-
- 1.1 使用docker run命令运行Nginx应用
-
- 1.1.1 观察下载容器镜像过程
- 1.1.2 观察容器运行情况
- 1.2 访问容器中运行的Nginx服务
-
- 1.2.1 确认容器IP地址
- 1.2.2 容器网络说明
- 1.2.3 使用curl命令访问
- 二、Docker命令
-
- 2.1 Docker命令获取帮助方法
- 2.2 Docker官网提供的命令说明
- 2.3 docker命令应用
-
- 2.3.1 docker run
- 2.3.2 docker ps
- 2.3.3 docker inspect
- 2.3.4 docker exec
- 2.3.5 docker attach
- 2.3.6 docker stop
- 2.3.7 docker start
- 2.3.8 docker top
- 2.3.9 docker rm
-
- 2.3.9.1 指定删除容器
- 2.3.9.2 批量删除容器
一、使用容器运行Nginx应用
1.1 使用docker run命令运行Nginx应用
1.1.1 观察下载容器镜像过程
查找本地容器镜像文件
执行命令过程一:下载容器镜像# docker run -d nginx:latestUnable to find image 'nginx:latest' locallylatest: Pulling from library/nginxa2abf6c4d29d: Downloading 1.966MB/31.36MB 下载中a9edb18cadd1: Downloading 1.572MB/25.35MB589b7251471a: Download complete 下载完成186b1aaa4aa6: Download completeb4df32aa5a72: Waiting 等待下载a0bcbecc962e: Waiting
执行命令过程二:下载容器镜像[root@localhost ~]# docker run -d nginx:latestUnable to find image 'nginx:latest' locallylatest: Pulling from library/nginxa2abf6c4d29d: Downloading 22.87MB/31.36MBa9edb18cadd1: Downloading 22.78MB/25.35MB589b7251471a: Waiting186b1aaa4aa6: Waitingb4df32aa5a72: Waiting
执行命令过程三:下载容器镜像[root@localhost ~]# docker run -d nginx:latestUnable to find image 'nginx:latest' locallylatest: Pulling from library/nginxa2abf6c4d29d: Pull complete 下载完成a9edb18cadd1: Pull complete589b7251471a: Pull complete186b1aaa4aa6: Pull completeb4df32aa5a72: Waiting 等待下载
1.1.2 观察容器运行情况
# docker run -d nginx:latest9834c8c18a7c7c89ab0ea4119d11bafe9c18313c8006bc02ce57ff54d9a1cc0c
命令解释docker run 启动一个容器-d 把容器镜像中需要执行的命令以daemon(守护进程)的方式运行nginx 应用容器镜像的名称,通常表示该镜像为某一个软件latest 表示上述容器镜像的版本,表示最新版本,用户可自定义其标识,例如v1或v2等
# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9834c8c18a7c nginx:latest "/docker-entrypoint.…" 24 seconds ago Up 23 seconds 80/tcp condescending_pare
命令解释docker ps 类似于Linux系统的ps命令,查看正在运行的容器,如果想查看没有运行的容器,需要在此命令后使用--all
输出内容解释
CONTAINERID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
---|---|---|---|---|---|---|
9834c8c18a7c | nginx:latest | “/docker-entrypoint.…” | 24 seconds ago | Up 23 seconds | 80/tcp | condescending_pare |
1.2 访问容器中运行的Nginx服务
1.2.1 确认容器IP地址
实际工作中不需要此步操作。
# docker inspect 9834 "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", 容器IP地址 "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:02", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "d3de2fdbc30ee36a55c1431ef3ae4578392e552009f00b2019b4720735fe5a60", "EndpointID": "d91f47c9f756ff22dc599a207164f2e9366bd0c530882ce0f08ae2278fb3d50c", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", 容器IP地址 "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02", "DriverOpts": null } } } }]
命令解释docker inspect 为查看容器结构信息命令9834 为前面生成的容器ID号前4位,使用这个ID号时,由于其较长,使用时能最短识别即可。
1.2.2 容器网络说明
# ip a s......docker0网桥,用于为容器提供桥接,转发到主机之外的网络5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:d5:c3:d4:cc brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever inet6 fe80::42:d5ff:fec3:d4cc/64 scope linkvalid_lft forever preferred_lft forever与容器中的虚拟网络设备在同一个命名空间中,用于把容器中的网络连接到主机9: veth393dece@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 02:e3:11:58:54:0f brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::e3:11ff:fe58:540f/64 scope linkvalid_lft forever preferred_lft forever
1.2.3 使用curl命令访问