Docker:基本命令

Docker:基本命令

Docker的常用命令

帮助命令

1
2
3
docker version      #查看版本
docker inf #显示系统信息
docker 命令 --help #万能命令

Docker的常用命令

帮助命令

1
2
3
docker version      #查看版本
docker inf #显示系统信息
docker 命令 --help #万能命令

镜像命令

docker images查看所有本地的主机上的镜像

选项说明
-a--all显示所有镜像(默认只显示最终镜像,隐藏中间镜像)
-q--quiet只显示镜像的 ID,不显示其它信息

docker search搜索镜像

选项作用
-f--filter根据条件过滤结果,例如 --filter stars=10 只显示点赞数大于 10 的镜像
--format使用 Go 模板美化输出结果,例如输出成表格或 JSON
--limit设置最大返回条数,比如 --limit 5 最多返回 5 个镜像
--no-trunc不截断输出(比如镜像描述不会被省略)

docker pull 镜像名[:tag]下载镜像

^55fc23

选项说明
-a, --all-tags拉取仓库中所有 tag 的镜像,docker pull mysql:5.7 指定版本
--disable-content-trust跳过镜像验证(默认是 true,意思是跳过,不做签名验证)
--platform string指定平台,比如拉 ARM 架构的镜像:--platform linux/arm64
-q, --quiet安静模式,不显示下载进度条,只显示镜像 ID
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@zheep:~# docker pull mysql                    
Using default tag: latest # 如果不写tag,默认就是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete # 分层下载,docker iamge的核心联合文件系统
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
...
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738 # 签名
bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
# 等价于
docker pull mysql
docker pul1 docker.io/library/mysql:1atest

docker rmi删除镜像

1
2
3
docker rmi -f 容器id                      # 删除指定镜像
docker rmi -f 容器id 容器id 容器id 容器id # 删除多个镜像
docker rmi -f $(docker images -aq) # 删除全部的镜像

容器命令

说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习

1
docker pull centos

新建容器并启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
docker run [可选参数] image

# 参数说明
-name="Name" 容器名字tomcat01 tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
-P 随机指定端口

# 测试 并进入容器
root@iZf8z4m0zzs3eoirsd64fvZ:~# docker run -it centos /bin/bash
[root@061d6401141d /]# ls # 查看容器内的CentOS
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@061d6401141d /]# exit
exit

列出所有运行中的容器

1
2
3
4
5
6
7
8
9
10
11
12
#docker ps命令
#列出当前正在运行的容器
-a #列出当前正在运行的容器+带出历史运行过的容器
-n=? #显示最近创建的容器
-q #只显示容器的编号

root@iZf8z4m0zzs3eoirsd64fvZ:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@iZf8z4m0zzs3eoirsd64fvZ:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
061d6401141d centos "/bin/bash" 17 minutes ago Exited (0) 7 minutes ago frosty_zhukovsky
df72a233637c hello-world "/hello" 2 hours ago Exited (0) 2 hours ago recursing_proskuriakova

退出容器

1
2
exit         #直接容器停车并退出
Ctr1 + P + Q #容器不停止退出

删除容器

1
2
3
docker rm 容器id                         # 删除指定容器,强制删除 -f
docker rm -f $(docker ps -aq) # 删除全部的容器
docker ps -a -q|xargs docker rm # 删除全部的容器

启动和停止容器的操作

1
2
3
4
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id

常用其他命令

后台启动容器

1
2
3
4
docker run -d centos
# 问题docker ps,发现centos停止了
# 常见的坑:docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止

查看日志命令

1
2
3
4
5
6
7
8
9
10
11
docker logs -t # 加时间
-f # 持续打印
-tf --tail 条数 容器 #显示指定条数日志
-tf 容器 #显示全部日志

# 自己编写一段she1l脚本
docker run -d centos /bin/sh -c "while true;do echo zheep;sleep 1;done"
root@iZf8z4m0zzs3eoirsd64fvZ:~# docker logs -f -t --tail 10 e0817c5740be
2025-05-12T09:17:53.276619691Z zheep
2025-05-12T09:17:54.278736383Z zheep
...

查看容器中进程命令

1
2
3
4
docker top 容器id
UID PID PPID C STIME TTY TIME CMD

root 2754169 2754145 0 17:17 ? 00:00:00 /bin/sh -c while true;do echo zheep;sleep 1;done

查看镜像的元数据

1
docker inspect 容器id

进入当前正在运行的容器

docker exec -it 容器id bashShell
1
2
3
4
5
root@iZf8z4m0zzs3eoirsd64fvZ:~# docker exec -it e0817c5740be /bin/bash 
# 让你进入容器内部并获得一个 bash 交互式命令行界面
[root@e0817c5740be /]# ls -a
. .dockerenv dev home lib64 media opt root sbin sys usr
.. bin etc lib lost+found mnt proc run srv tmp var
docker attach 容器id
1
2
root@iZf8z4m0zzs3eoirsd64fvZ:~# docker attach e0817c5740be                 
当前正在执行的代码...
区别
1
2
docker exec -it 容器id bashShell # 进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach 容器id # 进入容器正在执行的终端,不会启动新的进程

从容器内拷贝文件到主机

1
2
3
docker cp 容器id:容器内路径 目的地的主机路径
容器可以直接退出,因为数据依然存在
# 拷贝是一个手动过程,未来我们使用-V卷的技术,可以实现,自动同步fhome/home

小结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 容器生命周期管理
run # 创建一个新的容器并运行一个命令
create # 创建一个新的容器,但不启动
start # 启动一个已停止的容器
restart # 重启一个运行中的容器
stop # 停止一个运行中的容器
pause # 暂停容器中的所有进程
unpause # 取消暂停容器
kill # 强制终止容器
rm # 删除一个或多个容器
wait # 阻塞直到容器停止,然后输出其退出码

# 容器交互与调试
exec # 在已有容器中执行命令
attach # 连接到一个运行中的容器
logs # 获取容器的日志
top # 查看容器中运行的进程信息
inspect # 获取容器或镜像的详细信息
port # 查看容器端口映射
diff # 查看容器文件系统变化
events # 实时获取容器事件

# 镜像管理
build # 通过Dockerfile构建镜像
images # 列出本地镜像
rmi # 删除一个或多个镜像
pull # 从镜像仓库拉取镜像
push # 将镜像推送到镜像仓库
tag # 给镜像打标签
history # 查看镜像的创建历史

# 镜像导入导出
save # 保存镜像为tar包
load # 从tar包加载镜像
export # 导出容器文件系统为tar包
import # 从tar包创建镜像

# 文件拷贝
cp # 从容器中拷贝文件到宿主机或相反

# Docker Registry 登录操作
login # 登录到Docker镜像仓库
logout # 登出镜像仓库
search # 在Docker Hub中搜索镜像

# 系统信息
info # 显示Docker系统信息
version # 显示Docker版本信息
stats # 查看cpu状态

实践

Docker安装nginx

1. 搜索镜像
2. 下载镜像
1
docker pull nginx
3. 运行测试
1
2
3
4
5
6
7
8
9
10
docker run -d --name demo-nginx -p 1145:80 nginx:latest
暴露端口:容器内端口
curl localhost:1145
# Welcome to nginx!

root@iZf8z4m0zzs3eoirsd64fvZ:~# docker exec -it demo-nginx /bin/bash
root@b1aeedc7b8f3:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
# 思考问题:我们每次改动nginx配置文件,都需要进入容器内部?十分的麻烦,我要是可以在容器外部提供一个映射路径,达到在容器外部修改文件,容器内部就可以自动修改?
-v # 数据卷

Docker安装tomcat

…省略

1
2
3
4
5
6
7
8
9
10
#官方的使用
docker run -it --rm tomcat:9.0
--rm # 关闭后删除该容器(一般用于测试)
root@iZf8z4m0zzs3eoirsd64fvZ:~# docker run -d -p 1234:8080 --name tomcat-dome
root@iZf8z4m0zzs3eoirsd64fvZ:~# docker exec -it tomcat-demo /bin/bash
root@a31230fef10b:/usr/local/tomcat# cd webapps
root@a31230fef10b:/usr/local/tomcat/webapps# ls -a
. ..
# 然后发现 linux命令少了,没有webapps,这是阿里云镜像的问题,默认最小镜像,排除了不必要的东西
# 思考问题:我们以后要部署项目,如果每次都要进入容器是不是我要是可以个映射路径,webapps我们在外部放置项目,就自动同步到内部就好了!

Docker安装es + kibana

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# es十分的耗内存
# es的数据一般需要放置到安全目录 挂载
# -net somenetwork ? 网络配置

# 启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
# 启动了linux就卡住了,使用dockerstats查看cpu的状态

# 低内存服务器如何运行高内存容器
# 我们需要增加内存限制,修改配置文件 -e 环境 配置修改

dockerrun -d --name elasticsearch -p 9200:9200 -p9300:9300 -e "discovery.type=sing1e-node" -e ES_JAVA_OPTS=-Xms64m -Xmx512m"e1asticsearch:7.6.2
"
# 使用kibana连接es?思考网络如果才能连接过去!

可视化

  • portainer(先用这个)
  • Rancher(CI/CD再用)

什么portainer?

Docker图形化界面管理工具!提供一个后台面板供我们操作!

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

Docker:基本命令
https://www.zheep.top/posts/34398092/
作者
西行寺岩羊
发布于
2025年5月11日
许可协议