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)