镜像命令

docker images 查看本地镜像

# 解释 
REPOSITORY   镜像的仓库源 
TAG          镜像的标签 
IMAGE ID     镜像的id 
CREATED      镜像的创建时间 
SIZE         镜像的大小

# 可选项
-a,--all   #列出所有镜像
-q,--quiet #只显示镜像的id

docker search 搜索镜像

# 可选项,通过搜索过滤
--filter=STARS=3000 #搜索出的镜像就是stars超过3000的

docker pull 下载镜像

# 下载镜像 docker pull 镜像名[:tag]
yuhao@Linux:~$ docker pull redis
Using default tag: latest           # 如果不写tag就是latest
latest: Pulling from library/redis 
61320b01ae5e: Pull complete         # 分层下载 docker images的核心 联合文件系统
f8f9e5369fdd: Pull complete 
b8f8315b617a: Pull complete 
eb61abf5b105: Pull complete 
03bc4ee78aa8: Pull complete 
4f4fb700ef54: Pull complete 
93cd3c5153ab: Pull complete 
Digest: sha256:b3ad79880c88e302deb5e0fed6cee3e90c0031eb90cd936b01ef2f83ff5b3ff2 Status: Downloaded newer image for redis:latest 
docker.io/library/redis:latest     # 真实下载地址

docker pull redis
# 等价于
docker pull docker.io/library/redis:latest

# 指定下载如下
docker pull redis:7.4.3-bookworm
7.4.3-bookworm: Pulling from library/redis 
61320b01ae5e: Already exists      # 分层下载 可以使用之前下载的缓存
f8f9e5369fdd: Already exists 
5cf79f4aceb3: Pull complete 
698c8d1b3fd1: Pull complete 
601d7fdb78f5: Pull complete 
98e4482f5fee: Pull complete 
4f4fb700ef54: Pull complete 
0eeb2b86c9b7: Pull complete 
Digest: sha256:236e397c1d5ab7a94adaf1a51eec3ca8333b05fafcd6d423c6c7cc5987e519a0 Status: Downloaded newer image for redis:7.4.3-bookworm docker.io/library/redis:7.4.3-bookworm

docker rmi 删除镜像

Options: 
	-f, --force Force removal of the image  # 强制删除
	    --no-prune Do not delete untagged parents

docker rmi -f 镜像id                 # 删除指定的容器 
docker rmi -f 镜像id 镜像id 镜像id    # 删除多个容器
docker rmi -f $(docker images -aq)  # 删除全部的容器
# 也可以不使用强制删除参数
# 例如
docker rmi 90b270fb6df3
docker rmi $(docker images -aq)

容器命令

前提 有镜像文件才可以创建一个容器 以下为 centos 镜像测试学习案例 docker pull centos

新建容器启动

docker run [可选参数] image

# 参数说明
--name="Name"       容器名字 tomcat0l.tomcat02,用来区分容器
-d                  后台方式运行
-it                 使用交互方式运行,进入容器查看内容

-P                  指定容器的端口 -p 8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口(常用)
	-p 容器端口
	容器端口
	
-P                  随机指定端口

# 测试启动并进入容器
yuhao@Linux:~$ docker run -it centos /bin/bash 
[root@2cdf22185264 /]# ls      # 目前已经处于容器内部
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var 

退出容器
[root@2cdf22185264 /]# exit
yuhao@Linux:/$ ls 
bin cdrom etc lib lib64 lost+found mnt proc run snap swapfile tmp var boot dev home lib32 libx32 media opt root sbin srv sys usr

列出所有运行的容器

# docker ps 命令  ps指 processes
	 # 列出当前正在运行的docker
-a   # 列出当前正在运行的docker + 历史运行的docker
-n=? # 显示最近创建的docker
-q   # 只显示容器的id

退出容器

exit          # 直接容器停止 并退出
Ctrl + Q + P  # 容器不停止 并退出

删除容器

docker rm 容器ID                   # 删除指定容器,不能删除正在运行的容器,强制删除为 rm -f
docker rm -f $(docker ps -aq)      # 删除所有的容器
docker ps -a -q | xargs docker rm  # 删除所有的容器

启动和停止容器

docker start    # 启动容器
docker stop     # 停止当前正在运行的容器
docker restart  # 重启容器
docker kill     # 强制停止当前容器

常用其他命令

后台启动

# 命令 docker run -d 镜像名
docker run -d centos
# 出现问题 
# docker ps 发现 centos 停止了

常见坑: docker 容器使用后台运行 就必须要有一个前台进程 docekr发现没有应用就会自动停止

查看日志

docekr logs

Options: 
	--details Show extra details provided to logs 
	-f, 
		--follow Follow log output 
		--since string Show logs since timestamp (e.g. "2013-01-02T13:23:37Z") or relative (e.g. "42m" for 42 minutes) 
	-n, 
		--tail string Number of lines to show from the end of the logs (default "all") 
	-t,  时间戳
		--timestamps Show timestamps 
		--until string Show logs before a timestamp (e.g. "2013-01-02T13:23:37Z") or relative (e.g. "42m" for 42 minutes)

例子

docker run -d centos /bin/sh -c "while true;do echo test;sleep 1; done"

docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
2c3824b616d9 centos "/bin/sh -c 'while t…" 4 seconds ago Up 3 seconds compassionate_liskov

# 显示日志
-tf           # 显示日志
--tail $数量  # 要显示的日志条数

docker logs -tf --tail 10 2c3824b616d9

查看容器中进程信息

docker top 容器ID

UID  PID   PPID  C STIME TTY   TIME      CMD 
root 36485 36463 0 21:12  ?   00:00:00   /bin/sh -c while true;do echo test;sleep 1; done 
root 36802 36485 0 21:16  ?   00:00:00   /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

查看镜像源数据

docker inspect 容器ID

[
    {
        "Id": "2c3824b616d9f9bde621c17dd49bdd83a7d04e9d4726ee918c9c635e6c81571c",
        "Created": "2025-05-29T13:12:27.983824577Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo test;sleep 1; done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 36485,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2025-05-29T13:12:28.041393278Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/2c3824b616d9f9bde621c17dd49bdd83a7d04e9d4726ee918c9c635e6c81571c/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/2c3824b616d9f9bde621c17dd49bdd83a7d04e9d4726ee918c9c635e6c81571c/hostname",
        "HostsPath": "/var/lib/docker/containers/2c3824b616d9f9bde621c17dd49bdd83a7d04e9d4726ee918c9c635e6c81571c/hosts",
        "LogPath": "/var/lib/docker/containers/2c3824b616d9f9bde621c17dd49bdd83a7d04e9d4726ee918c9c635e6c81571c/2c3824b616d9f9bde621c17dd49bdd83a7d04e9d4726ee918c9c635e6c81571c-json.log",
        "Name": "/compassionate_liskov",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "bridge",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "ConsoleSize": [
                43,
                141
            ],
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "private",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": [],
            "BlkioDeviceWriteBps": [],
            "BlkioDeviceReadIOps": [],
            "BlkioDeviceWriteIOps": [],
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": null,
            "PidsLimit": null,
            "Ulimits": [],
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/interrupts",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware",
                "/sys/devices/virtual/powercap"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "ID": "2c3824b616d9f9bde621c17dd49bdd83a7d04e9d4726ee918c9c635e6c81571c",
                "LowerDir": "/var/lib/docker/overlay2/f1d5003c90ccb9f121a03be02ca108f1e147835c5c8fa7a9756de43d94dca43f-init/diff:/var/lib/docker/overlay2/472a3902444bfceec351175dfad644f970924694122ba1e71d8515e07e61b120/diff",
                "MergedDir": "/var/lib/docker/overlay2/f1d5003c90ccb9f121a03be02ca108f1e147835c5c8fa7a9756de43d94dca43f/merged",
                "UpperDir": "/var/lib/docker/overlay2/f1d5003c90ccb9f121a03be02ca108f1e147835c5c8fa7a9756de43d94dca43f/diff",
                "WorkDir": "/var/lib/docker/overlay2/f1d5003c90ccb9f121a03be02ca108f1e147835c5c8fa7a9756de43d94dca43f/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "2c3824b616d9",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "while true;do echo test;sleep 1; done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20210915",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "414ac89b025372e0e21fb50494e1f00110b9022cdf7826e2d0b72c92499edb7b",
            "SandboxKey": "/var/run/docker/netns/414ac89b0253",
            "Ports": {},
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "1e527de4cd5432c9f2b625060f25cdb423e427b32c2cf662c05fc7f0b853efdb",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "ce:ea:20:d5:08:bd",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "MacAddress": "ce:ea:20:d5:08:bd",
                    "DriverOpts": null,
                    "GwPriority": 0,
                    "NetworkID": "a398265601bc73eba3b4845a0d3884e5a0a6320bcae0747f72aeef317ca9c086",
                    "EndpointID": "1e527de4cd5432c9f2b625060f25cdb423e427b32c2cf662c05fc7f0b853efdb",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DNSNames": null
                }
            }
        }
    }
]

进入当前正在运行的容器

# 我们通常使用容器都是使用后台方式运行 需要进入容器 修改一些配置

# 命令
docker exec -it 容器ID /bin/bash

# 方法二
docker attach 容器ID
……输出在执行的代码

区别
docker exec   # 进入后重启启动一个终端 可以在里面正常操作
docker attach # 进入容器正在执行的终端 不会启动新的终端

容器内文件复制到主机

docker cp 容器ID 

# 例如
docker cp 2c3824b616d9:/home/test.txt /home/yuhao/

将容器2c3824b616d9的/home/test.txt文件复制到主机的/home/yuhao/目录下

拷贝是一个手动过程 后期使用 -v 卷的技术实现持续化同步目录

总结

命令结构

测试实验

nginx

test-1

docker run -d -p 1987:80 --name nginx01 nginx

注意 --name 参数在镜像名称之前
不能写成如下情况
XXX docker run nginx -d --name nginx01 -p 1987:80 

curl localhost:80  成功

tomcat

test-2

docker run -d -p 1988:8080 --name tomcat01 tomcat
因为镜像源提供的tomcat镜像极其的微小所以访问首页的时候是404,需要复制一些默认文件
docker exec -it tomcat01 /bin/bash
cp -r webapps.dist/* webapps/

测试
curl localhost:8080  成功

elasticsearch与kibana

test-3

docker network create elastic-net
创建单独子网

docker run -d --name elasticsearch --network elastic-net -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" docker.elastic.co/elasticsearch/elasticsearch:7.6.2

限制内存
`-Xms512m` 表示 JVM 启动时至少分配 512 兆字节的堆内存
`-Xmx512m` 表示 JVM 最多可以使用 512 兆字节的堆内存

docker run -d --name kibana --network elastic-net -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" docker.elastic.co/kibana/kibana:7.6.2

查看地址用docker inspect {dockername}

可视化

portainer

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

--restart=always

  • 如果容器因为任何原因停止(例如,应用程序崩溃,或者手动停止),Docker 会尝试重启它

-v /var/run/docker.sock:/var/run/docker.sock

  • 通过将宿主机的 docker.sock 挂载到容器内部相同的路径,Portainer 容器内的应用程序就能够通过这个 socket 文件与宿主机的 Docker 守护进程进行通信,从而实现对宿主机上 Docker 引擎的 管理和控制(例如,创建、启动、停止、删除容器、镜像、网络等)

--privileged=true

  • 当一个容器以特权模式运行时,它几乎拥有了与宿主机相同的权限。它绕过了大多数内核安全机制,可以访问所有设备文件、修改内核参数、加载内核模块等。
  • 在 Portainer 的场景中,--privileged=true 提供了更深层次的权限,有时是为了确保 Portainer 能够执行一些需要更高权限的操作,例如在某些宿主机上管理存储卷或网络驱动

访问8088