Docker基本用法和容器管理

Docker

Docker 是一个基于 LXC 技术构建的容器引擎,基于 Go 语言开发,遵循 Apache2.0 协议开源。Docker 的发展得益于为使用者提供了更好的容器操作接口。包括一系列的容器,镜像,网络等管理工具,可以让用户简单的创建和使用容器。

Docker基本用法

镜像

Docker 的镜像概念类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。

镜像可以基于 DockerFile 构建,DockerFile 是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。

用户可以通过编写 DockerFile 创建新的镜像,也可以直接从 Docker 的官方仓库 Docker Hub 上下载镜像使用。

容器

Docker 容器是由 Docker 镜像创建的运行实例。Docker 容器类似虚拟机,可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,但隔离的效果比不上虚拟机。容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。

仓库

Docker 仓库相当于一个 GitHub 上的代码库。

Docker 仓库是用来包含镜像的位置,仓库支持的操作类似 Git,创建了新的镜像后,我们可以 Push 提交到仓库,也可以从指定仓库 Pull 拉取镜像到本地。

设置存储库

首先更新 apt 软件包数据库,以确保软件包列表是最新的。所有的命令均在终端 Terminal 中执行:

sudo apt-get update

安装一些软件包,以允许 apt 通过 HTTPS 使用存储库:

sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

首先,我们添加阿里云提供的镜像源以便于加快国内安装速度,先添加相应的密钥:

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

再添加相应源的信息:

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

安装docker-engine

在本地使用以下命令安装:

# 更新 apt 索引库
sudo apt-get update
# 安装 docker-ce
sudo apt-get install docker-ce

在安装成功后,Docker 的守护进程自动启动,不需要手动启动服务。此时,我们可以查看其版本信息,使用如下命令:

docker version

如果要让用户可以直接执行 Docker 命令而不必在每次执行时都输入 sudo 来获得权限,我们可以将要执行 Docker 命令的用户添加到用户组 Docker 中。该用户组会在安装后自动创建,我们只需执行添加用户到 Docker 用户组的操作:

sudo gpasswd -a XXX docker

添加用户到一个用户组中的方式有很多,例如我们还可以使用如下命令:

sudo usermod -aG docker XXX

在添加成功后,我们还需要重新打开一个 shell 修改才能生效。这时可以尝试打开一个新的终端或者使用如下命令:

sudo su XXX

其中XXX均代表你的用户名。

启动Docker服务

国内拉取 Docker Hub 的速度非常慢,好在阿里云提供了镜像加速器。

首先,我们需要编辑 /etc/docker/daemon.json 文件:

sudo vim /etc/docker/daemon.json

然后加入如下内容:

{
  "registry-mirrors": ["https://n6syp70m.mirror.aliyuncs.com"]
}

修改之后,需要重启 Docker 服务,让修改生效。使用如下命令:

sudo service docker restart

在安装之后,我们可以通过运行一个 hello-world 的镜像来验证 Docker CE 是否被正确的安装,使用如下命令:

docker run hello-world

该命令会下载一个名为 hello-world 的镜像并运行于一个容器中。当这个容器运行时,会输出一些信息并退出

Docker容器管理

Docker命令

查看系统的一些相关信息:

docker system info

# 或者使用命令
docker info

我们可以直接通过 help 或者使用 man 手册的方式查看相关命令的详细说明:

docker --help

Mangement Commands

经常使用的容器的一些相关命令:

# 使用 Commands 分组中的命令创建一个新的容器
docker create
# 使用 Management Commands 分组中的命令创建一个新的容器
docker container create

# 显示容器列表
docker ps
docker container ls

# 在一个新的容器中运行一个命令
docker run
docker container run

对于新的命令而言相比于旧命令明显更具有可读性。并且在实验环境中的 Docker 版本以及最新版本中两者都是有效的命令,所以在这里我们将一些常用的命令,及其对应的 Management Commands 命令都列举出来:在这里插入图片描述

命令选项

命令的选项有以下几种:长选项、短选项、复合选项、无选项。

我们以 docker container ls,即 docker ps,它的作用是查看容器。

可以先输入以下命令,获得提示信息:

docker container ls --help

短选项是以一个 - 开头,其后紧跟上一个字母或数字,比如 -a。长选项是以两个 - 开头,其后跟一串单词,比如 --all。

# 使用短选项
docker container ls -a
# 使用长选项
docker container ls --all

当我们要使用多个短选项时,比如使用 -a 和 -q。从图中可以看到,这个选项只会显示容器的 ID,原本命令应该是 docker container ls -a -q,这时我们可以简写为 docker container ls -aq,这里的选项 -aq 就是复合选项,它是 -a 和 -q 的复合。

对于 docker container ls 这个命令,我们还可以不使用选项。没有选项时,输出正在运行的容器。

创建容器

严格意义上来讲,docker run 命令的作用并不是创建一个容器,而是在一个新的容器中运行一个命令。而用于创建一个新容器的命令为:

# Management Commands
docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]

# 旧的命令格式如下:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

该命令会在指定的镜像 IMAGE 上创建一个可写容器层,并 准备 运行指定的命令。需要着重强调的是,这里是准备运行,并不是立即运行。即该命令只创建容器,并不会运行容器。

一些常见的配置项如下所示:

  • –name指定一个容器名称,未指定时,会随机产生一个名字
  • –hostname设置容器的主机名
  • –mac-address设置MAC地址
  • –ulimit设置ulimit 选项

启动容器

容器的启动命令为:

# Management Commands
docker container start [OPTIONS] CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker start [OPTIONS] CONTAINER [CONTAINER...]

此时处于 Created 状态,需要使用如下命令启动它:

docker container start [CONTAINER...]

停止容器

停止容器可以使用如下命令:

# Management Commands
docker container stop CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker stop CONTAINER [CONTAINER...]

这里我们先同时按下 ctrl 和 p 键,再同时按 ctrl 和 q 键,让这个容器进入到后台运行。

此时我们使用 docker container ls -a 命令查看容器的状态,从下图可以看到,容器正在运行。输入 docker container stop shiyanlou01,docker 返回了容器的 UUID,再次使用 docker container ls -a 命令查看容器的状态,发现容器已经停止运行了。

重启容器

重启容器可以使用如下命令:

# Management Commands
docker container restart CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker restart CONTAINER [CONTAINER...]

使用 docker container ls -a 命令查看容器,容器又处于运行状态了。

暂停进程

暂停容器中进程的命令格式如下:

# Management Commands
docker container pause CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker pause [OPTIONS] CONTAINER [CONTAINER...]

容器被暂停后,此时处于 Paused 状态。

恢复进程

恢复容器中进程的命令格式如下:

# Management Commands
docker container unpause CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker unpause [OPTIONS] CONTAINER [CONTAINER...]

容器恢复后,此时处于运行状态。

查看容器列表

查看容器列表可以使用如下命令:

# Management Commands
docker container ls [OPTIONS]

# 旧的命令格式如下:
docker ps [OPTIONS]

在使用命令时,我们可以使用一些可选的配置项 [OPTIONS]。

  • -a 显示所有的容器。
  • -q 仅显示 ID。
  • -s 显示总的文件大小。
    默认情况下,直接使用该命令仅显示正在运行的容器:
docker container ls

我们可以使用 -a 参数,来显示所有的容器,并加上 -s 选项,显示大小,命令如下:

docker container ls -a -s

连接正在运行中的容器

上述操作我们启动的容器运行于后台,所以,我们需要使用 attach 操作将本地标准输入输出流连接到一个运行中的容器,命令格式为:

# Management Commands
docker container attach [OPTIONS] CONTAINER

# 旧的命令格式如下:
docker attach [OPTIONS] CONTAINER

连接到容器后,查看相应的主机名(输入 hostname 命令)和 Mac 地址(输入 ifconfig 命令),可以判断我们连接到了刚刚创建的容器。

如果提示无 ifconfig 命令,可以在容器中执行 apt update && apt install net-tools 安装。

查看容器中的元数据

查看容器的详细信息(即元数据)可以使用如下命令:

# Management Commands
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker inspect [OPTIONS] CONTAINER [CONTAINER...]

容器日志管理

获取容器的输出信息可以使用如下命令:

# Management Commands
docker container logs [OPTIONS] CONTAINER

# 旧的命令格式如下:
docker logs [OPTIONS] CONTAINER

常用的配置项有:

  • -t 或 --timestamps 显示时间戳
  • -f 实时输出,类似于 tail -f

除了获取日志之外,还可以显示运行中的容器的进程信息,命令格式如下:

# Management Commands
docker container top CONTAINER

# 旧的命令格式如下:
docker top CONTAINER

查看相对于镜像的文件系统来说,容器中做了哪些改变,可以使用如下命令:

# Management Commands
docker container diff CONTAINER

# 旧的命令格式如下:
docker diff CONTAINER

除了使用 docker container run 执行命令之外,我们还可以在一个运行中的容器中执行命令,使用如下格式:

# Management Commands
docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]

# 旧的命令格式如下:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

删除容器

删除容器的命令:

# Management Commands
docker container rm [OPTIONS] CONTAINER [CONTAINER...]

# 旧的命令格式如下:
docker rm [OPTIONS] CONTAINER [CONTAINER...]

需要注意的是,在删除容器后,在容器中进行的操作并不会持久化到镜像中。

如果想删除之前创建的所有容器,可以使用以下命令:

docker container rm -f $(docker container ls -aq)

docker container ls -aq 会输出所有容器的 UUID ,rm 命令可以根据 UUID 去删除容器。这里用来选项 -f 是因为还有在运行中的容器,所以需要强制删除。ls 列出的 UUID 传递给 rm 进行删除。

如果 docker 版本为 1.13 及以上版本,还可以更方便的 prune。

docker container prune [OPTIONS]

常用的配置项有:

  • -f 或 --force 跳过警告提示
  • –filter 执行过滤删除
    如直接删除所有停止的容器:
docker container prune -f
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡心curry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值