2.2.常见容器命令

镜像启动后就是容器。


创建和启动容器实例:

#启动容器(无镜像会先下载镜像)
docker run [可选参数] image 命令
#参数说明
 --name = "Name" 容器名字
 -c 后面跟待完成的命令
 -d 以后台方式运行并且返回ID,启动守护进程式容器
 -i 使用交互方式运行容器,通常与t同时使用
 -t 为容器重新分配一个伪输入终端。也即启动交互式容器
 # 映射端口
 -p 容器端口:物理机端口 (可以指定多组)
 -P 随机指定端口
 -v 给容器挂载存储卷

例子:

# 最简单的例子(基本不这样用)
docker run nginx
# 使用下载到本地的nginx镜像,创建并启动一个容器实例,
# 容器实例的名字是myNginx1,同时将容器的80端口映射到本机的80端口
docker run -d --name myNginx1 -p 80:80 nginx
# 创建容器实例,并执行 /bin/bash 命令
docker run -d --name myNginx1 -p 80:80 nginx /bin/bash
# 指定多组端口映射
docker run -d --name myNginx1 -p 80:80 -p 443:443 nginx /bin/bash

注意:涉及端口的地方,注意防火墙端口的开闭。


查看已经启用的容器:

# 列出所有容器(不加-a就是在运行的)
docker ps -a
docker container ls -a


容器实例的启动/停止/重启:

# 停止正在运行的容器实例 (优雅的退出)
docker stop 容器实例的ID
# 启动容器实例
docker start 容器实例的ID  
# 重启容器实例
docker restart 容器实例的ID  
# 杀掉容器实例(直接退出)
docker kill 容器实例的ID

docker stop,优雅退出。先发送SIGTERM信号,在一段时间之后(10s)再发送SIGKILL信号。Docker内部的应用程序可以接收SIGTERM信号,然后做一些“退出前工作”,比如保存状态、处理当前请求等。 docker kill,直接退出。发送SIGKILL信号,应用程序直接退出。


重命名容器实例:

# 给容器重新命名
docker rename 旧名字 新名字 


删除容器实例:

# 删除容器(正在运行容器不能删除,除非加-f选项)
docker rm 容器实例的ID  

例子:

docker rm 882403258cd8
# 强制删除容器
docker rm -f 882403258cd8


进入容器:

# 同为进入容器命令,不同的是attach连接终止会让容器退出后台运行,而exec不会。
# 并且,docker attach是进入正在执行的终端,不会其动新的进程,而docker exec则会开启一个新的终端,可以在里面操作。
docker attach 容器实例的名字或ID
# 比较常用
docker exec 容器实例的名字或ID 要执行的命令

例子:

docker attach 882403258cd8
# 进入容器882403258cd8,同时执行bash程序,打开一个伪命令行窗口
docker exec -it 882403258cd8 /bin/bash
# 进入容器882403258cd8,同时执行命令 ls -l
docker exec -it 882403258cd8 ls


查看容器详情:

# 前面查看镜像的时候也有个这样的命令
docker inspect 容器名或者ID


退出容器:

# 直接退出容器
exit
# 退出容器但是不终止运行
ctrl + p + q

如果使用 exec 进入的容器,两种操作容器都不停止。

如果使用 run 进入的容器,exit 退出, 容器停止。 ctrl+p+q 退出,容器不停止。


容器与主机之间进行文件拷贝

# 从容器内拷贝文件到主机(常用)或者从主机拷贝到容器(一般用挂载)
docker cp 文件路径  目标路径
# 比如:
docker cp 容器ID或者名字:容器内路径 目的主机路径
docker cp 主机路径 目标容器ID或者名字:容器内路径

例子:

# 将 myNginx1 容器中 /usr/share/nginx/html/index.html 文件,拷贝到主机的当前目录
docker cp myNginx1:/usr/share/nginx/html/index.html ./
# 将当前目录中的 index.html 拷贝到 myNginx1 容器中 /usr/share/nginx/html/ 目录中
docker cp ./index.html myNginx1:/usr/share/nginx/html/


容器的导入和导出

export 导出容器的内容流作为一个tar包文件。import 可以根据tar包中的内容,创建一个新的文件系统再导入为镜像。


# 导出
docker export 容器ID > 文件名.tar
# 导入
cat 文件名.tar | docker import - 镜像名:镜像版本号

注意:导出后再导入(export-import)的镜像会丢失所有的历史,而保存后再加载(save-load)的镜像没有丢失历史和层(layer)。这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回滚。



其它:

#查看容器日志 
docker logs 容器实例的ID

# 查看容器内进程(需要容器正在启动中)
docker top 容器实例的ID

# 提交容器副本,成为一个新的镜像
docker commit -a 'xxx' -c 'xxx' 镜像id 名字:版本
 -a:提交的镜像作者;
 -c:使用Dockerfile指令来创建镜像;
 -m:提交时的说明文字;


关键词: 命令 容器 docker
微信 遇到疑问可加微信进行反映