Docker File 的基本操作
Docker file 的基本操作
1 | docker run hello-world |
出现这种情况就说明正常,
对Docker操作
安装完成Docker后,默认每次开机的时候都会自动启动,但我们也可以手动启动,关闭或者重启Docker
1 | # 启动docker |
对镜像的基础操作
获取当时所有镜像(docker images)
1 | docker image ls |
标签 | 含义 |
---|---|
REPOSITORY | 镜像所在的仓库名称 |
TAG | 镜像标签 |
IMAGEID | 镜像ID |
CREATED | 镜像的创建日期(不是获取该镜像的日期) |
SIZE | 镜像大小 |
拉去镜像(docker pull)
除了使用官方的镜像外,我们还可以在仓库中申请一个自己的账号,保存自己制作的进行,或者拉去使用他人的镜像。
官方镜像
1 | docker image pull 镜像名称 |
删除镜像(docker rmi)
1 | docker image rm 镜像名或镜像ID 或 docker rmi 镜像名或镜像ID |
删除镜像的前提是没有使用这个镜像的容器,如果有需要先删除容器(报错:Error response from daemon: conflict: unable to delete 镜像ID (must be forced) - image is being used by stopped container 容器ID则代表有容器使用了此镜像。)可以尝试先执行docker rm 容器ID删除容器,如果还报错,可以看我下方删除容器的具体方法。
几条删除命令的区别
docker rm: 删除一个或多个 容器
docker rmi: 删除一个或多个 镜像
docker prune: 用来删除不再使用的 docker 对象
##加载镜像(docker run)
上面我们说过,镜像只是一个只读类型的文件,而我们的环境不可能只是一个这样的文件,所以我们需要把这个镜像加载成我们的环境,也就是让他变成容器。
1 | docker run [可选参数] 镜像名 [向启动容器中传入的命令] |
常用可选参数 作用
-i 表示以《交互模式》运行容器。
-d 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
-t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name 为创建的容器命名。(默认会随机给名字,不支持中文字符!!!)
-v 表示目录映射关系,即宿主机目录:容器中目录。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p 表示端口映射,即宿主机端口:容器中端口。 比如:-p 8080:80 就是将容器中的80端口,映射到主机中的8080端口
–network=host 表示将主机的网络环境映射到容器中,使容器的网络与主机相同。每个 Docker 容器都有自己的网络连接空间连接到虚拟 LAN。使用此命令则会让容器和主机共享一个网络空间。
可以启动一个系统docker run -i -d -t –name=kali-test kalilinux/kali-rolling(这里我使用linux的一个发行版kali作为介绍)
或可以简写为docker run -idt –name=kali-test kalilinux/kali-rolling
PS: 如果加载一个我们没有的镜像,docker会自动从官方仓库中进行拉去。
如果你没有下载docker/getting-started的进行,这里会自动帮你下载
成功启动后,可以在浏览器中输入http://localhost:8080/
即可看到如下页面
使用交互式容器
上面我们成功将镜像变成了容器,但上述的命令中我们都加入了-d,让容器在后台运行了。下面我们就来讲如何和正在运行的容器进行交互。
查看容器(docker ps)
查看容器主要会用到ps命令
1 | # 查看当前所有正在运行的容器 |
标签 | 含义 |
---|---|
CONTAINER ID | 镜像ID |
IMAGE | 创建容器的镜像名称 |
COMMAND | 默认启动命令(启动时会自动执行) |
CREATED | 创建容器的日期 |
STATUS | 当前的状态(启动了多久,多久之前退出等) |
PORTS | 映射的端口 |
NAMES | 容器的名称 |
SIZE | 容器大小(使用-s命令参数时才能看到) |
启动和关闭容器
1 | # 停止容器 |
如果我们成功启动或者关闭一个容器的话,会返回容器名或者容器id
stop和kill的区别: stop是比较优雅的关掉一个容器,类似我们正常退出一个软件,而kill是当一个进程出现意外无法正常关闭的时候,我们强行进行关闭,有点像我们使用任务管理器进行结束进程操作
操作后台容器
之前我们下过一个kali并且放在了后台运行,如果没有下载可以执行下列命令(docker run -i -d -t –name=kali-test kalilinux/kali-rolling),下面我们就用下面的命令开启kali(如果你下的是其他系统,比如ubuntu也可以举一反三一下)
首先我们确保我们要进入的容器是开启状态的,使用docker ps -a查看其中的STATUS属性是否是Up开头,如果不是先照着上面启动容器的方法开启容器
我们开启容器后,如果需要在容器内执行命令,可以将后台切换到前台,也可能使用docker命令将我们需要执行的命令传入。
操作方法有很多种,这里我们介绍一些比较常用的方法
1 | # 如果我只需要执行简单的一两条命令可以使用docker exec |
exec可选参数 | 作用 |
---|---|
-d | 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。 |
-e | 设置环境变量 |
-i | 表示以《交互模式》运行容器。 |
-t | 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。 |
-u | 设置用户名和UID。 |
-w | 设置容器内的工作目录。 |
容器制作成镜像
我们为什么要把容器制作成镜像? - 镜像可以看作为是一种备份,如果我们后期环境出现了问题,可以还原到早期镜像。 - 镜像便于传播,可以让自己的其他设备或他人的重复利用变得更加简单容易。 - # 将容器制作成镜像 docker commit 容器名 镜像名 # 镜像打包备份(打包备份的文件会自动存放在当前命令行的路径下,如果想让保存的文件可以打开,可以加.tar后缀) docker save -o 保存的文件名 镜像名 # 镜像解压 docker load -i 文件路径/备份文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
我们将打包备份的镜像可以通过网络发送到其他设备上,使用docker镜像解压即可直接使用你的环境。
# Docker Dashboard(Docker 仪表板)
Docker 仪表板的主要作用为:快速访问容器日志,启动容器的 shell,并轻松管理容器生命周期(停止、删除等)。
![](./../images/Docker%20file%20%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C/image-20230919194210103-1700990334962-125-1700994526524-98.png)
在[Docker](https://so.csdn.net/so/search?q=Docker&spm=1001.2101.3001.7020)中,我们无法删除正在运行的容器,请先将其停止。
停止所有正在运行的容器。
Terminal
```bash
$ sudo docker stop $(sudo docker ps -aq)
卸下所有停止的容器。
Terminal
1 | $ sudo docker rm $(sudo docker ps -aq) |
该错误的意思是docker已有一个容器占用了目前docker-compose里的subnet。
解决方法
1、修改当前docker-compose里的network配置,换一个subnet
2.执行命令docker network prune (原因:即使容器停止/删除,网段依旧会被占用,运行该命令可清除占用子网网段即可)
在Dockerfile所在目录下,使用以下命令构建镜像:
其中,-t
参数用于指定镜像的名称,.
表示Dockerfile所在目录。