Docker 入门

Docker 的安装

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。下面的介绍都针对社区版。
Docker CE 的安装请参考官方文档。

安装完成后,运行下面的命令,验证是否安装成功。

$ docker version
# 或者
$ docker info

Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组 ( 官方文档 )

$ sudo usermod -aG docker $USER

Docker 是服务器----客户端架构。命令行运行docker命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动(官方文档

# service 命令的用法
$ sudo service docker start

# systemctl 命令的用法
$ sudo systemctl start docker

Docker三大核心概念

  • 镜像 (Image) :
  • 容器 (Container) :
  • 仓库 (Repository) :

镜像 (Image)

镜像相当于是一个特殊的文件系统,是只读的,包含需要运行的文件(提供容器运行时所需的程序、库、资源、配置等文件,还包含了一些为运行时准备的一些配置参数)。镜像用来创建容器,一个镜像可以运行多个容器。镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。

Image 文件是通用的,一台机器的 Image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 Image 文件,而不是自己制作。即使要定制,也应该基于别人的 Image 文件进行加工,而不是从零开始制作。

为了方便共享, Image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 Image 仓库。此外,出售自己制作的 Image 文件也是可以的。

容器(Container)

容器是基于镜像启动起来的,容器可以运行一个或多个进程,镜像是Docker生命周期中的构建或者打包阶段,容器则是启动或执行阶段。

镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止和删除等。

仓库(Repository)

仓库是集中存放镜像的地方,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。

仓库分为两种,公有参考,和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下周,国内的docker pool,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务。

Hello World 示例

首先,运行下面的命令,将 image 文件从官方镜像仓库抓取到本地。

$ docker image pull library/hello-world

上面代码中,docker image pull 是抓取 image 文件的命令。library/hello-world 是 image 文件在仓库里面的位置,其中library是 image 文件所在的组,hello-world 是 image 文件的名字。

由于 Docker 官方提供的 image 文件,都放在library组里面,所以它的是默认组,可以省略。因此,上面的命令可以写成下面这样。

$ docker image pull hello-world

抓取成功以后,就可以在本机看到这个 image 文件了。

$ docker image ls

现在,运行这个 image 文件。

$ docker container run hello-world

docker container run 命令会从 image 文件,生成一个正在运行的容器实例。

注意,docker container run 命令具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的 docker image pull 命令并不是必需的步骤。

如果运行成功,你会在屏幕上看到如下输出:

$ docker container run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

输出这段提示以后,hello world就会停止运行,容器自动终止。

容器文件

image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。

# 列出本机正在运行的容器
$ docker container ls

# 列出本机所有容器,包括终止运行的容器
$ docker container ls -a

终止运行的容器文件,依然会占据硬盘空间,可以使用 docker container rm 命令删除。

$ docker container rm [containerID]

运行上面的命令之后,再使用 docker container ls -a 命令,就会发现被删除的容器文件已经消失了。

Docker常用命令

镜像相关命令

docker images #查看本地镜像。包含多个options:
  -a #列出本地所有的镜像(镜像分层,含中间映像层)。
  -q #只显示镜像id(-qa组合options)。
  –digests #现实摘要信息。
  – no-trunc #显示完整的镜像信息(–digests --no-trunc组合options)。

docker search #镜像名,options:
  –no-trunc #显示完整的镜像描述。
  -s #列出收藏数不小于指定值的镜像。
  –automated #只列出automated build类型的镜像。

docker pull #镜像名(镜像名可以:版本号,不指定版本号默认latest)

docker rmi #镜像名id,删除镜像。options:
  -f #删除单个镜像id。
  #空格分割,删除多个镜像。
  -f $(docker images -q) #删除全部镜像。
  
docker commit
docker push

容器相关命令

docker run 镜像id #新建并启动容器。options:
	–name #为容器指定名字。
	-d #后台运行容器 #并返回容器id #即启动守护式容器。
	-i #以交互模式运行容器 #通常与-t同时使用。
	-t #为容器重新分配一个伪输入终端。
	-P #随机端口映射。
	-p #指定端口映射 #有以下四种格式:
		ip:hostPort:containerPort
		ip::containerPort
		hostPort:containerPort
		containerPort

docker ps #列出当前所有正在运行的容器。options:
	-a #列出所有正在运行的容器+历史上运行过的。
	-l #显示最近创建的容器。
	-n #显示最近n个创建的容器。
	-q #静默模式 #只显示容器编号(-lq可组合使用)。
	–no-trunc #不截断输出。

	exit #容器停止退出。
	ctrl+P+Q #容器不停止退出。

docker start 容器id或容器名 #启动容器。

docker restart 容器id #重启容器。

docker stop 容器id或容器名 #停止容器。

docker kill 容器id或容器名 #强制停止容器。

docker rm 容器id #删除已经停止的容器。options:
	-f $(docker ps -a -q) #删除全部。
       docker ps -a -q | xargs docker rm #直接全部删除 

docker image prune -a -f #删除所有不用的镜像

参考来源:
阮一峰的网络日志 http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html

posted @ 2022-06-17 16:43  Broadm  阅读(65)  评论(0编辑  收藏  举报