目录
- 1.什么是容器?
- 2.容器命令
- 1.docker creatre
- 2.docker run
- 3.docker ps
- 4.docker logs
- 5.docker attach
- 6.docker exec
- 7.docker start
- 8.docker stop
- 9.docker restart
- 10.docker kill
- 11.docker top
- 12.docker stats
- 13.docker container inspect
- 14.docker port
- 15.docker cp
- 16.docker diff
- 17.docker commit
- 18.docker pause
- 19.docker unpause
- 20.docker rm
- 21.docker export
- 22.dockers wait
- 23.docker rename
- 24.docker container prune
- 25.docker update
- 3.容器交互模式
- 4.常见问题
1.什么是容器?
- 通俗地讲:容器是镜像的运行实体
- 镜像是静态的只读文件,而容器带有运行时需要的可写文件层
- 并且容器中的进程属于运行状态
- 即:容器运行着真正的应用进程
- 容器有初建、运行、停止、暂停和删除五种状态
- 容器的本质是主机上运行的一个进程,但是容器有自己独立的命名空间隔离和资源限制
- 也就是说,在容器内部,无法看到主机上的进程、环境变量、网络等信息
- 这是容器与直接运行在主机上进程的本质区别
- 容器是基于镜像创建的可运行实例,并且单独存在,一个镜像可以创建出多个容器
- 运行容器化环境时,实际上是在容器内部创建该文件系统的读写副本
- 这将添加一个容器层,该层允许修改镜像的整个副本
- 这将添加一个容器层,该层允许修改镜像的整个副本
2.容器命令
1.docker creatre
- 功能:创建一个新的容器但不启动它
- 语法:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
- 关键参数:
-i
:以交互模式运行容器,通常与-t
同时使用-P
:随机端口映射,容器内部端口随机映射到主机的端口-p
:指定端口映射,格式为:主机(宿主)端口:容器端口-t
:为容器重新分配一个伪输入终端,通常与-i
同时使用--name="nginx-lb"
:为容器指定一个名称- -
h "mars"
:指定容器的hostname -e username="ritchie"
:设置环境变量--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2"
: 绑定容器到指定CPU运行-m
:设置容器使用内存最大值-network="bridge"
:指定容器的网络连接类型--link=[]
:添加链接到另一个容器--volume , -v
:绑定一个卷--rm
:shell退出的时候自动删除容器--restart
:自动重启
- 示例:
docker create --name mynginx nginx:latest
2.docker run
- 功能:创建一个新的容器并运行一个命令
- 语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 关键参数:
- -
d
:后台运行容器,并返回容器 ID,比creatre
多了这个参数 -i
:以交互模式运行容器,通常与-t
同时使用-P
:随机端口映射,容器内部端口随机映射到主机的端口-p
:指定端口映射,格式为:主机(宿主)端口:容器端口-t
:为容器重新分配一个伪输入终端,通常与-i
同时使用--name="nginx-lb"
:为容器指定一个名称- -
h "mars"
:指定容器的hostname -e username="ritchie"
:设置环境变量--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2"
: 绑定容器到指定CPU运行-m
:设置容器使用内存最大值-network="bridge"
:指定容器的网络连接类型--link=[]
:添加链接到另一个容器--volume , -v
:绑定一个卷--rm
:shell退出的时候自动删除容器--restart
:自动重启
- -
- 示例
#使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx docker run --name mynginx -d nginx:latest #使用镜像nginx:latest,以后台模式启动一个容器,将容器的80端口映射到主机的 80端口,主机的目录/data映射到容器的/data docker run -p 80:80 -v /data:/data -d nginx:latest
3.docker ps
-
功能:查看容器,列出所有的正在运行的容器
-
语法:
docker ps [OPTIONS]
-
关键参数
-a
:显示所有的容器,包括未运行的-f
:根据条件过滤显示的内容--format
:指定返回值的模板文件。如 json 或者 table-l
:显示 latest 的容器-n
:列出最近创建的 n 个容器--no-trunc
:不截断输出-q
:静默模式,只显示容器编号-s
:显示总的文件大小
-
容器批量处理技巧
命令 解释 docker ps -qf name=xxx
根据名称过滤得到容器编号 docker ps -f status=running
根据状态过滤容器信息 docker ps -aq
静默获取全部容器ID docker ps -f ancestor=xxx
过滤镜像名/ID为xxx的容器信息
4.docker logs
- 功能:查看容器日志
- 语法:
docker logs [OPTIONS] CONTAINER
- 关键参数:
-f, --follow
:跟踪日志输出--since
:显示某个开始时间的所有日志-t, --timestamps
:显示时间戳-n, --tail
:仅列出最近N条容器日志
5.docker attach
- 功能:连接到正在运行中的容器
- 语法:
docker attach [OPTIONS] CONTAINER
- 关键参数:
--sig-proxy
:是否将所有信号代理,默认是true,如果设置为false,退出的话不会影响容器,否则退出会导致容器退出
6.docker exec
- 功能:在容器中执行命令
- 语法:`docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
- 关键参数:
-d
:分离模式,在后台运行-i
:即使没有附加也保持STDIN打开-t
:分配一个伪终端-e
:设置环境变量-u, --user
:指定用户-w, --workdir
:指定工作目录
- 示例
# 在容器SnowK中以交互模式执行echo docker exec -it SnowK echo "Hello SnowK" # 在容器SnowK中以交互模式打开shell docker exec -it SnowK bash
7.docker start
- 功能:启动停止的容器
- 语法:
docker start [OPTIONS] CONTAINER [CONTAINER...]
8.docker stop
- 功能:停止运行的容器
- 语法:
docker stop [OPTIONS] CONTAINER [CONTAINER...]
- 关键参数:
-s
:发送的信号
9.docker restart
- 功能:重启容器
- 语法:
docker restart [OPTIONS] CONTAINER [CONTAINER...]
- 关键参数:
-s
:发送的信号
10.docker kill
- 功能:强制退出容器
- 语法:
docker kill [OPTIONS] CONTAINER [CONTAINER...]
- 关键参数:
-s
:发送的信号 - 注意事项:
docker stop
发送的是SIGTERM
信号docker kill
发送的是SIGKILL
信号
11.docker top
- 功能:查看容器中运行的进程信息,支持
ps
命令参数 - 语法:
docker top CONTAINER [ps OPTIONS]
- 注意事项:容器运行时不一定有
/bin/bash
终端来交互执行top
命令,而且容器还不一定有top
命令,可以使用docker top
来实现查看Container中正在运行的进程
12.docker stats
- 功能:显示容器资源使用情况,包括CPU、内存、网络IO等
- 语法:
docker stats [OPTIONS] [CONTAINER...]
- 关键参数
-a, -all
:显示所有的容器,包括为运行的--format
:指定返回值的模板文件,如 table,json--no-stream
:展示当前状态就直接退出了,不再实时更新--no-trunc
:不截断输出
13.docker container inspect
- 功能:查看容器详细信息
- 语法:
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
- 关键参数:
-f
:指定返回值的模板文件,如 table,json-s
:显示总的文件大小
- 注意事项:
docker inspect
会自动检查是镜像还是容器然后显示详细信息
14.docker port
- 功能:用于列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口
- 语法:
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
15.docker cp
- 功能:在容器和宿主机之间拷贝文件
- 语法:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
- 示例
# 将主机/www/目录拷贝到容器mynginx的/www目录下 docker cp /www/ mynginx:/www/ # 将容器/www/目录拷贝到主机的/wwwbak目录下 docker cp mynginx:/www/ /wwwbak/
16.docker diff
- 功能:检查容器里文件结构的更改
- 语法:
docker diff CONTAINER
17.docker commit
- 功能:从容器创建一个新的镜像
- 语法:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
- 参数:
-a
:提交的镜像作者-c
:使用Dockerfile指令来创建镜像;可以修改启动指令-m
:提交时的说明文字-p
:在commit时,将容器暂停
- 示例:
docker commit c3f279d17e0a SnowK/Die:v1.0
18.docker pause
- 功能:暂停容器中所有的进程
- 语法:
docker pause CONTAINER [CONTAINER...]
19.docker unpause
- 功能:恢复容器中所有的进程
- 语法:
docker unpause CONTAINER [CONTAINER...]
20.docker rm
- 功能:删除停止的容器
- 语法:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
- 关键参数:
-f
:通过SIGKILL
信号强制删除一个运行中的容器
21.docker export
- 功能:导出容器内容为tar文件
- 语法:`docker export [OPTIONS] CONTAINER
- 关键参数:
-o
:写入到文件
22.dockers wait
- 功能:阻塞运行直到容器停止,然后打印出它的退出代码
- 语法:
docker wait CONTAINER [CONTAINER...]
23.docker rename
- 功能:重命名容器
- 语法:
docker rename CONTAINER NEW_NAME
24.docker container prune
- 功能:删除所有停止的容器
- 语法:`docker container prune [OPTIONS]
- 关键参数:
-f, --force
:不提示是否进行确认
25.docker update
- 功能:更新容器配置
- 语法:
docker update [OPTIONS] CONTAINER [CONTAINER...]
- 关键参数:
--cpus
:CPU数量--cpuset-cpus
:使用哪些CPU--memory
:内存限制--memory-swap
:交换内存--cpu-period
:是用来指定容器对CPU的使用要在多长时间内做一次重新分配--cpu-quota
:是用来指定在这个周期内,最多可以有多少时间用来跑这个容器
3.容器交互模式
1.attach
- attached模式,容器在前台运行
- 如果是在Linux服务器上,按Ctrl+C就会停止掉Docker服务,很容易误操作, 所以我们需要一个更好的,更稳定的模式,对应的是detached模式
- attached模式仅适用于容器和程序的调试阶段
2.detached
- 相比attach模式,启动时加上
-d
参数即可,容器则在后台运行 - 比起attached模式更建议使用
3.Interactive
- 当创建好一个容器之后, 可能需要去容器内部获取一些信息或执行一些命令,就需要进入到交互式模式
- 例如:创建一个Ubuntu容器之后,需要到系统里输入各种Shell命令和系统进行交互就需要进入交互式模式才可以完成
- 创建容器并进入到交互模式:
docker run -it nginx
- 进入该容器的交互模式:
docker exec -it nginx /bin/bash
4.常见问题
1.creatre、start、run有什么区别?
docker create
从Docker映像创建一个全新的容器,但是,它不会立即运行它docker start
命令将启动任何已停止的容器,如果使用docker create
命令创建容器,则可以使用此命令启动它docker run
命令是创建和启动的组合,因为它创建了一个新容器并立即启动它- 实际上,如果
docker run
命令在您的系统上找不到上述映像,它可以从Docker Hub中提 取映像
- 实际上,如果
2.import 和 load 有什么区别?
docker save images_name
:- 将一个镜像导出为文件,再使用
docker load
命令将文件导入为一个镜像,会保存该镜像的的所有历史记录 - 比
docker export
命令导出的文件大,很好理解,因为会保存镜像的所有历史记录
- 将一个镜像导出为文件,再使用
docker export container_id
:将一个容器导出为文件,再使用docker import
命令将容器导入成为一个新的镜像,但是相比docker save
命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照- 既可以使用
docker load
命令来导入镜像库存储文件到本地镜像库,也可以使用docker import
命令来导入一个容器快照到本地镜像库 - 两者的区别
- 容器快照将会丢弃所有的历史记录和元数据信息
- 而镜像存储文件将保存完整记录,体积也会更大