Docker的常用命令

帮助命令

1
2
3
docker  version                                 #查看版本信息
docker info #显示dockers的系统信息
docker 命令 --help #万能命令,帮助命令

镜像命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.docker images              #查看本机上的镜像
#可选项
-a, --all #列出所有镜像
-q, --quiet #只显示镜像的id
-aq #显示所有镜像的id
2.docker search #搜索镜像
#可选项
--filter=STARS=3000 #搜索出来的镜像的STARS大于3000
3.docker pull #下载镜像
#下载镜像:docker pull 镜像名 [:tag]
4.docker rmi #删除镜像
docker rmi -f 容器id #删除指定镜像
docker rmi -f 容器id 容器id 容器id #删除多个镜像
docker rmi -f $(docker images -aq) #删除多个镜像

容器命令

说明:有了镜像才能创建容器

1
docker pull quay.io/centos/centos:stream9

新建容器并启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 docker run [可选参数] image
#参数说明
--name='Name' 容器名字,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080

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

如:docker run -it quay.io/centos/centos:stream9 /bin/bash
exit #从容器中退回主机

列出所有运行的容器

1
2
3
4
 docker ps 命令           #列出当前正在运行的容器
-a #列出当前正运行的容器,举出历史运行过的容器
-n=? #显示最近创建的容器 ?即个数
-q #只显示容器的编号

退出容器

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

删除容器

1
2
3
docker rm 容器id                    #删除指定的容器,不能删除正在运行的容器
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -qixargs 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 镜像名
#docker run -d quay.io/centos/centos:stream9
#问题docker ps ,发现quay.io/centos/centos:stream9停止了
#常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有前台应用,就会停止

查看日志

1
2
3
docker logs -f -t -n --tail 容器
--tf 显示日志
--tf number 显示日志条数

查看容器中进程信息ps

1
2
docker top 容器id
#docker top 9db0d14241d1

查看镜像的元数据

1
2
docker inspect 容器id
#docker inspect 9db0d14241d1

进入当前正在运行的容器

1
2
3
4
5
6
7
8
9
10
11
#我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
#方式一
docker exec -it 容器id bashShell
#docker exec -it 9db0d14241d1 /bin/bash

#方式二
docker attach 容器id
#docker attach 9db0d14241d1

#docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach #进入容器正在执行的终端,不会启动新的进程

从容器内拷贝文件到主机上

1
2
3
4
5
6
7
8
9
10
docker cp 容器id:容器内路径 目的的主机路径
# docker cp 26b13cfc9e26:/home/text.java /mnt/c/Users/13343/Desktop

#把容器内的文件拷贝到windows桌面上
bash-5.1# cd /home
bash-5.1# touch text.java
bash-5.1# ls /home
text.java
docker cp 26b13cfc9e26:/home/text.java /mnt/c/Users/13343/Desktop
Successfully copied 1.54kB to /mnt/c/Users/13343/Desktop

查看cpu状态

1
docker stats

查看镜像[构建历史/分层记录]

1
2
docker history 容器id/镜像名
#docker history mydockerfile

实战

部署nginx

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
#拉取nginx镜像
docker pull nginx
#运行镜像
docker run -d --name nginx01 -p 3344:80 nginx #3344为主机端口(可修改),80为nginx默认端口(不可修改)
#本机自测
curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, nginx is successfully installed and working.
Further configuration is required for the web server, reverse proxy,
API gateway, load balancer, content cache, or other features.</p>

<p>For online documentation and support please refer to
<a href="https://nginx.org/">nginx.org</a>.<br/>
To engage with the community please visit
<a href="https://community.nginx.org/">community.nginx.org</a>.<br/>
For enterprise grade support, professional services, additional
security features and capabilities please refer to
<a href="https://f5.com/nginx">f5.com/nginx</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
#网络访问
http://localhost:3344/ #网页能正常打开说明部署成功

Commit镜像

1
2
3
4
5
6
docker commit [选项] <容器ID/容器名> <新镜像名>:<标签>
可选项
-a:指定作者(如 `-a "Your Name"`)
-m:提交说明(类似 Git,如 `-m "安装了 Nginx"`)
-p:提交时暂停容器(默认 `true`,防数据损坏)
-c:附带 Dockerfile 指令(如 `-c "EXPOSE 80"`)

容器数据卷

使用数据卷

直接使用命令来挂载 -v

1
2
3
4
5
docker run  -it -v ~/text:/data  quay.io/centos/centos:stream9 /bin/bash

#在wsl中创建文件夹text,挂载到容器中data文件 注:在wsl中的文件挂载要加~
#此时无论在哪个文件夹中新建文件,都会同步到另一个文件夹中
#启动时可通过docker inspect 容器id 来查看是否挂载成功,(看mount)

DockerFile

DockerFile的基础知识

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通过 DockerFile 构建生成的镜像,最终发布和运行的产品

Docker容器:容器就是镜像运行起来提供服务的,即实例

基础知识:

1.每个保留关键字(指令)都必须是大写字母

2.指令从上到下顺序执行

3.#表示注释

4.每一个指令都会创建提交一个新的镜像层

DockerFile的指令

1
2
3
4
5
6
7
8
9
10
11
12
FROM                  # 基础镜像,一切从这开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤,添加内容,如压缩包,会自动解压
WORKDIR # 镜像的目录
VOLUME # 挂载的目录
EXPOSE # 暴露端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBULID # 当构建一个被继承的DockerFile,这个时候就会运行ONBUILD的指令。触发指令
COPY # 类似ADD,将文件拷贝到镜像中,不会自动解压
ENV # 构建的时候设置环境变量

实战

1.创建自己的centos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#1.编写dockerfile文件
FROM quay.io/centos/centos:stream9 #官方基础镜像
MAINTAINER yyg<1334327962@qq.com> #作者及邮箱

ENV MYPATH /usr/local #设置环境变量
WORKDIR $MYPATH

RUN yum -y install vim #安装vim,net-tools
RUN yum -y install net-tools

EXPOSE 80 #声明端口

CMD echo $MYPATH #容器启动命令
CMD echo "---end---"
CMD /bin/bash

#2.通过这个文件构建镜像
#命令 docker build -f dockerfile文件路径 -t 镜像名:[tag]
docker build -f mydockerfile -t mycentos:0.1 .

#3.测试运行

对比之前的原生centos

新增了:自动进入工作目录,不再是根目录,新添vim,ifconfig等功能

2.自制一个dockerfile

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
FROM python:3.11-alpine

# 安装flask
RUN pip install flask --no-cache-dir

# 跳转的网站列表,支持多个网站
CMD ["python3", "-c", "\
from flask import Flask, redirect\n\
import random\n\
app = Flask(__name__)\n\
\n\
websites = [\n\ # 网站地址
'https://www.crazygames.com/game/jet-rush',\n\
'https://www.crazygames.com/game/space-waves',\n\
'https://www.crazygames.com/game/space-waves',\n\
'https://www.crazygames.com/game/doodle-road',\n\
'https://whatgamesplay.com/zh/snake-game'\n\
]\n\
\n\
@app.route('/')\n\
def jump():\n\
# 每次访问,随机跳转到列表里的一个网站
return redirect(random.choice(websites))\n\
\n\
app.run(host='0.0.0.0', port=80)\n\
"]

EXPOSE 80

效果:运行后每次访问 http://localhost:8080 随机跳转一个小游戏

Docker网络

docker0

Docker使用的时liunx桥接,宿主机中是一个docker容器的网桥 docker0

image-20260426131852333

容器删除,对应的网桥就消失了

自定义网络

1.查看docker网络

image-20260426141155355

网络模式

bridge :桥接 docker (默认)

none :不配置网络

host:和宿主机共享网络

2.创建自定义网络

1
2
# 创建一个自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet