
Docker终端常用命令(删除,创建,新建,启动,停止,推送,提交)Dockerfile

在docker里的参数可以分开写,也可以连写,比如。
1 | sudo docker run -i -t -d 492093d32df02 /bin/bash |
等价于
1 | sudo docker run -itd 492093d32df02 /bin/bash |
windows11现已支持Docker,SSH以及部分的Linux命令(ls,cd,pwd等等)也可以通过鼠标滚轮缩放字体,推荐升级
1.基础命令
1.镜像获取
如果要从网上获取一个镜像,我们通常需要网上的存储库地址以及要获取镜像的标签
1 | docker pull XXX存储库地址XXXX:XXX存储库的镜像TAGXXXXXXX |
比如有:
获取到了镜像后,就可以利用下面的命令,查看我们刚刚pull下来的镜像了。
2.查看本地系统的所有docker镜像。
1 | docker images |
上面的第一行标签依次是:
REPOSITORY:表示镜像的仓库源,同一个仓库源,可能有多个镜像的标签
TAG:存储库镜像的标签
IMAGE ID:镜像的ID号
CREATED:镜像的创建时间
SIZE:镜像的大小
3.使用交互式的终端创建并启动一个容器
1 | docker run -i -t XXX镜像IDXXX --name XXX XXX:XXX2 /bin/bash |
其中,常用的有如下可选参数:
-i:表示交互式操作
-t:表示终端
–name:容器名
XXX:XXX2第一个表示镜像的所在库名,可以使用docker images查看,后面表示对应的镜像TAG
/bin/bash:表示终端从哪里打开
–runtime=nvidia表示容器里的运行使用nvidia硬件
-p:表示宿主机上的端口和容器实例化的端口的映射,以后想在外部调用容器内的22端口时,就可以使用12662来代替。(这个命令可以用多次,从而映射好多个端口号)
-v:用法为 -v /root/data:/home/data 表示把宿主机上的/root//data目录映射到容器的/home/data下从而实现两个目录的文件的同步更新。
这样我们就运行了这个容器
4.退出当前的容器的终端
1 | exit |
在打开的docker终端下,执行exit即可
5.查看历史容器信息
1 | docker ps -a |
这个命令用来查看历史推出过的容器,以及当前正在运行的容器,也即是能看到容器的状态
这里看到我们启动过两个容器,状态都是退出的。上面的标签信息意义为:
CONTAINER ID:容器的ID,能够根据这个id重启容器
IMAGE:容器的镜像信息
COMMAN:容器的终端
CREATED:容器创建时间
STATUS:容器当前的状态(退出状态,运行状态,暂停状态)
PORTS:
NAMES:容器的字符串名字,在运行的时候可以给容器指定一个名字,如果没有指定,就会随机分配一个名字。
6.启动已经停止了的容器
1 | docker start XX容器的IDXX |
使用该命令重新启动容器后,容器的状态就变成了运行状态,可以通过
1 | docker ps -a |
查看当前所有的容器状态。
可以看到,容器7ddd880eec75的状态变成了Up。
7.后台挂起某个容器
很多情况下,我们希望容器能够在后台挂起,而不是退出,因此可以使用-d参数
1 | docker run -i -i -d --name XX为创建的容器命名XX XXX镜像的IDXXXX /bin/bash |
这里的–name表示为新创建的一个容器,指定名字。比如:
加入了-d命令后,默认是不启动命令行终端的。这样就将某个镜像的容器实例以后台挂起了。使用
1 | docker ps -a |
可以查看历史的容器状态信息,比如。
8.如何停止一个容器。
首先使用
1 | docker ps -a |
查看我们当前的容器信息。
可以看到有三个容器的历史信息,其中两个是运行状态Up。我们来使用stop命令来停止第二个容器。
1 | docker stop XXX容器IDXXX |
这样我们就停止了这个容器了,使用 sudo docker ps -a 查看当前的容器信息。
9.重启一个停止的容器
使用restart重启停止的容器,比如我们将第8小节停止的容器,重新启动
1 | docker restart XXX重启的容器IDXXXX |
如下图所示
10.查看正在运行着的容器
1 | docker ps |
这个命令能够查看哪些容器是运行着的
11.进入已经挂在后台的容器终端
上面第7小节使用-d命令将容器挂在后台,但是默认无法以终端模式打开,这里想要进入已经挂在后台的容器的终端,主要有两个命令,这里分别介绍。
一、使用docker attach
将当前的控制台连接到正在运行的容器
1 | docker attach XXX要进入终端的容器IDXXXX |
缺点:使用docker attach进入容器的终端后,如果想要容器继续挂在后台,那么无法使用exit,这会导致容器直接退出,而不是退出终端。
二、使用docker exec(更推荐)
1 | docker exec -i -t XXX要进入终端的容器idXXX /bin/bash |
结果如下。
使用这种方法进入容器的终端,在使用exit退出后,容器并不会退出,只是会退出终端。
12.创建空的容器
以CentOS的linux发行版为例,使用系统镜像创建一个容器
1 | docker run --name my_docker_name -d centos:latest |
其中,这里的:latest是一个Tag,标签,表示这个镜像是最新的。
-d 表示以分离模式运行容器,这样在终端不会打印关于容器启动的信息。
13.在Docker容器中执行命令
docker exec是Docker的命令,用于在正在运行的容器中执行命令。允许在容器内部执行各种操作,如运行命令、安装软件、调试应用程序等。
1 | docker exec [OPTIONS] CONTAINER COMMAND [ARG...] |
-i:以交互模式执行命令,允许输入和输出。
-t:为容器分配一个伪终端或终端。
-u:指定要执行命令的用户名或UID。
比如,如果要在容器中执行ls
1 | docker exec -it <container-id> ls |
14. 容器日志查看
2.进阶命令
1.查看帮助信息
1 | docker |
2.查看某个命令的用法
1 | sudo docker XXX要查找的命令XXXX --help |
也就是在正常的使用前提下,加入–help,比如我们查看run的用法
3.删除某个镜像或容器
比如用sudo docker images查看当前我的系统里的docker镜像有3个
我想要删除第一个IMAGE ID=0ebf66ab9e21的镜像,使用命令
注意:要删除某个docker镜像,必须保证该镜像没有容器实例在运行中,且没有容器实例存在。如果有,使用sudo docker stop停止该容器,然后删除该容器实例,然后再执行删除镜像。
删除容器
1 | docker rm XXX容器IDXXXX |
删除后,确保该镜像没有容器实例了,使用sudo docker ps -a查看是否还存在该镜像对应的容器实例。这里我一次性删除了3个容器实例。
现在我已经确保了,镜像 ID=0ebf66ab9e21已经没有存在的容器实例了(不管这个容器实例是否在什么状态)。
删除镜像
1 | docker rmi XXX镜像IDXXX |
4.互传文件在宿主机和容器
宿主机 -> 容器
1 | docker cp 本地文件路径 容器ID或者容器名:保存到容器的目录 |
比如
容器 -> 宿主机
1 | docker cp 容器ID或者容器名:保存到容器的目录 本地文件路径 |
5. 容器的导出
如果想要将容器实例导出,可以使用命令:
1 | docker export -o container.tar container_name |
如果将这个tar包,迁移到别的地方后,想要导出为镜像,可以通过
1 | docker import container.tar my_new_image:latest |
6. 镜像的导出
同理,如果想要把镜像导出来,可以使用命令:
1 | docker save image_name:imags_tag > image.tar |
将镜像的tar包,迁移到别的地方后,想要导出为镜像,命令为:
1 | docker load -i image.tar |
7. 容器打包成镜像
1 | docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] |
比如,打包名为cluster的镜像
1 | docker commit -a "zhangzhe" -m "这个镜像主要是用于XXX代码" 你的容器名或ID cluster:v2.0 |
结果:
7. 将镜像推到镜像仓库中
主要是三个步骤。
1 | #第一步:使用用户名和密码登录到仓库。 |
第一步的登录也可以直接在命令后面输入用户名和密码。比如:
1 | docker login -u "your_username" -p "your_password" your_registry_domain |
xxxxxxxxxx14 1 npm install hexo -g #安装Hexo2 npm update hexo -g #升级3 hexo init #初始化博客4 5 hexo n “我的博客” == hexo new “我的博客” #新建文章6 hexo g == hexo generate #生成7 hexo s == hexo server #启动服务预览8 hexo d == hexo deploy #部署9 10 hexo server #Hexo会监视文件变动并自动更新,无须重启服务器11 hexo server -s #静态模式12 hexo server -p 5000 #更改端口13 hexo server -i 192.168.1.1 #自定义 IP14 hexo clean #清除缓存,若是网页正常情况下可以忽略这条命令text
3.Dockerfile构建镜像
Dockerfile可以理解为,把镜像启动, 运行里面的命令,启动各种服务或者代码,这所有的过程,都写到一个文件里。因此,这里可以类别。makefile,sh脚本。
1.Docker打包的方式
使用Docker构建镜像一般有三种方式。
- 方式一:通过第二节的6小节的docker save命令,这会打包镜像的所有层。
- 方式二:通过第二节的7小节的docker commit命令,这会提交当前容器及其容器所在的镜像,成为一个新的镜像。
- 方式三:通过Dockerfile文件进行打包。
2.一个简单的示例
下面用一个简单的示例,指示Dockerfile的基础用法
1 | FROM python38 |
- FROM 表示来自哪个基础镜像,这里的基础镜像是python38。
- RUN 表示在镜像内终端运行后面的命令。
- ENV 用来设置环境变量。比如这里设置容器内部的LANG=C.UTF-8
- COPY 将当前目录的./release/拷贝到镜像里的/workspace/
- WORKDIR 用来设置后续的指令工作目录
- ENTRYPOINT 用来设置容器在创建时就自动执行的命令,这个内容不可被覆盖。
因此,上面这个意思是,依据python38基础镜像,向/workspace/tmp.log写入一行”this is a py38 imaegs’字符;设置环境变量为LANG=C.UTF-8;复制本地的release目录到镜像的/workspace/目录;设置后续的工作目录为/workspace;运行命令,为/workspace/start.sh配置执行权限;设置任何人在创建容器时,就启动sh start.sh命令。
RUN 命令还可以同时运行多个命令。比如:
RUN [“./server1.py”, “dev”] 等价于RUN ./server1.py dev
3. 注意
Dockerfile的每个指令,执行一次,就会在docker的基础镜像上,新建一层,过多的层会导致镜像膨胀过大。许多命令可以合并在一起执行。
1 | FROM py3810 |
上面的这种操作会创建三层,可以改成如下的用&&连接的代码,只创建一层。
1 | FROM py3810 |
4. 构建镜像
1 | Docker build -t py3810:v2.0 |
4. Docker-Compose构建容器集群
5. 参考来源
Docker Dockerfilewww.runoob.com/docker/docker-dockerfile.html
- 标题: Docker终端常用命令(删除,创建,新建,启动,停止,推送,提交)Dockerfile
- 作者: Xiao.Hei.Ge
- 创建于 : 2024-08-07 14:28:54
- 更新于 : 2024-08-12 12:43:05
- 链接: https://cool.xiaohei.us/2024/08/07/Docker终端常用命令(删除,创建,新建,启动,停止,推送,提交)Dockerfile/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。