网络服务器配置与管理教辅书 Help

9-5 Docker 运行容器 磁盘端口映射

准备nginx镜像

  1. 安装docker和启动服务参考上一节。
    准备安装包,然后

    tar -zxvf docker-installer.tar.gz rpm -iv --nodeps --force ./docker-installer/*.rpm systemctl start docker
  2. (跳过)在线拉取nginx镜像 docker pull nginx

  3. 从离线包加载镜像。
    老师分发离线镜像文件nginx.tar,粘贴至虚拟机。然后

    docker load -i ~/nginx.tar
  4. 确认镜像已导入。返回镜像信息。

    docker image ls

运行容器-最基本结构

  1. 运行默认的不加参数的nginx容器

    docker run nginx
  2. 浏览器测试。虚拟机内火狐浏览器访问http://127.0.0.1:80发现不能访问。
    因为浏览器访问的是CentOS虚拟机网卡,docker里面有个nginx容器、nginx监听的是容器内操作系统的网卡即docker虚拟网卡(类似CentOS的网卡是VMware在Windows物理机上的虚拟网卡), 宿主机与容器不互通 。Docker的哲学是高度封装,镜像不想让用户修改,各种功能的实现需要通过绑定来沟通宿主机和容器间的信息。

运行容器-端口映射参数

建立映射宿主机8080端口➡️容器80端口,这样在宿主机浏览器访问127.0.0.1:80时,会访问到容器中的80端口,从而访问到网页。
语法为docker run -p <宿主机端口>:<容器端口> <镜像名>

  1. 停止刚才运行的容器。 nginx容器会持续监听,因此容器运行后一直存在,为了避免端口冲突和容器名冲突,需要手动停止。
    查看docker容器进程ps(process)

    docker ps

    返回信息包含容器ID container-id

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3095d4dc6f7a nginx "/docker-entrypoint.…" 10 minutes ago Up 10 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp reverent_chaplygin

    然后根据CONTAINER ID终止容器,id很长只写前几位就行,-f参数表示不需要先停止容器而可以直接删除。
    ⚠️替换为你自己的容器ID⚠️

    docker rm -f 3095

    (可选)如果你不确定上面两行命令是否成功,执行下面命令关闭所有容器。

    docker stop $(docker ps -q)
  2. 运行容器,新增几个新参数。

    • -p: port端口映射,宿主机8080➡️虚拟机80。当然也可以80:80这里为了区分起成不一样的。

    • --name: (可选)注意两个-,容器名称默认会取随机英文单词,取一个更有意义的名字,后面一些命令就不用根据容器ID操作了。

    • -d: (可选)后台运行,不然这个监听程序会直接启动到当前终端影响输入其它命令。在开发调试参数阶段,不加-d更方便。

    docker run --name mynginx -p 8080:80 -d nginx
  3. 查看运行中的容器。

    docker ps # 观察到端口映射信息 0.0.0.0:8080->80/tcp。
  4. 火狐浏览器测试访问

    9 3

  5. 删除容器
    先停止再删除

    docker stop mynginx docker rm mynginx # 或上面两个命令二合一,加上-f参数表示如果没停止容器先停止 docker rm -f mynginx # 或老办法最通用的办法,先查容器id再根据容器id删除 docker ps docker rm -f 容器id

运行容器-磁盘映射参数

想用Nginx反向代理自己开发的网站,但是镜像已经封装好,进入镜像修改是件麻烦的事,与虚拟机不同,Docker采用另一种思路来解决。
Nginx镜像已经封装好保持独立,开发好的网站在宿主机开发机上,那么只要建立目录映射开发机本地/root/myHtmlSite ➡️容器/usr/share/nginx/html/myHtmlSite ,主要场景为映射开发机代码到容器和映射容器日志到开发机器。

  1. 开发机上准备简易网页

    echo "<html>my site</html>" | tee index.html
  2. 运行容器
    写法一:单行命令

    docker run --rm --name=nginx -p 8080:80 -v /root/index.html:/usr/share/nginx/html/index.html -d nginx

    写法二:分割成多行的写法,'\'表示一行命令未结束,当命令特别长时这样写会更清晰。

    docker run \ --rm \ --name=nginx \ -p 8080:80 \ -v /root/index.html:/usr/share/nginx/html/index.html \ -d \ nginx

    新增参数解释:

    • -v volume磁盘卷映射,开发机目录:容器目录。

    • --name,为容器起一个名字。这样子后面重启、删除容器时不需要先ps命令查看又长又难记的id。

    • -d,后台运行。因为nginx是一个监听程序,将会占据终端前台导致无法继续其它命令操作只能新打开终端窗口,在调试阶段可以不加此参数。

    • --rm remove,如果同名容器已存在,先删除掉之前的。

    成功后返回
    容器id形如0301bd41955310922880d160c62bfe5688f9dc00fe8813652427c7074759c4fc

    9 3

(跳过)其它常用管理命令

  1. 进入容器
    exec命令表示执行容器内命令,bash开启容器内的终端,-it把容器内的终端暴露给开发机。容器内exit推出。

    docker exec -it container-id bash

    docker attach container-id
  2. 查看容器控制台日志 docker logs -f

  3. 检查容器详细信息 inspect

  4. 查看正在运行的容器
    ps(process进程) -a(all) 查看正在运行的监听程序进程和已结束运行的所有容器。

docker ps -a

返回信息

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8715a5bebfb4 hello-world "/hello" 2 minutes ago Exited (0) 2 minutes ago blissful_ardinghelli
  1. 其它命令
    初学时暂时记不住那么多命令,这些命令有一定规律,格式基本为docker 主功能 次级功能 参数 容器id ,在Windows开发机器上的Docker Desktop图形应用能让我们几乎不输入命令。

  • 进入容器docker attach <container-id>

  • 日志docker logs -f <container-id>

  • 删除容器docker rm <container-id>

  • 删除镜像docker image rm <image_name:tag>

15 二月 2026