docker 容器使用
启动容器
docker run
使用 docker run (参数)images [COMMAND] 启动一个容器
eg:docker run -it ubuntu /bin/bash
root@chenjx12:~/dc# docker run -it ubuntu /bin/bash
root@e88f80e041c2:/#
发现了什么,root后面的东西变了对不对
这说明我们顺利的启动了容器,并且进入到了容器里面
现在就可以在容器里进行操作了
e88f80e041c2就是这个容器的ID,唯一的那种
如果我们选择后台运行 -d 参数,容器id会回显在终端
参数说明:
-i 使用交互式操作
-t 开启终端
-d/--detach 后台运行
--name <new_name> 容器命名
-rm 退出容器时自动删除
--restart=always 挂了就自动重启
-v/--volume 挂载卷
-e/--env 设置环境变量
# 容器连接相关(后面会讲)
-p 端口映射
-P 端口随机映射
/bin/bash 指明启动这个容器进入之后要执行什么命令
那docker run里的images是什么呢,它就是另一个重点,镜像
docker run -it ubuntu /bin/bash
docker会先在本地查找是否有ubuntu(:latest)的镜像
如果有,就基于它创建一个容器
如果没有,它就自动执行 docker pull ubuntu:latest 拉取一个镜像下来再创建容器
停止/运行的容器
首先需要查看容器的状态,使用命令如下
docker ps (参数)
=
无参数运行该命令会列出所有 “正在” 运行的容器,包括它们的容器 ID、镜像、命令、创建时间、状态、端口和名称
参数说明:
-a/--all 列出所有的容器(包括已经挂掉的)
-q/--quiet 只显示容器id
--format 自定义输出格式
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Image}}"
这将按照指定的格式列出容器的 ID、名称和使用的镜像
-l/--latest 列出最近创建的容器
-n numb 后接数字列出最后创建的 numb 个容器
-f/--filter 过滤输出
一般直接使用 docker ps -a
停止容器:docker stop <容器id>
启动/重新启动容器:docker start/restart <容器id>
进入容器
在使用 -d 参数时,容器启动后会进入后台
此时想要进入容器,有两个指令可以实现:
docker attach <容器id>
使用该命令进入容器,再退出容器后容器会被停止
docker exec -it <容器id> /bin/bash
使用该命令退出后不会停止,推荐使用
注意:
想要再次进入容器的前提是容器还在运行,可以使用docker ps的status查看容器是否还在运行
docker作为一种节约资源的进程,会在当前容器没有任务执行的时候把它挂掉
也就是说,如果你的容器挂掉了,它里面就没有任务了,也就进不去了
同样的,正在后台运行的容器被docker stop停止了,也进不去,只是它不会被挂掉
退出容器
直接在容器的终端输入 exit就可以退出容器回到宿主机
容器导出/导出
docker export/import
docker export 命令用于将容器的文件系统导出为一个 tarball 文件。这不会包括容器的元数据或历史记录
docker export -o mycontainer.tar mycontainer
如果你不指定
-o选项,则导出的 tarball 将会输出到标准输出(stdout)这时就可以直接重定向
docker export mycontainer > mycontainer.tar
docker import 命令用于从 tarball 文件中创建一个新的 Docker 镜像。这个 tarball 文件通常是由 docker export 命令创建的
cat mycontainer.tar | docker import - mynewimage
如果有一个tarball文件:
docker import mycontainer.tar mynewimage
这将创建一个新的镜像
mynewimage,其内容来自mycontainer.tar文件。docker import 还可以指定一个url或者某个目录进行导入,如:
docker import http://example.com/example_contain.tgz example/imagerepo
注意:
docker export导出的 tarball 不包含容器的元数据,例如标签、环境变量等。它只包含容器文件系统的内容。docker import创建的新镜像会丢失所有历史记录和层信息,只有一个单独的层。
删除容器
docker rm
# 删除一个停止的容器
docker rm <容器id/名称>
# 强行删除一个正在运行的容器
docker rm -f <容器id/名称>
# 删除所有停止的容器(结合shell)
docker rm $(docker ps -aq)
# 删除所有容器
docker rm -f $(docker ps -aq)