Docker-核心篇(2)-Docker核心操作

1,592 阅读4分钟

一、镜像下载

以redis操作为例

1.1 镜像下载

  1. redis镜像下载
    • docker pull 镜像名称:tags
  2. 下载 redis:6.2.5 版本
    • docker pull redis:6.2.5
# docker pull redis:6.2.5
6.2.5: Pulling from library/redis
33847f680f63: Pull complete
26a746039521: Pull complete
18d87da94363: Pull complete
5e118a708802: Pull complete
ecf0dbe7c357: Pull complete
46f280ba52da: Pull complete
Digest: sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59
Status: Downloaded newer image for redis:6.2.5
docker.io/library/redis:6.2.5
  1. 下载完成相当于安装完成,此时并未启动

1.2 镜像查看

  1. 查看镜像
    • docker images
# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
redis        6.2.5     aa4d65e670d6   6 days ago   105MB
  1. 镜像含义如下
    • REPOSITORY:镜像名称
    • TAG:镜像版本
    • IMAGE ID:镜像id,操作时需要使用 等价于 REPOSITORY:TAG
    • CREATED:镜像创建时间
    • SIZE:镜像大小

1.3 镜像搜索

  1. 可以先搜索镜像内容
    • docker search 镜像名称

image.png

  1. 镜像通常关注STARS(点赞数)和OFFICIAL(是否官方),通常选择官方镜像

二、镜像运行

2.1 启动容器

  1. 启动镜像在后台运行,镜像启动之后相当于启动了一个容器,为一个redis的完整实例
    • docker run -d -p 系统端口:镜像端口 --name 镜像别名 镜像ID
      • run:表示此命令为 运行镜像
      • -p:指定端口,将宿主机端口映射镜像端口;可以指定映射多个端口,分别使用 -p 指定
      • -d:镜像后台运行
      • -P:大写P,随机分配端口
      • --name:指定别名,可用于后续的容器操作,如关闭、启动、重启、删除等
      • 最后为镜像id,如果不指定镜像id也可以使用REPOSITORY中的 名称:tag
# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
redis        6.2.5     aa4d65e670d6   6 days ago   105MB
# docker run -d --name redis -p 6379:6379 aa4d65e670d6
4004a2f58b4de822018a4fd12f7909c695b6c8f2ac512d43e6f8292512cbfe5a
  1. 例如此处再启动一个实例
    • docker run -d --name redis2 -p 6380:6379 aa4d65e670d6
  2. 启动时也可以指定交互命令,参考第四节,表示启动后自动进入容器内部
  3. 如果只需要在前台运行,则可以将 -d 替换为 -it 参数即可
    • -it:以交互模式运行
    • ctrl + p, q可以暂时退出非后台的交互程序
    • 如果使用exit将会停止并退出容器
  4. 前台和后台在退出exit指令行为有所不同
    • 前台:exit执行后退出虚拟机,容器停止
    • 后台:exit执行后退出虚拟机,容器不停止

2.2 容器查看

  1. docker ps:查看正在运行镜像,不包括未运行镜像
  2. docker ps -a:查看所有运行镜像,包括未运行镜像

image.png

  1. docker ps -s:查看容器已经使用的磁盘大小

2.3 停止容器

  1. 正常关闭:docker stop 容器id/容器别名
    • docker stop redis2
# docker stop redis2
redis2
  1. 强制关闭:docker kill 容器id/容器别名
    • docker kill redis2
# docker kill redis2
redis2

2.4 重启容器

  1. 关闭后的启动
    • docker start 容器id/容器别名
# docker start redis2
redis2
  1. 运行中的容器重启
    • docker restart 容器id/容器别名
# docker restart redis2
redis2

2.5 删除容器

  1. 删除已停止容器
    • docker rm 容器id/容器别名
# docker rm redis2
redis2
  1. 强制删除:docker rm -f 容器id/容器别名
# docker rm -f redis2
redis2
  1. 删除多个容器
    • docker rm -f $(docker ps -a -q)
      • -q:只显示容器id
    • docker ps -a -q | xargs docker rm -f

2.6 容器日志

  1. 容器启动过程中可能失败,所以需要查看容器日志信息
  2. 查看容器日志
    • docker logs -t -f 容器ID
      • t:显示时间戳
      • f:显示最新日志

image.png

  1. 查看redis日志

image.png

2.7 容器重命名

  1. 容器可以重命名,通过下面命令完成
    • docker rename <老容器id/别名> <新容器名称>

2.8 容器自启动

  1. 当Docker重启时容器会自动关闭,有时在服务器重启后需要对应的容器可以自动重启
  2. 可以通过 update 命令来配置容器自动启动
docker update redis --restart=always

三、镜像删除

  1. 镜像删除指定的删除 docker images 查看的镜像,也就是原始下载的数据,不要和容器删除混淆
  2. 删除单个:docker rmi -f 镜像id
    • -f:强制删除,及时容器在执行,如果不加如果已经运行了容器则不能删除
  3. 删除多个:docker rmi -f 镜像id1 镜像id2
  4. 删除全部:docker rmi -f $(docker images -qa)
  5. 删除redis镜像
# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
redis        6.2.5     aa4d65e670d6   6 days ago   105MB
# docker rmi aa4d65e670d6

四、进程交互

  1. 每一个都是一个微型版本的linux系统,所以可以进入到每个容器中进行容器操作,例如查看等等
  2. 容器交互式运行,可以进入到容器内容
    • docker run -it <容器id/别名> /bin/bash
      • /bin/bash 标识进入容器的命令行
    • 退出交互模式
      • exit

image.png

  1. 有些时候执行对内执行命令,但是并不想进入到容器内容,此时只需要不用 /bin/bash 替换为对应的命令即可
    • 外部直接执行:docker exec -it <容器id/别名> command
    • 例如下面执行执行容器内的 redis-cli 命令,而无需进入容器内部
# docker exec -it redis redis-cli
127.0.0.1:6379> set name redis
OK
127.0.0.1:6379> get name
"redis"

五、文件操作

5.1 文件拷贝

  1. 从容器内拷贝文件到主机
    • docker cp 容器ID/别名:文件路径 主机路径
  2. 从主机拷贝文件到容器内
    • docker cp 主机路径 容器ID:文件路径
  3. 区别就是容器内使用冒号分隔

六、命令结构图

image.png

七、其他命令

  1. docker inspect 容器
    • 查看容器细节,以json格式返回
  2. docker attach 容器
    • 直接进入容器启动命令的终端,不会启动新的进程
  3. docker top 容器
    • 查看容器内运行的进程