写在前面:该小册买过好久,笔记也早就整理好放在幕布上了。现整理在blog中,以便翻阅。
Docker实践指南-笔记:运行和管理容器
容器的创建和启动
- 创建容器:
- 选择好镜像以后,可以通过docker create来创建容器
- 执行后,Docker会根据我们所给出的镜像创建容器,控制台会打出分配的容器ID
- 后续操作可以通过这个容器ID或它的缩略形式来进行
- 容器ID比较烦——>长,所以一般使用容器名来操作
- 要想用容器名来操作容器,需要先命名:
- sudo docker create –name nginx nginx:1.12
- 此时容器状态为Created
- 启动容器:
- 创建后的容器,通过docker start启动
- sudo docker start nginx
- 当容器启动后,其中的应用就会运行起来,容器的几个生命周期也会绑定到了这个应用上
- 状态为Running
- 创建后的容器,通过docker start启动
- 创建+启动:
- docker run –name 可以实现创建加启动
- docker run 在启动容器时,会采用“前台”运行这种方式,这时候我们的控制台就会衔接到容器上,不能再进行其他操作了
- -d 或 –detach,这个选项告诉 Docker 在启动后将程序与控制台分离,使其进入“后台”运行
管理容器:
- 罗列容器:
- docker ps,可以罗列所有运行中的容器状态
- 结果字段:
- CONTAINER ID:容器ID
- IMAGE:容器基于的镜像
- CREATED:容器的创建时间
- NAMES:容器的名称
- COMMAND:容器中主程序的启动命令
主程序,也就是与容器生命周期所绑定进程所关联的程序 ;
启动命令是在镜像内定义的,容器的启动实质就是启动这条命令 - STATUS:容器所处状态
- 其值和我们之前所谈到的状态有所区别,主要是因为这里还记录了其他的一些信息:
- Created 此时容器已创建,但还没有被启动过。
- Up [ Time ] 这时候容器处于正在运行状态,而这里的 Time 表示容器从开始运行到查看时的时间。
- Exited ([ Code ]) [ Time ] 容器已经结束运行,这里的 Code 表示容器结束运行时,主程序返回的程序退出码,而 Time 则表示容器结束到查看时的时间。
- 其值和我们之前所谈到的状态有所区别,主要是因为这里还记录了其他的一些信息:
- 结果字段:
- docker ps -a 或 docker ps -all,可以列出所有 状态的容器
- docker ps,可以罗列所有运行中的容器状态
- 停止和删除容器:
- 停止:docker stop
- 容器停止后,其维持的文件系统沙盒环境还是存在的,内部被修改的内容也都会保留,我们可以通过 docker start 命令将这个容器再次启动
- 删除:docker rm
- 正在运行中的容器默认情况下是不能被删除的,我们可以通过增加 -f 或 –force 选项来让 docker rm 强制停止并删除容器,不过这种做法并不妥当
- 停止:docker stop
- 随手删除容器:
与其他虚拟机不同,Docker 的轻量级容器设计,讲究随用随开,随关随删。也就是说,当我们短时间内不需要使用容器时,最佳的做法是删除它而不是仅仅停止它- 疑惑:
- 容器一旦删除,其内部的文件系统变动也就消失了
- 解惑:
要解决这个疑惑,其根本是解决为什么我们会对容器中的文件系统做更改
- 对比传统虚拟机:
- 传统虚拟机或其他虚拟化搭建环境,习惯使用干净的镜像搭建运行环境
- 制作成镜像的成本较高,耗时也久,小改动倾向于保持 虚拟环境不被清除
- Docker 打包镜像成本非常低,速度也快
- Docker中如果要为程序准备一些环境或者配置,完全可以直接将它们打包至新的镜像中,下次直接使用新的镜像创建容器即可
- 容器中的应用程序产生的文件数据:
- 使用数据卷啊,其独立于容器存在
- 对比传统虚拟机:
- 疑惑:
进入容器:
- 使用 docker exec让容器来运行我们所给出的命令
- docker exec nginx more /etc/hostname
nginx 是容器名字!!
- docker exec nginx more /etc/hostname
- 在容器中执行控制台程序,进入容器:
docker 中使用bash、shell
- sudo docker exec -it nginx bash
- -i 和 -t 参数,合并为-it
- -i ( –interactive ) 表示保持我们的输入流,只有使用它才能保证控制台程序能够正确识别我们的命令
- -t ( –tty ) 表示启用一个伪终端,形成我们与 bash 的交互,如果没有它,我们无法看到 bash 内部的执行结果
- 衔接到容器:
- docker attach命令,用于将当前的输入输出流连接到指定的容器上
这个命令最直观的效果可以理解为我们将容器中的主程序转为了“前台”运行 ( 与 docker run 中的 -d 选项有相反的意思 ) - 示例:
- CTRL+C向程序发送停止信号 ,程序停止。同时容器也会随之停止
- 备注:
- 实际开发中,由于 docker attach 限制较多,功能也不够强大,所以并没有太多用武之地
- docker attach命令,用于将当前的输入输出流连接到指定的容器上
常用命令
镜像命令
命令 | 参数及说明 |
---|---|
docker pull | 从远端仓库拉取镜像 |
docker images | 列出本地当前已有镜像 |
docker images ls | 列出了本地 Docker 主机上存储的镜像。可以通过 –digests 参数来查看镜像的 SHA256 签名。 |
docker images inspect | 该命令完美展示了镜像的细节,包括镜像层数据和元数据。 |
docker rmi | 删除不再使用的镜像 |
docker image rm | 同上docker image rm alpine:latest命令的含义是删除 alpine:latest 镜像。当镜像存在关联的容器,并且容器处于运行(Up)或者停止(Exited)状态时,不允许删除该镜像。 |
容器命令
命令 | 参数及说明 |
---|---|
docker run | 从镜像启动容器,即运行容器化的应用 常用参数: -it:开启一个交互式操作的Shell -d:让容器在后台运行 –name:为容器起一个名字 –rm:不保存容器,运行完毕自动清除 |
docker ps | 列出正在运行的容器 常用参数: -a:列出所有的容器,包括已经停止的容器 |
docker exec | 在容器内执行另一个程序 |
docker stop | 强制停止容器 |
docker start | 再次启动已经停止的容器 |
docker rm | 彻底删除容器 |
- 本文作者: xiaoxiaozi
- 本文链接: http://www.xiaoxiaozi.com/2022/08/08/juejin_docker_4/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!