在Linux中使用docker【中】(常见命令上)
- 一、Docker介绍
- 二、在Linux中使用Docker的意义
- 2.1 轻量级与资源高效
- 2.2 快速部署与版本控制
- 2.3 隔离与安全
- 2.4 简化运维
- 2.5 跨平台兼容
- 2.6 持续集成与持续部署(CI/CD)
- 三、Docker的安装
- 3.1 ubuntu下安装docker
- 3.2 ubuntu下安装nvidia-docker
- 3.3 centos下安装docker
- 3.4 centos下安装nvidia-docker
- 三、Docker常见命令
- 3.1 验证状态【version、info、hello-world】
- 3.2 查找镜像库【search】
- 3.3 下载镜像【pull】
- 3.4 创建容器【run】
- 3.5 启动、停止和重启容器【start、stop、restart】
- 3.6 列出容器【ps】
- 3.7 进入容器【attach、exec】
- 3.7.1 attach
- 3.7.2 exec
- 3.7.3 attach和exec区别
在Linux中使用docker【上】(docker、nvidia-docker安装)
在Linux中使用docker【中】(常见命令上)
在Linux中使用docker【下】(常见命令下)
一、Docker介绍
Docker是一个强大的工具神器,它使得应用程序的打包、部署和管理变得更加简单、高效和安全。无论是在开发、测试还是生产环境中,都发挥着重要的作用。
Docker是开源的应用容器引擎,它基于Go语言实现,并依赖于操作系统的机制和特性。Docker的主要目的是让开发者能够打包他们的应用及其依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,实现轻量级虚拟化。这种容器化的应用程序被称为Docker容器,它们通过Docker镜像创建,而这些镜像文件可以存放在私有仓库或共有仓库中。
Docker采用了“写时复制”(copy-on-write)模型,使得修改应用程序变得非常迅速。此外,Docker还支持面向服务的体系结构和微服务架构,提高应用程序的模块化和可维护性。
Docker由PaaS提供商dotCloud开发,作为开源项目发布。它的源代码托管在Github上,并遵从Apache2.0协议。
二、在Linux中使用Docker的意义
2.1 轻量级与资源高效
2.2 快速部署与版本控制
2.3 隔离与安全
2.4 简化运维
2.5 跨平台兼容
2.6 持续集成与持续部署(CI/CD)
三、Docker的安装
3.1 ubuntu下安装docker
3.2 ubuntu下安装nvidia-docker
3.3 centos下安装docker
3.4 centos下安装nvidia-docker
三、Docker常见命令
nvidia-docker命令,就是将docker更换为nvidia-docker
3.1 验证状态【version、info、hello-world】
验证Docker、nvidia-docker是否安装成功,可以使用以下命令:
-
docker version:
此命令会显示Docker的版本信息。如果Docker已正确安装,它会输出Docker的版本号以及其他相关信息。
sudo docker version
-
docker info:
这个命令提供了Docker系统的详细信息,包括容器、镜像、存储驱动、网络配置等。
sudo docker info
-
docker -v 或 docker --version:
这两个命令都可以用来检查Docker是否已安装,并显示Docker的版本号。
sudo docker -v
sudo docker --version
-
docker run hello-world:
这个命令会尝试从Docker Hub拉取一个名为“hello-world”的镜像,并在容器中运行它。
如果Docker已正确安装并运行,它会输出一条“Hello from Docker!”的消息。
sudo docker run hello-world
# 执行结果
Hello from Docker!
This message shows that your installation appears to be working correctly.
......
3.2 查找镜像库【search】
docker search
命令用于从 Docker Hub 查找镜像。允许根据关键字搜索镜像,并通过各种选项来过滤和格式化输出结果。
以下是一些常用的选项和说明:
-
TERM
:要搜索的镜像名称或描述中的关键字。 -
--automated
:只列出自动构建类型的镜像(已弃用)。 -
--filter
,-f
:基于给定条件过滤输出。可以使用的过滤器包括stars
(星星数),is-official
(是否官方镜像)等。 -
--format
:使用模板格式化显示输出。 -
--limit
:限制搜索结果的数量。默认值为 25。 -
--no-trunc
:禁止截断输出,显示完整的镜像描述等信息。
示例命令:
- 搜索镜像名中包含
busybox
的镜像:
sudo docker search busybox
- 搜索星数不小于 3 的
busybox
镜像,并且描述不截断:
sudo docker search --filter=stars=3 --no-trunc busybox
- 限制搜索输出个数为 5 个:
sudo docker search --limit=5 redis
- 搜索官方的
nginx
镜像:
sudo docker search nginx --filter "is-official=true"
- 搜索星数大于 50 的
nginx
镜像:
sudo docker search nginx --filter=stars=50
docker search
命令的输出将包含以下列:
-
NAME
:镜像的名称。 -
DESCRIPTION
:镜像的描述。 -
OFFICIAL
:是否官方镜像。 -
stars
:镜像的收藏数(星星数)。 -
AUTOMATED
:是否为自动构建类型的镜像(已弃用)。
3.3 下载镜像【pull】
docker pull
命令是用于从镜像仓库中拉取或更新镜像的命令。
dcoker pull
命令的基本语法是:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
这里的参数说明如下:
-
NAME
:指定要拉取的镜像的名称。 -
TAG
:指定镜像的标签。如果不写,则默认使用latest
标签,表示拉取该镜像的最新版本。 -
DIGEST
:使用镜像的摘要来指定一个具体的镜像版本。
例如,要拉取名为ubuntu
的镜像的最新版本,你可以执行:
sudo docker pull ubuntu
要拉取一个特定的标签版本,如ubuntu
的18.04
版本,你可以执行:
sudo docker pull ubuntu:18.04
拉取镜像时,Docker会检查本地是否存在该镜像及其标签,如果不存在,则会从配置的镜像仓库中下载。下载过程中,你可以看到相关的进度信息。下载完成后,该镜像就可以被用来创建和运行容器,以构建和部署应用程序。
需要注意的是,docker pull
命令默认只会拉取一个镜像。如果你想要拉取一个镜像的所有标签版本,你可以使用-a
或--all-tags
参数。例如:
sudo docker pull -a ubuntu
这将会拉取ubuntu
镜像的所有可用标签版本。
3.4 创建容器【run】
docker run
命令是 Docker 中用于创建并启动一个容器的命令。
当运行这个命令时,Docker 会做以下几件事情:
-
创建容器:基于指定的镜像(如果不存在,Docker 会尝试从配置的镜像仓库中拉取)创建一个新的容器实例。
-
分配资源:为容器分配必要的系统资源,如 CPU、内存、网络端口等。
-
执行命令:在容器内部执行指定的命令。如果不指定命令,通常会执行容器镜像中定义的默认命令。
-
提供输入输出:将容器的标准输入、输出和错误流连接到宿主机的对应流上,以便你可以与容器进行交互。
docker run
命令的基本语法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
其中:
-
OPTIONS
:用于配置容器运行时的各种选项,如-d
(后台运行)、-p
(端口映射)、-v
(卷挂载)等。 -
IMAGE
:指定要创建容器的镜像名称或ID。 -
COMMAND
:容器启动后要执行的命令。 -
ARG...
:传递给命令的参数。
以下是一些常见的 docker run
参数及其简要说明:
-
-d, --detach=false:
在后台运行容器并返回容器 ID,即分离模式运行容器。
-
-i, --interactive=false:
即使不连接容器的标准输入,也保持标准输入开启。
-
-t, --tty=false:
为容器分配一个伪终端,通常与
-i
参数一起使用。 -
–name=“”:
为容器指定一个名称。
-
–dns=[]:
设置容器的DNS服务器。
-
-u, --user=“”:
指定容器运行的用户或组。
-
-e, --env=[]:
设置环境变量。例如:
-e "DEBUG=false"
。 -
-m, --memory=“”:
设置容器的内存上限。
-
–net=“bridge”:
指定容器使用的网络模式,如
bridge
、host
、none
或自定义的网络。 -
–expose=[]:
开放一个端口或一组端口,但不映射到宿主机。
-
-p, --publish=[]:
公开容器的某个端口到宿主机,例如:
-p 8080:80
。 -
-h, --hostname=“”:
指定容器的主机名。
-
-v, --volume=[]:
给容器挂载存储卷,例如:
-v /host/dir:/container/dir
。 -
–volumes-from=[]:
从另一个容器挂载其卷。
-
–cap-add=[]:
添加Linux功能。
-
–cap-drop=[]:
移除Linux功能。
-
-w, --workdir=“”:
设置容器的工作目录。
-
–label=[]:
设置容器标签。
例如,以下命令将在后台启动一个基于 nginx
镜像的容器,名为nginxdemo
,并将容器的 80 端口映射到宿主机的 8080 端口:
sudo docker run -d --name=nginxdemo -p 8080:80 nginx
3.5 启动、停止和重启容器【start、stop、restart】
使用 docker start
、docker stop
和 docker restart
命令来启动、关闭和重启容器。
以下是这些命令的示例:
- 启动容器:
# 根据容器ID启动
sudo docker start <container_id>
# 根据容器名称启动
sudo docker start <container_name>
# 启动所有容器
sudo docker start $(docker ps -a -q)
- 关闭容器:
# 根据容器ID关闭
sudo docker stop <container_id>
# 根据容器名称关闭
sudo docker stop <container_name>
# 关闭所有容器
sudo docker stop $(docker ps -a -q)
- 重启容器:
# 根据容器ID重启
sudo docker restart <container_id>
# 根据容器ID,等待10秒后重启
sudo docker restart -t 10 <container_id>
# 根据容器名称重启
sudo docker restart <container_name>
# 根据容器名称,等待10秒后重启
sudo docker restart -t 10 <container_name>
# 重启所有容器
sudo docker restart $(docker ps -a -q)
3.6 列出容器【ps】
docker ps
命令用于列出当前正在运行的 Docker 容器。这个命令有一些可选的参数,用于筛选和格式化输出。
以下是一些 docker ps
命令的参数示例:
- 列出所有容器(包括未运行的):
sudo docker ps -a
- 根据条件筛选容器:
# 筛选名称为 mycontainer 的容器
sudo docker ps -f "name=mycontainer"
# 筛选处于特定状态的容器(例如:running, stopped, exited 等)
sudo docker ps -f status=<status>
# 使用正则表达式列出名称符合特定模式的容器
sudo docker ps -f name=<pattern>
- 格式化输出:
sudo docker ps --format "{{.ID}}: {{.Image}}: {{.Status}}"
- 显示最近创建的 N 个容器:
sudo docker ps -n 3
- 显示容器大小:
sudo docker ps -s
- 不截断输出:
sudo docker ps --no-trunc
3.7 进入容器【attach、exec】
3.7.1 attach
docker attach
命令用于将当前的终端连接到正在运行的Docker容器的标准输入、输出和错误流上。
使用该命令,可以在终端中查看容器的输出和执行命令。此命令的基本语法如下:
docker attach [OPTIONS] CONTAINER
其中,OPTIONS
是可选的选项,可以用于指定命令的行为。CONTAINER
是要连接到的Docker容器的名称或ID。
下面是一些常用的选项:
-
--no-stdin
:不连接标准输入流 -
--sig-proxy
:将信号传递给容器
**示例1:**连接到一个正在运行的容器
假设有一个名为web
的容器正在运行,连接到它并查看它的输出。可以使用以下命令:
sudo docker attach web
**示例2:**在连接到容器后执行一个命令
在连接到容器后执行一个命令。可以使用以下命令:
sudo docker attach -t CONTAINER COMMAND
其中,-t
选项用于为容器分配一个伪终端。
例如,以下命令将在连接到web
容器后执行一个ls
命令:
sudo docker attach -t web ls
**示例3:**从容器中分离
从连接的容器中分离,可以使用命令exit
,也可以使用键盘快捷键Ctrl-p
和Ctrl-q
。
3.7.2 exec
docker exec
命令用于在正在运行的Docker容器中执行命令。
使用该命令,可以在不进入容器的情况下,在容器内部执行一些命令。此命令的基本语法如下:
sudo docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
其中,OPTIONS
是可选的选项,可以用于指定命令的行为。CONTAINER
是要执行命令的Docker容器的名称或ID。COMMAND
是要在容器中执行的命令,ARG
是传递给该命令的参数。
下面是一些常用的选项:
-
-i
:以交互模式运行容器 -
-t
:为容器分配一个伪终端 -
--user
:指定要在容器中运行命令的用户名或UID -
-d
:在后台运行容器并输出容器ID -
--env
:指定环境变量
**示例1:**在容器中运行一个命令
假设我们有一个名为web
的容器正在运行,我们想在其中运行一个ls
命令以列出容器中的文件和目录。可以使用以下命令:
sudo docker exec web ls
**示例2:**在容器中运行一个交互式命令
在容器中运行一个交互式命令,例如一个shell。可以使用-i
和-t
选项来启动一个交互式会话。
例如,以下命令将在web
容器中启动一个bash shell:【最常用的容器进入命令之一】
sudo docker exec -it web /bin/bash
**示例3:**在容器中运行一个命令并指定用户
假设我们需要在web
容器中运行一个命令,但需要使用特定的用户身份运行该命令。可以使用--user
选项来指定要使用的用户。
例如,以下命令将在web
容器中以www-data
用户身份运行ls
命令:
sudo docker exec --user www-data web ls
3.7.3 attach和exec区别
- 使用
attach
进入容器,不会启动新的终端, 退出容器时,会导致容器的停止。 - 使用
exec
进入容器开启一个新的bash终端,退出此bash终端时,不会导致容器停止。
(未完待续…)
may the odds be ever in your favor ~