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

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

Xiao.Hei.Ge Lv3

在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

比如有:

img

获取到了镜像后,就可以利用下面的命令,查看我们刚刚pull下来的镜像了。

2.查看本地系统的所有docker镜像。

1
docker images

img

上面的第一行标签依次是:

REPOSITORY:表示镜像的仓库源,同一个仓库源,可能有多个镜像的标签
TAG:存储库镜像的标签
IMAGE ID:镜像的ID号
CREATED:镜像的创建时间
SIZE:镜像的大小

3.使用交互式的终端创建并启动一个容器

1
2
3
4
docker run -i -t XXX镜像IDXXX --name XXX XXX:XXX2 /bin/bash

#比如
docker run -itd --gpus all --name zhangzhe -v /zhangzhe/:/zhangzhe/ --env LANG=C.UTF-8 -p 8990:8990 -p 8991:8991 -p 8992:8992 -p 8993:8993 -p 8994:8994 -p 8995:8995 -p 8996:8996 -p 8997:8997 -p 8998:8998 -p 8999:8999 XXX:v1.0.0 /bin/bash

img

其中,常用的有如下可选参数:

-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

这个命令用来查看历史推出过的容器,以及当前正在运行的容器,也即是能看到容器的状态

img

这里看到我们启动过两个容器,状态都是退出的。上面的标签信息意义为:

CONTAINER ID:容器的ID,能够根据这个id重启容器
IMAGE:容器的镜像信息
COMMAN:容器的终端
CREATED:容器创建时间
STATUS:容器当前的状态(退出状态,运行状态,暂停状态)
PORTS:
NAMES:容器的字符串名字,在运行的时候可以给容器指定一个名字,如果没有指定,就会随机分配一个名字。

6.启动已经停止了的容器

1
docker start XX容器的IDXX

img

使用该命令重新启动容器后,容器的状态就变成了运行状态,可以通过

1
docker ps -a

查看当前所有的容器状态。

img

可以看到,容器7ddd880eec75的状态变成了Up。

7.后台挂起某个容器

很多情况下,我们希望容器能够在后台挂起,而不是退出,因此可以使用-d参数

1
docker run -i -i -d --name XX为创建的容器命名XX XXX镜像的IDXXXX /bin/bash

这里的–name表示为新创建的一个容器,指定名字。比如:

img

加入了-d命令后,默认是不启动命令行终端的。这样就将某个镜像的容器实例以后台挂起了。使用

1
docker ps -a 

可以查看历史的容器状态信息,比如。

img

8.如何停止一个容器。

首先使用

1
docker ps -a 

查看我们当前的容器信息。

img

可以看到有三个容器的历史信息,其中两个是运行状态Up。我们来使用stop命令来停止第二个容器。

1
docker stop XXX容器IDXXX

这样我们就停止了这个容器了,使用 sudo docker ps -a 查看当前的容器信息。

img

9.重启一个停止的容器

使用restart重启停止的容器,比如我们将第8小节停止的容器,重新启动

1
docker restart XXX重启的容器IDXXXX

如下图所示

img

10.查看正在运行着的容器

1
docker ps 

这个命令能够查看哪些容器是运行着的

img

11.进入已经挂在后台的容器终端

上面第7小节使用-d命令将容器挂在后台,但是默认无法以终端模式打开,这里想要进入已经挂在后台的容器的终端,主要有两个命令,这里分别介绍。

一、使用docker attach

将当前的控制台连接到正在运行的容器

1
docker attach XXX要进入终端的容器IDXXXX

img

缺点:使用docker attach进入容器的终端后,如果想要容器继续挂在后台,那么无法使用exit,这会导致容器直接退出,而不是退出终端。

二、使用docker exec(更推荐)

1
docker exec -i -t XXX要进入终端的容器idXXX  /bin/bash

结果如下。

img

使用这种方法进入容器的终端,在使用exit退出后,容器并不会退出,只是会退出终端。

img

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 

img

2.查看某个命令的用法

1
sudo docker XXX要查找的命令XXXX --help

也就是在正常的使用前提下,加入–help,比如我们查看run的用法

img

3.删除某个镜像或容器

比如用sudo docker images查看当前我的系统里的docker镜像有3个

img

我想要删除第一个IMAGE ID=0ebf66ab9e21的镜像,使用命令

注意:要删除某个docker镜像,必须保证该镜像没有容器实例在运行中,且没有容器实例存在。如果有,使用sudo docker stop停止该容器,然后删除该容器实例,然后再执行删除镜像。

删除容器

1
docker rm XXX容器IDXXXX

删除后,确保该镜像没有容器实例了,使用sudo docker ps -a查看是否还存在该镜像对应的容器实例。这里我一次性删除了3个容器实例。

img

现在我已经确保了,镜像 ID=0ebf66ab9e21已经没有存在的容器实例了(不管这个容器实例是否在什么状态)。

删除镜像

1
docker rmi XXX镜像IDXXX

img

4.互传文件在宿主机和容器

宿主机 -> 容器

1
docker cp 本地文件路径 容器ID或者容器名:保存到容器的目录

比如

img

容器 -> 宿主机

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
2
3
4
5
6
7
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Option 功能
-a 指定新镜像作者
-c 使用 Dockerfile 指令来创建镜像
-m 提交生成镜像的说明信息
-p 在 commit 时,将容器暂停|

比如,打包名为cluster的镜像

1
docker commit -a "zhangzhe" -m "这个镜像主要是用于XXX代码" 你的容器名或ID cluster:v2.0

结果:

img

7. 将镜像推到镜像仓库中

主要是三个步骤。

1
2
3
4
5
6
7
8
#第一步:使用用户名和密码登录到仓库。
docker login

#第二步:标记镜像
docker tag 镜像名:镜像Tag 仓库地址/镜像名:镜像Tag

#第三步:上传镜像
docker push 仓库地址/镜像名:镜像Tag

第一步的登录也可以直接在命令后面输入用户名和密码。比如:

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
2
3
4
5
6
7
FROM python38
RUN echo 'this is a py38 images' > /workspace/tmp.log
ENV LANG=C.UTF-8
COPY ./release/ /workspace/
WORKDIR /workspace/
RUN chmod +x /workspace/start.sh
ENTRYPOINT ["sh", "start.sh"]
  • 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
2
3
4
FROM py3810
RUN apt-get install wget
RUN wget -O "http://XXXXX.tar"
RUN tar -xvf XXXX.tar

上面的这种操作会创建三层,可以改成如下的用&&连接的代码,只创建一层。

1
2
3
4
FROM py3810
RUN apt-get install wget \
&& wget -O "http://XXXXX.tar" \
&& RUN tar -xvf XXXX.tar

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 进行许可。
评论