• 本篇文章记录我在Docker学习中的总结
    在这里插入图片描述

一、Docker基础命令

  • 启动docker
systemctl start docker
  • 关闭docker
systemctl stop docker
  • 重启docker
systemctl restart docker
  • 查看docker状态
systemctl status docker
  • 开启开机自启动docker
systemctl enable docker
  • 关闭开机自启动docker
systemctl disable docker
  • 查看docker版本号信息
docker version
  • 查看docker系统信息,包括内核版本,容器数和映像
docker info

在这里插入图片描述

二、Docker镜像命令

  • 查看本地所有镜像资源信息,携带-q选项后,显示本地所有镜像的
    imageID
docker images
docker images -q
  • 从docker hub上搜索指定条件的镜像,比如搜索镜像名称带有redis的镜像
docker search redis
docker search 指定条件

在这里插入图片描述

  • 拉取docker hub上的镜像到本地
docker pull 镜像名称
docker pull 镜像名称:tag

拉取指定名称的镜像,镜像名称:tag(版本号)拉取指定名称版本的镜像,没有加版本号拉取的则是最新版本的镜像

  • 删除指定的本地镜像,一次可以删除多个
docker rmi 镜像名称/镜像id
docker rmi -f 镜像名称/镜像id

默认情况下,已经运行了容器的镜像不能删除,必须先停止并删除了相关的容器才能删除其对应的镜像。但是也可以加 -f 强制删除

值得一提的是docker命令可以配合在一起使用,比如我们删除全部镜像就可以如下这样搭配:把 docker images -q 查询出来的镜像id作为删除的值

docker rmi $(docker image -q)
  • 保存镜像
docker save 镜像名称/镜像id -o 保存的位置与名字

docker save命令可以将一个镜像导出为一个tar文件保存,进而可以进行镜像转移到其他安装了docker的服务器上加载使用

  • 加载镜像
docker load -i 镜像保存的位置与名字

docker load 可以将一个tar文件导入为一个镜像,一般和 docker save 配合使用

三、Docker容器命令

3.1、运行容器

  • 通过docker run命令可以启动和运行容器。该命令在执行时首先会在本地查找指定的镜像,如果找到了,则直接启动,否则会到镜像中心查找。如果镜像中心存在该镜像,则会下载到本地并启动,如果镜像中心也没有,则直接报错。

  • 通过该命令的–help可以查看到docker run命令的语法。可以看到其options选项非常多,这里介绍几个最常用的:

options作用
–name为容器指定一个名称
-i以交互模式运行容器,一般与-t同时使用
-t为容器分配一个伪终端
-d以守护进程方式运行容器
-h指定容器的主机
-e指定容器启动所需要的环境,例如连接密码
-p指定端口映射 主机端口:容器端口
  • 为容器命名 --name
docker run --name 容器名 镜像名称:tag

比如:运行容器redis:7.0并起名为redis

docker run --name redis reids:7.0

在这里插入图片描述
如上图所示,说明redis容器运行成功,但是这样运行就不能在控制台敲其他命令,所以我们都会以守护进程方式运行容器。

  • 以守护进程运行容器(后台运行) -d
docker run -d --name 容器名 镜像名称:tag

比如:以守护进程运行容器redis:7.0并起名为redis7,并使用 docker ps 命令查看

docker run -d --name redis7 redis7.0

在这里插入图片描述

  • 指定端口映射 -p
docker run -d -p 主机端口:容器端口 --name 容器名 镜像名称:tag

比如:以守护进程运行redis:7.0并起名为redis7,并指定端口映射 主机端口:容器端口

docker run -d -p 6380:6379 --name redis7 redis7.0

在这里插入图片描述
以上指令会将容器的6379端口映射到宿主机的6380端口上
说明:docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的,通过端口映射,我们就可以从外部访问宿主机的指定端口来访问到容器的应用。

  • 以交互模式运行容器,并为容器分配一个伪终端 -it
docker run -it 镜像名称:tag /bin/bash

比如:以交互模式运行centos:7.6.1810容器,并为容器分配一个伪终端,然后为容器命名

docker run -it --name centos7 centos:7.6.1810 /bin/bash

在这里插入图片描述
退出终端输入exit,在终端里,linux部分命令同样适用
注意:使用exit退出容器则容器也会直接停止,使用Ctrl+P+Q命令退出则不会让容器停止(常用)

-i:以交互模式运行容器
-t:为容器分配一个伪终端(一般两者结合使用)
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash

也可以-itd同时使用,比如

docker run -itd --name centos7 centos:7.6.1810

在这里插入图片描述
当执行这个命令后,会返回一个容器ID,因为执行 -d 命令就是返回一个容器ID。

问题:为什么使用 -itd ?
当我们 docker run -d ,某些镜像创建容器时,通过 docker ps 发现容器没有创建成功,比如我们创建centos7这个容器,docker ps 后发现没有创建成功
在这里插入图片描述
说明:docker容器后台运行,就必须有一个前台进程。容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

这个时docker机制的问题,比如web容器,以nginx为例,正常情况下,配置启动服务只需要启动响应的service即可,例如service nginx start。但是这样做nginx就是后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会自动自杀,因为它认为它无事可做。

解决方法就是,将你要运行的程序以前台进程的形式运行,使用 -it 提供一个伪终端,表示我还有交互操作要做。

3.2、退出容器

退出容器指的是退出以交互模式运行的容器。分为两种退出方式:
退出并停止容器:exit
退出但不停止容器:Ctrl+P+Q

3.3、查看容器进程,日志

  • 列出所有容器,包含当前正在运行的与停止运行的
docker ps -a
  • 列出最新创建的容器,无论其是否正在运行
docker ps -l
  • 列表最新创建的指定个数的容器
docker ps -n
  • 仅显示容器ID,要与前面的选项同时使用,比如和-a同时使用
docker ps -aq  //查询出所有容器的ID
  • 查看容器内运行的进程
docker top 容器名称/容器ID
  • 查看容器日志
docker logs 容器名称/容器ID
  • 查看容器的详细信息
docker inspect 容器名称/容器ID

在这里插入图片描述

3.4、再次进入容器

当我们以守护进程方式运行了一个容器,或以交互模式运行了一个容器,但容器内部执行的日志命令占用了交互命令行(就像以交互模式运行tomcat一样),而此时我们又想进入到容器中对容器内部进行一些操作,此时就需要用到exec/attach命令(推荐使用exec)。

  • 使用容器进程进入容器
docker attach [OPTIONS] 容器名称/容器ID

比如:使用 docker attach centos7 进入容器
在这里插入图片描述
该命令并没有另外再创建新的进程,而是使用了(依附于)容器进程,使用exit命令退出了当前进程,也就停止了容器。如上图,使用exit命令退出后,再次查询发现centos容器不再运行。

  • 新建进程进入容器
docker exec [OPTIONS] 容器名称/容器ID COMMAND

比如:使用 docker exec -it centos7 /bin/bash 进入容器并开启一个新的bash终端
在这里插入图片描述
该命令会创建一个新的独立于容器的进程,而使用exit命令仅用于结束该新建进程。如上图,使用exit命令退出后,再次查询发现centos容器还在运行。

3.5、容器启停

  • 启动容器
docker start 容器名/容器ID
  • 重启容器
docker restart 容器名/容器ID
  • 停止容器
docker stop 容器名/容器ID

此命令停止容器,如果容器正在被其他进程访问,则在访问结束后再停止

  • 强制停止容器
docker kill 容器名/容器ID

此命令停止容器,无论容器是否被其他进程访问都直接停止

3.6、容器删除

  • 此命令在默认情况下,要删除的容器必须是已经停止的容器,可同时删除多个
docker rm 容器名/容器ID
  • 此命令中添加-f可实现强制删除容器,无论是否停止
docker rm -f 容器名/容器ID

3.7、容器与宿主机文件传递

docker cp命令可以完成容器与宿主机中文件/目录的相互复制,无论该容器是否处于运行状态。

  • 从容器里面拷文件到宿主机
docker cp 容器名称/容器ID:容器路径 目的主机路径
docker cp centos7:/opt/hello.txt /opt/

比如:容器未停止状态下把centos7容器/opt目录下的hello.txt文件复制到宿主机的/opt目录下
在这里插入图片描述

比如:容器停止状态下把centos7容器/opt目录下的docker.txt文件复制到宿主机的/opt目录下
在这里插入图片描述

  • 从宿主机拷文件到容器里面
docker cp 主机路径 目的容器名称/容器ID:容器路径
docker cp /opt/aaa.txt centos7:/opt/

比如:把宿主机/opt/aaa.txt文件复制到容器的/opt/
在这里插入图片描述

3.8、导出、导入容器

  • 导出容器为一个压缩文件
docker export 容器名称/容器ID > 目的路径/[文件名.tar|文件名.tar.gz]

比如:导出centos7容器为一个/opt/下的test.tar.gz压缩文件
在这里插入图片描述

  • 使压缩文件导入为容器
docker import 文件路径/[文件名.tar|文件名.tar.gz] 镜像名:tag

小案例:
1、先删除centos镜像
2、执行命令docker import test.tar.gz centos:7.6.1810
3、查看镜像发现镜像已经生成
4、运行docker run,发现成功
在这里插入图片描述

3.9、将一个镜像提交成一个新的镜像副本

  • 将一个镜像进行提交成一个新的镜像副本
docker commit -m "描述信息" -a "作者" 容器名称/容器ID 镜像名:tag

小案例:
1、在原来centos容器内yum install vim
2、将原本镜像提交成一个新的镜像副本
在这里插入图片描述
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐