【docker 总结】第三篇 - Container 容器
Container 容器
docker run 命令会从 image 文件,生成一个正在运行的容器实例。
docker container run 命令具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取
输出提示以后,hello world 就会停止运行,容器自动终止。
有些容器不会自动终止
image 文件生成的容器实例,本身也是一个文件,称为容器文件
容器生成,就会同时存在两个文件: image 文件和容器文件
关闭容器并不会删除容器文件,只是容器停止运行
启动容器
根据镜像,创建并启动容器(若本地镜像不存在,会到去远程仓库拉取)
启动容器后,执行了 /hello 命令并输出对应信息;
容器执行完成会自动终止
容器,主要用来执行企业服务或进行计算操作;
所以,容器启动,命令执行完成后,容器会自动停掉;
可以通过 docker container ps
查看当前正在运行的容器;
如何区分:本来就是空的,还是已经停掉了?
可以使用 docker container ps -a
查看全部容器:
可以得到一下信息:
容器 ID:4026a54a5208;
镜像:使用镜像 hello-world 生成;
创建:4 分钟前创建;
状态:4 分钟前被停止;
不会自动终止的容器
启动后台服务的容器,我们希望在后台一直运行,不能自动终止;
容器信息中的 cmd:
cmd 可执行命令(command-line),是当容器启动完成后,需要被执行的命令;
/hello:在容器内部的根目录下,存在 hello 脚本文件,执行将打印输出“hello docker”;
进入容器
如何进去看 hello 命令:
-it 是什么意思?
// todo
进入容器:
hello-world 进不去,换 centos:
备注:此时在 root@41e18c84dcb7,而非 root@localhost,说明已经进入到容器内部了;
输入 hello,控制台返回 hello;
虽然无法进入 hello-world 容器,但如果输入 /hello,还是可以打印出来的:
查看容器
-a 显示所有的容器,包括已停止的
-l 显示最新的那个容器
端口映射
// todo
由于容器内部的网络、服务、资源都是隔离的;
所以,外部宿主机是不能直接访问到容器内部的 80 端口的;
如何访问容器内的 nginx 服务?
将容器内部的 80 端口,映射到宿主机的端口,如:8080
所以,当访问 http://localhost:8080 时,就会去访问容器中 nginx 的 80 端口;
这就是端口映射;
启动容器(指定端口)
PORTS 没有,因为内部并没有暴露 80 端口
发布端口:
nginx 容器,会启动 nginx 服务监听 80 端口,所以会向外暴露 80 端口,就可以做映射
新开窗口,查看最新容器
0.0.0.0:8080->80/tcp 宿主机的 8080 端口,被映射给了 nginx 容器的 80 端口;
访问 nginx 容器:
查看容器日志:
后台运行容器
目前 nginx 容器是在前台运行的,只能这样挂着,
如何运行在后台?
查看容器的资源使用情况
查看容器的端口暴露情况(查看端口映射)
停止容器服务
重启容器服务
删除容器
命令
// todo
docker 容器的主线程(dockfile 中 CMD 执行的命令)结束,容器会退出
以使用交互式启动 docker run -i [CONTAINER_NAME or CONTAINER_ID]
tty 选项 docker run -dit [CONTAINER_NAME or CONTAINER_ID]
守护态(Daemonized)形式运行 docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
13.2 启动容器
docker run ubuntu /bin/echo "Hello world"
docker: Docker 的二进制执行文件。
run:与前面的 docker 组合来运行一个容器。
ubuntu 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
/bin/echo "Hello world": 在启动的容器里执行的命令
Docker 以 ubuntu 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果
Docker attach 必须是登陆到一个已经运行的容器里。需要注意的是如果从这个容器中 exit 退出的话,就会导致容器停止
13.3 查看容器
-a 显示所有的容器,包括已停止的
-l 显示最新的那个容器
13.4 运行交互式的容器
-t=--interactive 在新容器内指定一个伪终端或终端。
-i=--tty 允许你对容器内的标准输入 (STDIN) 进行交互。
我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。
13.5 后台运行容器
13.6 kill
kill 是不管容器同不同意,直接执行 kill -9,强行终止;
stop 的话,首先给容器发送一个 TERM 信号,让容器做一些退出前必须的保护性、安全性操作,然后让容器自动停止运行,如果在一段时间内,容器还是没有停止,再进行 kill -9,强行终止
13.7 删除容器
docker rm 删除容器
docker rmi 删除镜像
docker rm $(docker ps -a -q)
13.8 启动容器
13.9 停止容器
13.10 进入一个容器
13.11 进入一个正在运行中的容器
13.12 拷贝文件
13.13 自动删除
基于新镜像,创建容器
基于容器进行修改,得到一个新的容器,并产生一个新的镜像,多一个层
1,删除所有的容器
2,根据镜像启动一个容器(即原始容器)
3,修改容器,得到新容器
4,查看老的 ubuntu 镜像(Layers 共 1 层):
5,根据新的容器创建镜像
查看全部镜像,获得镜像 id
将容器提交为一个新的镜像
docker commit -a"" -m"" + 容器 id + 镜像命名
6,查看新的镜像详情(此时,Layers 共 2 层)
评论