9-5 Docker 运行容器 磁盘端口映射
准备nginx镜像
安装docker和启动服务参考上一节。
准备安装包,然后tar -zxvf docker-installer.tar.gz rpm -iv --nodeps --force ./docker-installer/*.rpm systemctl start docker(跳过)在线拉取nginx镜像
docker pull nginx从离线包加载镜像。
老师分发离线镜像文件nginx.tar,粘贴至虚拟机。然后docker load -i ~/nginx.tar确认镜像已导入。返回镜像信息。
docker image ls
运行容器-最基本结构
运行默认的不加参数的nginx容器
docker run nginx浏览器测试。虚拟机内火狐浏览器访问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 <宿主机端口>:<容器端口> <镜像名>。
停止刚才运行的容器。 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)运行容器,新增几个新参数。
-p: port端口映射,宿主机8080➡️虚拟机80。当然也可以80:80这里为了区分起成不一样的。
--name: (可选)注意两个-,容器名称默认会取随机英文单词,取一个更有意义的名字,后面一些命令就不用根据容器ID操作了。
-d: (可选)后台运行,不然这个监听程序会直接启动到当前终端影响输入其它命令。在开发调试参数阶段,不加-d更方便。
docker run --name mynginx -p 8080:80 -d nginx查看运行中的容器。
docker ps # 观察到端口映射信息 0.0.0.0:8080->80/tcp。火狐浏览器测试访问

删除容器
先停止再删除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 ,主要场景为映射开发机代码到容器和映射容器日志到开发机器。
开发机上准备简易网页
echo "<html>my site</html>" | tee index.html运行容器
写法一:单行命令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
(跳过)其它常用管理命令
进入容器
exec命令表示执行容器内命令,bash开启容器内的终端,-it把容器内的终端暴露给开发机。容器内exit推出。docker exec -it container-id bash或
docker attach container-id查看容器控制台日志 docker logs -f
检查容器详细信息 inspect
查看正在运行的容器
ps(process进程) -a(all) 查看正在运行的监听程序进程和已结束运行的所有容器。
返回信息
其它命令
初学时暂时记不住那么多命令,这些命令有一定规律,格式基本为docker 主功能 次级功能 参数 容器id ,在Windows开发机器上的Docker Desktop图形应用能让我们几乎不输入命令。
进入容器
docker attach <container-id>日志
docker logs -f <container-id>删除容器
docker rm <container-id>删除镜像
docker image rm <image_name:tag>