初识Docker之基础操作

什么是Docker?

Docker是一款轻量级虚拟化容器的管理引擎

Docker的两个基本概念

  • 镜像:可以理解为一个打包了运行环境的特殊文件系统,它包含了容器启动运行所系要的所有信息,包括运行程序和配置数据等。镜像不包含任何动态数据,其内容在构建之后也不会改变。例如一个官方的Ubuntu14.04镜像,就包含了一套完整的Ubuntu14.04最小系统的root文件系统。
  • 容器镜像容器的关系,类似于面向对象程序设计中的实例一样,镜像是静态的定义而容器时镜像运行时的实体,可以堪称一个具备某个运行环境非常轻量的虚拟机。容器可以被创建、启动、停止、删除等操作。在创建容器时,需要显示第为容器指定镜像,指定镜像后,容器就具备了镜像中保存的运行环境了。例如,可以为容器指定Ubuntu14.04的镜像,然后该容器就具备Ubuntu14.04的运行环境了。

Docker使用的基本过程

  • 容器需要基于一个镜像来创建和使用。因此,Docker容器的使用一般有以下三个步骤:

1、获取一个镜像
2、基于该镜像创建并启动一个容器
3、进入该容器,执行“程序”

  • 第一步:获取镜像
    “镜像”可以理解为一个打包了运行环境的文件系统。安装完Docker之后,本地是没有镜像的,所以需要先获取所需要的镜像。
  • 第二步:创建并启动容器
    在获取到所需的镜像之后,就可以基于该镜像创建并启动一个容器,该容器就具备了镜像包含的运行环境。同时,在创建容器时也可以设置容器的启动命令,该命令会在容器启动时执行。
  • 第三步:进入容器并执行”程序“
    在容器成功创建并启动之后,该容器就具备了Ubuntu的运行环境。我们可以进入该容器内部,并在其内部执行任何在Ubuntu系统上的程序了。这里的“程序”可以是“Linxu命令”、“shell脚本”、“C++程序”等等。

获取镜像

默认情况下,使用Docker pull命令,会从官网的Docker Hub库中将镜像拉去到本地。
命令格式

docker pull [OPTIONS] <仓库名>:<标签>
  • docker pull :Docker拉取镜像命令的关键词
  • [OPTIONS] :命令选项
  • 仓库名:仓库名的格式一般为<用户名>/<软件名>。对于Docker Hub,如果不指定用户名,则默认为library,即官方镜像
  • 标签:标签是区分镜像不同版本的一个重要参数,<仓库名>:<标签>会唯一确定一个镜像,默认为latest。
  • 例如我们要从Docker Hub官方仓库拉取一个Ubuntu14.04的官方镜像,其语句如下:
docker pull ubuntu:14.04

启动容器

docker run命令会基于指定的镜像创建一个容器并启动它。docker run 的基本语法如下:

docker run [OPTIONS] 镜像名 [command] [ARG[
  • docker run:Docker创建并启动的命令关键词
  • OPTIONS:命令选项,最常用的包括-d后台运行容器并返回容器ID,-i以交互模式运行容器,-t为容器分配一个伪输入终端…
  • 镜像名:以<仓库名>:<标签>的方式来指定
  • COMMAND:设置启动命令,该命令在容器启动后执行。
  • ARG:一些其他参数
    实例:创建一个容器,容器中具有Ubuntu的运行环境,输出hello docker
    在这里插入图片描述
    注意:如果本地没有镜像,创建容器时会报错,然后会从官网上下载所指定的镜像,然后部署在容器中,再执行echo命令

停止容器

停止就比较简单了,直接运行命令

docker stop [容器名]

这是一个实例

进入容器

进入容器的方法比较多,这里只提及docker目前提供的docker exec 和docker attach两个命令

docker attach 进入容器内部
docker attach containerId|containName

下面给这个例子是:首先通过docker run 创建一个容器,里面安装Ubuntu,启动之后使用docker attach containerId (这里的containerId是da7d,取前四位即可唯一标识),通过ls可以查看Ubuntu下的文件目录
在这里插入图片描述

docker exec 进入容器内部
docker exec [options] containerName|containerId command [args]

例如 docker exec da7d mkdir test即在容器中创建了一个test的文件夹,如下可以看到test文件夹已经创建了
在这里插入图片描述

docker attach 和docker exec 的区别

通过上面的例子,不难发现,使用docker attach可以直接获得一个类似终端的窗口,然后可以直接输入shell命令,而通过docker exec,要执行的命令只能在后台运行。如此,我们便可以根据自己的需求来选择使用docker attach 还是docker exec命令了。

删除容器

容器越创建越多该怎么办?删!容器的删除命令跟shell中删除文件的命令相同,只不过是在执行docker命令的时候,需要加一个docker,即是:

docker rm containerName|containerId 

注意:这个命令只能删除已经停止过的容器,这一点,可以类比成shell命令中单纯的rm只能删除文件,而不能删除文件夹。怎么删除没有停止的容器呢?两种方法:

  • 聪(sha)明(gua)方法:先把容器停掉,然后再删。
  • 最有效的方法:shell中删除一个文件夹会使用rm -r,那么docker中呢?肯定也有类似的啊,于是,他来了:添加参数
docker rm -f containerName|containerId

通过这个命令,便可以删除一个正在运行的容器啦~


删除所有已经停止的容器

docker rm $(docker ps -a -q)

我们知道,docker ps -a 是查看所有容器信息。而 docker ps –a –q 只查看所有容器的 containerId 。在 Linux 中,将命令放在 $() 中,会执行命令并返回命令的执行结果。因此 $( docker ps -a -q) 会返回所有容器的 container id ,而 docker rm 只能干掉终止的容器,而如果用 docker rm 删除正在运行的容器时,将不能删除掉。所以可以使用 docker rm $(docker ps -a -q) 来删除所有处于终止状态的容器。


思考,如何删掉所有的容器呢?

docker rm -f $(docker ps -a -q)




本文基于一个实训平台编写,侵删。
实训平台地址Educoder

猜你喜欢

转载自blog.csdn.net/weixin_43716048/article/details/111004941