docker常用命令介绍

本文详细介绍了Docker的各种命令,包括查看帮助、版本信息、系统详细信息,以及镜像的查看、搜索、拉取和删除。此外,还涵盖了容器的创建、查看、退出、进入、停止、删除、启动、重启、资源监控、日志查看、进程检查、文件拷贝、数据同步和端口映射等操作,是Docker使用者的全面指南。
摘要由CSDN通过智能技术生成

1. 查看帮助

1. 官方文档
https://docs.docker.com/reference/
2. 查看docker 版本信息
# 简单信息
docker -v
# 详细信息
docker version
3. 查看docker系统的详细信息
docker info
4. 帮助命令
# 查看所有命令
docker --help
# 查看某个命令的帮助信息
docker COMMAND --help

2. 镜像命令

1. 查看镜像
# 查看当前本地所有镜像,不包含中间层镜像
docker images
# 查看所有镜像,包含中间层镜像
docker images -a 
# 查看所有镜像id
docker images -q 
# -a 和 -q可以连用
docker images -aq

# 查看指定仓库和TAG(版本)的镜像 
docker images [REPOSITORY[:TAG]]  
# 如
docker images mysql:latest
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    c0cdc95609f1   28 hours ago   556MB
2. 搜索镜像

# docker search 能显示的内容有限,网络允许的话,直接去dockerhub官网去查询较好
# https://registry.hub.docker.com/

# 搜索mysql镜像
docker search mysql

# 设置筛选条件 
	# --filter stars=num 筛选标星不少于30个的镜像
	# --filter is-automated=true/false 是否自动构建
	# --filter is-official=true/false 是否为官方镜像
docker search --filter stars=30 mysql

# 设置镜像显示格式

   # .Name 镜像名称
   # .Description 描述
   # .StarCount 星标数
   # .IsOfficial 是否官方
   # .IsAutomated 是否自动构建
docker search --format="table {{.Name}}\t{{.IsAutomated}}\t{{.IsOfficial}}\t{{.StarCount}}"  mysql
# 命令中table 表示以表格形式展示结果
3. 拉取镜像
# docker pull [OPTIONS] NAME[:TAG|@DIGEST]
docker pull tomcat:9.0
4. 删除镜像
# 删除镜像 docker rmi 镜像名[:tag]/镜像ID
docker rmi  centos
     # -f 强制删除
     
# 根据镜像ID删除所有镜像
docker rmi -f  $(docker images -aq)

3. 容器命令

1. 查看容器
# 查看当前正在运行的容器
docker ps 
    # -a 查看所有的容器 
    # -s 显示容器磁盘占用
    # -n=3 显示最近三条创建的所有容器
    # -l 显示最新创建的容器
    # -q 只显示容器ID
2. 新建容器
# docker run 镜像ID COMMAND
docker run -it centos /bin/bash 
    # -i 交互式操作,通常与 -t连用
    # -t 终端
    # centos 镜像名
    # /bin/bash  镜像后的命令,用于启用交互式shell
    
# docker run 其他常用参数
    # -d 后台运行
    # --name 给容器命名
    # -e 设置环境变量
    # -m 设置使用的内存最大值
    # -v 绑定一个卷
    # -p 指定端口映射 主机端口号:容器端口号
    # --rm 创建临时容器(exit容器即被删除)
3. 退出容器
exit #在容器内执行该语句,会退出该终端、退出并停止容器
ctrl +P +Q # 退出容器,但不关闭该终端,不停止容器
4. 进入容器
docker attach 镜像ID   # 进入容器,在这里使用exit退出容器,则容器会停止运行
docker exec [OPTIONS] 镜像ID [COMMAND] # 进入容器,并重启一个新的终端,因此可以使用很多docker run的参数
# 如
docker exec -it 3b04532af311 /bin/bash
# 由于 docker exec 相当于在容器中新开一个终端,因此在该终端中退出容器,容器仍处于运行状态
5. 停止容器
docker stop 容器ID

# 如果stop失败,可以尝试使用 docker kill命令强制停止
docker kill 容器ID
6. 删除容器
# 删除容器
docker rm CONTAINER
	# -f 强制刪除运行中的容器
	# -v 连同关联的匿名卷一块删除
# 强制删除所有容器
docker rm -f $(docker ps -aq)

# 删除所有状态为断开的容器
docker rm $(docker ps --filter status=exited -q)
7. 启动、重启容器
# 启动容器
docker start 容器ID
# 重启容器
docker restart 容器ID
8. 查看容器资源使用
docker stats 
# 默认显示实时显示所有正在运行的容器的资源占用
CONTAINER ID   NAME               CPU %     MEM USAGE / LIMIT     MEM %     NET I/O      BLOCK I/O         PIDS
2492b06944ce   centos01           0.00%     3.605MiB / 1.777GiB   0.20%     1.1kB / 0B   19.4MB / 57.3kB   1
3b04532af311   reverent_ritchie   0.00%     532KiB / 1.777GiB     0.03%     926B / 0B    0B / 0B           1
9f754a7abfd3   clever_albattani   0.00%     536KiB / 1.777GiB     0.03%     746B / 0B    0B / 0B           1

# 也可以查看指定容器ID或者容器名的状态
docker stats  2492b06944ce clever_albattani

CONTAINER ID   NAME               CPU %     MEM USAGE / LIMIT     MEM %     NET I/O      BLOCK I/O         PIDS
2492b06944ce   centos01           0.00%     3.605MiB / 1.777GiB   0.20%     1.1kB / 0B   19.4MB / 57.3kB   1
9f754a7abfd3   clever_albattani   0.00%     536KiB / 1.777GiB     0.03%     746B / 0B    0B / 0B           1

# 其他参数
    # --all 显示所有容器的状态数据(默认只显示运行中容器的状态)
    # --no-stream 只获取一次当前的占用情况,后续不实时获取
    # --format 指定输出格式
        # .Container    容器ID/容器名
        # .Name         容器名
        # .ID           容器ID
        # .CPUPerc      CPU 百分比
        # .MemUsage     当前内存使用
        # .NetIO        网络IO
        # .BlockIO      块设备IO
        # .MemPerc      内存使用占比(Windows不可用)
        # .PIDs         容器创建的进程或者线程数 (Windows不可用)
    
docker stats --all --format  "table {{.ID}}\t{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}"  2492b06944ce clever_albattani

CONTAINER ID   NAME               CPU %     MEM USAGE / LIMIT     MEM %     NET I/O      BLOCK I/O         PIDS
2492b06944ce   centos01           0.00%     3.605MiB / 1.777GiB   0.20%     1.1kB / 0B   19.4MB / 57.3kB   1
9f754a7abfd3   clever_albattani   0.00%     536KiB / 1.777GiB     0.03%     746B / 0B    0B / 0B           1
9. 查看容器日志
docker logs 容器ID/容器名
    # --details  显示更多信息
    # --follow 跟踪实时日志
    # --since  显示某个开始时间(2013-01-02T13:23:37Z、 42m for 42 minutes)的所有日志 
    # --tail  显示最近n条日志
    # -t 显示日志时间戳
    #  --until 显示某个时间(2013-01-02T13:23:37Z、 42m for 42 minutes)之前的所有日志 
    
docker logs --follow --timestamps  --since '2021-03-01'  --until '2021-05-18'  --tail 2 2492b06944ce
2021-05-14T03:34:11.150879981Z exit
2021-05-14T05:45:27.175175999Z [root@2492b06944ce /]# exit
10. 查看容器中的进程
docker top 容器ID/容器名

docker top 2492b06944ce
UID    PID   PPID    C    STIME      TTY      TIME        CMD
root   1853  1833    0    09:44    pts/0   00:00:00   /bin/bash
11 . 容器与主机之间的文件拷贝
# 将容器中的路径(文件或目录)拷贝至主机
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
# 将主机中的路径(文件或目录)拷贝至容器
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

# 如果SRC_PATH是文件
   # DEST_PATH 不存在, 需要手动新建目录,文件会保存至该DEST_PATH下
   docker cp 3b04532af311:/root/dockerfile.txt ./hostfolder  # 将dockerfile.txt保存到本地 ./hostfolder文件中,会覆盖同名文件
   # DEST_PATH 不存在且以‘/’结尾, 则会报错,提示需要新建目录
     [root@codetest ~]# docker cp 3b04532af311:/root/dockerfile.txt ./1/2/
     invalid output path: directory "/root/1" does not exist
   # DEST_PATH 存在,且是个文件,则会将SRC_PATH内容写进DEST_PATH
   docker cp 3b04532af311:/root/dockerfile.txt ./hostfolder/test.txt
   # DEST_PATH 存在,且是个目录,会在DEST_PATH新建跟SRC_PATH同名的文件
   docker cp 3b04532af311:/root/dockerfile.txt ./hostfolder/ # 会在./hostfolder/下新建‘dockerfile.txt’文件
   
 # 如果SRC_PATH是目录
   # DEST_PATH 不存在,会自动新建该 DEST_PATH
   docker cp 3b04532af311:/root/dockerfolder ./hostfolder456 # 在主机上新建 ./hostfolder456 目录
   # DEST_PATH 存在,但是个文件,会报错,提示 'cannot copy directory'
   docker cp 3b04532af311:/root/dockerfolder dockerfile.txt
   # DEST_PATH 存在,且是个目录
       # 如果 SRC_PATH 以'/.' 结尾, 则会将SRC_PATH目录下的文件拷贝至DEST_PATH
       docker cp 3b04532af311:/root/dockerfolder/. ./hostfolder
       # 如果不是SRC_PATH 以'/.' 结尾, 会在DEST_PATH下创建SRC_PATH目录
       docker cp 3b04532af311:/root/dockerfolder/ ./hostfolder # 在本机./hostfolder下新建dockerfolder路径,并拷贝其中的文件至主机./hostfolder/dockerfolder目录
12. 数据同步(卷挂载)
# 主机目录:容器目录
docker  run  -v `pwd`:`pwd` -w `pwd` -i -t  --name centos centos  /bin/bash
    [root@37fc626995b1 synctest]# ls
    sync.txt
    [root@37fc626995b1 synctest]# cat sync.txt 
    from host
    [root@37fc626995b1 synctest]# 

# 此时在主机修改文件会直接同步至容器,在容器中修改该文件,内容也会被同步至本地,主机和容器的对应目录 会保持一直
# 关闭容器,在主机修改目录,依然可以同步至容器。 删除容器,主机目录依然存在,不会被删除。

# 通过docker inspect命令,可查看容器的挂载信息
docker inspect 37fc626995b1
	 "Mounts": [
            {
                "Type": "bind",
                "Source": "/root/synctest",
                "Destination": "/root/synctest",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

# 若果主机目录不存在,则会在主机自动新建该目录
docker run  -v /doesnt/exist:/foo -w /foo -i -t  --name centos centos  /bin/bash

#--read-only 表示容器只对同步的目录具有写权限,其他目录均为只读权限,无法修改
docker run --read-only  -v `pwd`:`pwd` -w `pwd` -i -t  --name centos centos  /bin/bash

# 在容器目录添加 :ro 表示容器对该同步目录只有读权限,无写权限,要修改该目录,只能使用主机进行修改。 事实上,该设置会让容器对其他路径也只有读权限
docker run -v `pwd`:`pwd`:ro -w `pwd` -i -t  --name centos centos  /bin/bash

# 可以不指定主机目录位置
docker run -v /foo -w /foo -i -t  --name centos centos  /bin/bash
# 使用 docker inspect 命令查看容器详细信息,找到Mount模块,发现在不指定主机目录时,会在主机上生成随机路径
# /var/lib/docker/volumes/随机目录串/_data   ,用于和容器进行同步
	"Mounts": [
            {
                "Type": "volume",
                "Name": "925b2e8d73485053924dcd5d53e148142400bfb2164262247daf4e8ccb1be717",
                "Source": "/var/lib/docker/volumes/925b2e8d73485053924dcd5d53e148142400bfb2164262247daf4e8ccb1be717/_data",
                "Destination": "/foo",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ]
        
# 不指定主机目录时,可以指定挂载的名字
docker run  -v tongbu:/foo -w /foo -i -t  --name centos centos  /bin/bash
# 使用 docker inspect 命令查看容器详细信息,找到Mount模块,发现在不指定主机目录时,会在主机上生成指定路径
# /var/lib/docker/volumes/挂载名/_data   ,用于和容器进行同步
	"Mounts": [
            {
                "Type": "volume",
                "Name": "tongbu",
                "Source": "/var/lib/docker/volumes/tongbu/_data",
                "Destination": "/foo",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],


# 可通过docker volume ls 命令,查看不指定主机目录时的挂载信息
docker volume ls
    DRIVER    VOLUME NAME
    local     925b2e8d73485053924dcd5d53e148142400bfb2164262247daf4e8ccb1be717
    local     tongbu
    
# 使用 --volumes-from  可以从其他的容器中挂载卷
docker run --volumes-from 25731f8e331d --volumes-from 7b3e43cd66f7 -i -t ubuntu /bin/bash
13. 主机与容器端口映射
# -p 主机端口:容器端口
docker run  -d -p 8080:80 nginx
# -P 将主机的随机端口映射到容器端口
docker run  -d -P nginx

# docker port CONTAINER 查看容器的端口映射情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步以至千里。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值