> 文档中心 > 【云原生】第三篇--使用容器运行Nginx应用及Docker命令

【云原生】第三篇--使用容器运行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命令访问