十:docker容器管理
docker将镜像文件启动, 得到一个容器, 一个容器可以被看做一个操作系统
1.容器查看
# 命令, 只能看到正在运行的容器的状态
# 启动的每个容器都是一个进程
# docker ps
# 相关的头介绍
# CONTAINER ID: 容器启动之后的ID, 是唯一的
# IMAGE: 当前容器是基于哪个镜像启动的
# COMMAND: 容器启动之后, 默认执行了什么命令
# CREATED: 容器的创建时间
# STATUS: 容器当前状态,
# created: 容器被创建, 但是不能使用
# runing: 运行状态
# pause: 暂停状态
# exited: 容终止运行, 但是容器还在
# PORTS: 映射的端口, 主机和容器直接的端口映射, (为了数据交互,主机和容器进行网 络通信)
#NAMES: 容器启动之后的名字
#参数:
# -a, --all: 显示所有容器, 默认只显示running状态的
# -q, --quiet: 只显示容器ID
docker ps
docker ps -a
docker ps -aq
2.容器创建
# 容器被创建, 但是还不能使用, 需要启动
# $ docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
# OPTIONS:
# -a, --attach list 给容器关联 STDIN, STDOUT or STDERR
# -t, --tty: 给容器绑定终端
# -i, --interactive: 关联标准输入
# --rm: 容器终止运行(exited状态)的时候, 自动被删除
# --name string: 手动指定容器的名字, 如果没有指定, 会随机生成一个, 这个名字不能重复
# IMAGE: 基于哪个镜像启动容器
# COMMAND: shell命令可以不写, 或者写个bash,
# bash就是一个命令解析器,相当于没写
# ARG...: shell命令的参数
docker create -it --rm --name myubuntu ubuntu:latest bash
docker create -i -t --rm --name myubuntu1 ubuntu:latest bash
3-1.启动已经创建的容器
# docker start [OPTIONS] CONTAINER [CONTAINER...]
# OPTIONS:
# -a, --attach Attach STDOUT/STDERR and forward signals 标准输出/标准错误
# -i, --interactive Attach container's STDIN 标准输入
# CONTAINER: 容器名或者容器ID
docker start -ai myubuntu 启动容器,关联标准输出/错误,标准输入,会自动进入容器内部 ctrl+d退出容器
docker start myubuntu 启动容器,没有关联输入输出,不会进入容器内部
#容器创建时,指定参数--rm: 容器终止运行(exited状态)的时候, 自动被删除
3-2.创建新容器并启动
# 通过一个命令创建容器, 并且启动
# docker run 等于 docker create + docker start
# docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# OPTIONS:
# -d, --detach: 以守护进程的形式运行
# -a, --attach list 给容器关联 STDIN, STDOUT or STDERR
# -t, --tty: 给容器绑定终端
# -i, --interactive: 关联标准输入
# --rm: 容器终止运行的时候, 自动被删除
# --name string: 手动指定容器的名字, 如果没有指定, 会随机生成一个, 这个名字不能重复
docker run -itd ubuntu:latest bash //以守护进程的形式运行
docker run -itd --name xxl1 ubuntu:latest bash //以守护进程的形式运行
docker run -it --name xxl2 ubuntu:latest bash //会直接进入容器内部,ctrl+D退出
docker run -it --rm --name xxl3 ubuntu:latest bash //容器终止运行的时候, 自动被删除
4.容器的暂停/重启
暂停
# docker pause CONTAINER [CONTAINER...]
docker pause 容器名字或者容器ID
取消暂停
# docker unpause CONTAINER [CONTAINER...]
docker unpause 容器名字或者容器ID
重启
# docker restart [OPTIONS] CONTAINER [CONTAINER...]
# Options:
# -t, --time int: 延时时间, 默认10s
docker restart -t 30 容器名字或者容器ID
docker restart 容器名字或者容器ID
5.容器的关闭/终止/删除
关闭:
# 从running -> exited 状态, 容器还在, 有延时
# docker stop [OPTIONS] CONTAINER [CONTAINER...]
# Options:
# -t, --time int: 延时时间, 默认10s
终止:
# 从running -> exited 状态, 容器还在, 直接关闭, 没有延时
# docker kill [OPTIONS] CONTAINER [CONTAINER...]
# Options:
# -s, --signal string: 指定发出的信号, 一般不用
区别:一个有延时,一个没有延时
删除:
1.删除未运行非 running(up) 的容器
docker rm 容器名/容器ID
2.删除运行的容器
docker rm -f 容器名/容器ID
-f: 强制删除容器
3.批量删除容器
docker rm $(docker ps -aq) -f
docker rm `docker ps -aq` -f
6.容器的进入/退出
1.进入容器
(1)创建并进入 - 使用频率低
# docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 非守护进程的形式创建并运行,会直接进入容器内部
docker run -it --rm --name myxx ubuntu bash
(2)手动进入
# 创建并启动容器,以守护进程的形式
docker run -itd --rm --name myxx ubuntu bash
# 手动进入容器中
# docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
# OPTIONS:
# -i, --interactive Keep STDIN open even if not attached
# -t, --tty Allocate a pseudo-TTY
# CONTAINER: 容器名字/容器ID
# COMMAND: shell指令 -> bash
# [ARG...]: shell命令的参数
docker exec -it 27e729b90b49 bash
2.退出容器
# 第一种方式
在终端输入: exit
# 第二种方式: ctrl+D
7.容器的日志/信息/端口/重命名
1.查看容器的日志信息
# 容器运行一段时间之后, 会生成log日志, 如果没有生成, 是看不到的
docker logs 容器名/容器ID
2.查看容器的详细信息
# https://yq.aliyun.com/articles/230067
# 查看镜像的详细信息
docker inspect 容器名/容器ID
3.查看容器的端口信息
# 查看本机和容器的端口映射
docker port 容器名/容器ID
4.容器重命名
# docker rename CONTAINER NEW_NAME
# docker rename 容器名/容器ID 新的容器名字
docker rename 27e729b90b49 mynewub
7.基于容器的镜像导入导出
1.镜像的导出
# 方式一:
# docker export [OPTIONS] CONTAINER
# Options:
# -o, --output string: 导出的镜像文件的名字
docker export -o myub.img 7d94e1faf186
docker export -o ./myub01.img 7d94e1faf186
# 方式二:
# docker export 容器名/容器ID > 导出的镜像的名字(自己起)
docker export 7d94e1faf186 > myub02.img
2.镜像的导入 -> 导入到本地的镜像仓库中
# cat 要导入的镜像文件 | docker import - 新的镜像名:tag
cat myub.img | docker import - myub:v1.0
与直接对镜像导入导出对比:
save 和 export
- 使用save导出镜像, 不能对镜像进行修改
- export通过容器导出, 原始镜像可以通过启动容器进行修改
- 通过export导出镜像, 会丢失镜像的历史记录
如果没有通过容器对进行做任何修改, export导出的镜像小
load 和 import
- 都是将导出的镜像导入到本地镜像仓库
- 如果使用load进行导入: 镜像名无法修改
- import导入镜像: 镜像名是可以修改的

网友评论