外观
启动容器
基础命令
下载镜像之后,我们就可以使用镜像创建容器。
| 指令 | 代码 |
|---|---|
| 运行 | docker run |
| 查看 | docker ps |
| 停止 | docker stop |
| 启动 | docker start |
| 重启 | docker restart |
| 状态 | docker stats |
| 日志 | docker logs |
| 进入 | docker exec |
| 删除 | docker rm |
启动镜像:
docker images
# 显示所有镜像
docker run nginx
# 到这里控制台会阻塞到第二个命令后,控制台会阻塞,关闭此控制台会令容器停止,我们可以另开一个终端执行其他命令。
查看运行中的容器:
另开一个终端后,执行 docker ps。

将上一个终端中的阻塞停掉后,再使用 docker ps 就差看不到此容器了,此时可以使用 docker ps -a 查看所有容器,包含已停止的。
我在运行到这里时,关闭终端,容器仍然在运行,此时我们可以使用 docker stop 容器id 关闭此容器,也可以使用 docker start 容器id 再次启用此容器。

容器id 也可被替换为最后的 NAME,即容器名称,也可以使用 id 的前几个字符,即简写。
查看容器占用情况,使用 docker stats 容器id。

查看容器日志:docker stats 12 。
启动容器后,可以看到 nginx 容器占用 80 端口,但此时在浏览器中是访问不到的。
docker run 的详细用法
运行到这里时,我们每次都启用新的容器,以展示 docker run 不同语法的效果,记得删除它们。
-d 参数,让容器后台运行,不阻塞控制台。
--name 参数,指定容器的名字,替代默认名字。
docker run -d --name mynginx nginx

输出的内容为容器的完整id。
由于容器是运行在容器化技术的,每个容器以及容器与宿主机之间是互相隔离的,从主机不能访问到容器中的 nginx。
使用 docker exec,可以看到这个容器内也有属于它的文件系统。

它里面安装的 nginx 使用的是它的 80 端口,而不是主机的 80 端口。假如我们想实现访问主机的 88 端口,相当于访问容器的 80 端口,我们要加一个端口映射的操作,具体实现是加 -p 88:80 参数。
-p 外部端口:内部端口 用于指定端口映射。
docker run -d --name mynginx2 -p 88:80 nginx
此时执行 docker ps,可以看到端口之间的关系。最新创建的容器中,使用了端口映射,由主机的 88 端口映射到容器的 80 端口,而其他的容器则没有使用端口映射,外部不能访问。
docker exec 的详细用法
docker exec 用于进入容器内部,向在执行宿主机打开终端那样,打开容器内部的终端。
语法:docker exec [参数] 容器名 命令
-it 参数代表以交互模式进入容器终端,如果不加此参数,则只执行一次命令。我们一般加上这个参数。
docker exec -it mynginx bash-it 参数表示已交互模式进入,mynginx 为容器名,bash 代表进入终端(我们在宿主机进入终端就可以执行bash命令)。

在前面,我们说过要修改 nginx 的默认页面,它默认存放在此容器内部的 usr/share/nginx/html 中。阅读文档可以发现,它是可以通过 docker run 的参数指定的。
docker run --name my-custom-nginx-container -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
我们可以使用 vi 更新 nginx 的默认页面,但是为了保持容器的轻量级,容器是不包含这些默认软件的。我们可以使用下面的代码覆盖原有内容。
echo '<h1>Hello Docker!</h1>' > index.html
这样我们再访问浏览器时,就可以看到页面被成功更改了。