<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p></p>
讯享网
Reference:
- Docker 教程
- Docker 命令大全
- docker docs-这个比较全,也更容易理解点
- docker对已经启动的容器添加目录映射(挂载目录)
相关文章:
- 错误日志:Got permission denied while trying to connect to the Docker daemon socket
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
- 快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
- 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
- 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
- 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
- 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
- 响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
- 在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
鉴于教程中的,使用官方安装脚本自动安装有问题,可以使用链接中的手动安装。
为了能在非模式下使用, 需要将当前用户加入。
sudo usermod -aG docker $USER
为了使上述变更生效,请先 Logout,再 Login
Docker 允许你在容器内运行应用程序, 使用 命令来在容器内运行一个应用程序。
输出 Hello world:
docker run ubuntu:15.10 /bin/echo “Hello world”

各个参数解析:
- :Docker 的二进制执行文件;
- :与前面的 docker 组合来运行一个容器。这里的 docker run 表示创建一个新的容器并运行一个命令;
- 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
- :指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像(从图中可以看见,真的下载了);
- :在启动的容器里执行的命令。
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。
3.1.1 运行交互式的容器
我们通过 docker 的两个参数 ,让 docker 运行的容器实现"对话"的能力:
docker run -i -t ubuntu:15.10 /bin/bash

各参数解析:
- :在新容器内指定一个伪终端或终端。
- :允许你对容器内的标准输入 (STDIN) 进行交互。
以上命令完整的意思可以解释为:使用镜像 ubuntu:15.10 以交互模式启动一个容器,在容器内执行 /bin/bash/ 命令。(这里仅输入 bash 替代 /bin/bash/;上一节仅输入 echo 替代 /bin/echo 能达到相同效果。这里意思也就是,先打开 image 为 ubuntu:15.10 的镜像,创建一个 container,为了在这个终端持续使用它,需要使用该 container 的 bash 环境)
注意第三行 ,此时我们已进入一个 ubuntu15.10 系统的容器。
我们尝试在容器中运行命令 和 分别查看当前系统的版本信息和当前目录下的文件列表:

我们可以通过运行 命令或者使用 (会自动变为 exit 命令) 来退出容器。

第三行表明我们已经退出了当前的容器,返回到当前的主机中。
3.1.2 启动容器(后台模式)
使用以下命令创建一个以进程方式运行的容器:
docker run -d ubuntu:15.10 /bin/sh -c “while true; do echo hello world; sleep 1; done”

各参数解析:
- :后台运行容器,并返回容器ID。
在输出中,我们没有看到期望的 “hello world”,而是一串长字符:d49c4c0c49e0431a4ad58f910f2be07ad9bbaa86b5fa5f0b345a6fbe0ce020c6
这个长字符串叫做,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。
首先,我们需要确认容器有在运行,可以通过 来查看:
docker ps

各参数解析:
docker ps [OPTIONS]
- :列出容器。
输出详情介绍:
- :容器 ID;
- :使用的镜像;
- :启动容器时运行的命令;
- :容器的创建时间;
- :容器状态;
状态有 种:- created(已创建)
- restarting(重启中)
- running 或 Up(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
- :容器的端口信息和使用的连接类型(tcpߜxff09;;
- :自动分配的容器名称。(系统自动分配,名字奇奇怪怪的)
docker logs [OPTIONS] CONTAINER
- :获取容器的日志;
- : 仅列出最新 N 条容器日志。

3.1.3 停止容器
我们使用 命令来停止容器,并通过 查看,容器已经停止工作:

3.1.4 Docker start/stop/restart 命令
- :启动一个或多个已经被停止的容器
docker start [OPTIONS] CONTAINER [CONTAINER…]
启动已被停止的容器 myrunoob:
docker start myrunoob
- :停止一个运行中的容器
docker stop [OPTIONS] CONTAINER [CONTAINER…]
停止运行中的容器myrunoob:
docker stop myrunoob
- :重启容器
docker restart [OPTIONS] CONTAINER [CONTAINER…]
重启容器myrunoob:

docker restart myrunoob
3.2.1 Docker 客户端
docker 客户端非常简单,我们可以直接输入 命令来查看到 Docker 客户端的所有命令选项。(不用使用 -h 就可以显示命令了)

可以通过命令 更深入的了解指定的 Docker 命令使用方法。
例如我们要查看 指令的具体使用方法:
docker stats --help

3.2.2 容器使用
3.2.2.1 获取镜像
如果我们本地没有 ubuntu 镜像,我们可以使用 命令来载入 ubuntu 镜像:
讯享网

各参数解析:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
- :从镜像仓库中拉取或者更新指定镜像。
3.2.2.2 启动容器
以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器(与上一章一样):

参数说明:
- :交互式操作。
- :终端。
- :ubuntu 镜像。
- :放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit:
讯享网
3.2.2.3 启动已停止运行的容器
查看所有的容器命令如下:

参数说明:
- :显示所有的容器,包括未运行的。
使用 启动一个已停止的容器:
讯享网

3.2.2.4 后台运行
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以通过 -d 指定容器的运行模式。
注: 加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 。
3.2.2.5 停止一个容器
停止容器的命令如下:
讯享网
停止的容器可以通过 重启:
3.2.2.6 进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
- :推荐大家使用 命令,因为此命令会退出容器终端,但不会导致容器的停止。(意思应该是这个终端退出的时候,使用 ,该容器就停止了,而 不会)
attach 命令
下面演示了使用 命令:
讯享网
注意: 如果从这个容器退出,会导致容器的停止。
参数说明:
- :连接到正在运行中的容器。
exec 命令
下面演示了使用 命令:
注意: 如果从这个容器退出,容器不会停止,这就是为什么推荐大家使用 的原因。
更多参数说明请使用 命令查看。
参数说明:
- :在运行的容器中执行命令。
3.2.2.7 导出和导入容器
导出容器
如果要导出本地某个容器,可以使用 命令。
讯享网
导出容器 c393a 快照到本地文件 ubuntu.tar。
导入容器快照
可以使用 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 ubuntu:v1:

此外,也可以通过指定 URL 或者某个目录来导入,例如:
讯享网
删除容器
删除容器使用 命令:
下面的命令可以清理掉所有处于终止状态的容器。
讯享网
3.2.3 运行一个 web 应用
前面我们运行的容器并没有一些什么特别的用处。接下来让我们尝试使用 docker 构建一个 web 应用程序。我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。

参数说明:
- -d: 让容器在后台运行。
- -P: 将容器内部使用的网络端口随机映射到我们使用的主机上。
3.2.4 查看 WEB 应用容器
使用 来查看我们正在运行的容器:
这里多了端口信息。
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。这时我们可以通过浏览器访问WEB应用:

我们也可以通过 参数来设置不一样的端口:
讯享网
查看正在运行的容器:
容器内部的 5000 端口映射到我们本地主机的 5000 端口上。
3.2.5 网络端口的快捷方式
通过 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 ,使用 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。
上面我们创建的 web 应用容器 ID 为 bf08b7f2cd89 名字为 wizardly_chandrasekhar。
可以使用 或 来查看容器端口的映射情况。
5000/tcp -> 0.0.0.0:5000
5000/tcp -> :::5000
讯享网
5000/tcp -> 0.0.0.0:32768
5000/tcp -> :::32768

3.2.6 查看 WEB 应用程序日志
docker logs [ID或者名字] 可以查看容器内部的标准输出。

-f: 让 像使用 一样来输出容器内部的标准输出。
从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。(我这没有日志信息,但是原文中的有,如下:)

3.2.7 查看WEB应用程序容器的进程
我们还可以使用 docker top 来查看容器内部运行的进程:

3.2.8 检查 WEB 应用程序
使用 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

3.2.9 停止 WEB 应用容器
3.2.10 重启WEB应用容器
已经停止的容器,我们可以使用命令 docker start 来启动。(docker start 和 docker restart 有什么区别?----restart功能更多,容器运不运行都能使用)
3.2.11 移除WEB应用容器
我们可以使用 命令来删除不需要的容器:
删除容器时,容器必须是停止状态,否则会报如下错误:
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
下面我们来学习:
- 1、管理和使用本地 Docker 主机镜像
- 2、创建镜像
我们可以使用 来列出本地主机上的镜像。
各个选项说明:
- :表示镜像的仓库源;
- :镜像的标签;
- :镜像 ID;
- :镜像创建时间;
- :镜像大小。
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 来定义不同的镜像。
所以,我们如果要使用版本为 15.10 的 ubuntu 系统镜像来运行容器时,命令如下:
sudo docker run -t -i ubuntu:15.10 /bin/bash
参数说明:
- :交互式操作。
- :终端。
- :这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
- :放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
如果要使用版本为 14.04 的 ubuntu 系统镜像来运行容器时,命令如下:(这句话说的比较好,即使用镜像运行容器)
sudo docker run -t -i ubuntu:14.04 /bin/bash
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。
当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 命令来下载它。
下载完成后,我们可以直接使用这个镜像来运行容器。
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为:https://hub.docker.com/
我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

docker search httpd

各个选项说明:
- :表示镜像的仓库源
- :镜像的描述
- :是否 docker 官方发布
- :类似 Github 里面的 star,表示点赞、喜欢的意思
- :自动构建
我们决定使用上图中的 httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。(这个和前面讲的有点重合,就是分两步走,先下载,再运行)
docker pull httpd
下载完成后,我们就可以使用这个镜像了。
docker run httpd

镜像删除使用 命令,比如我们删除 hello-world 镜像:
docker rmi hello-world
有可能报以下错误:
可以看到在下图中的container中,还有这一项:
可以考虑先删除这个容器,再删除镜像:
或者直接使用:
sudo docker rmi -f ubuntu:15.10

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
- 1、从已经创建的容器中更新镜像,并且提交这个镜像
- 2、使用 Dockerfile 指令来创建一个新的镜像
4.6.1 更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器。
在运行的容器内使用 命令进行更新。
在完成操作之后,输入 命令来退出这个容器。
此时 ID 为 0b09b46d8320 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。

各个选项说明:
- -m: 提交的描述信息
- -a: 指定镜像作者
- 9cddb: 容器 ID
- yin/ubuntu:v2: 指定要创建的目标镜像名
我们可以使用 命令来查看我们的新镜像 yin/ubuntu:v2:
使用我们的新镜像 yin/ubuntu 来启动一个容器
4.6.2 构建镜像
我们使用命令 , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条 ,指定使用哪个镜像源。
指令告诉 docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 命令来构建一个镜像。

参数说明:
- -t:指定要创建的目标镜像名
- .:Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
使用 查看创建的镜像已经在列表中存在,镜像ID为33263c26f7fc:

我们可以使用新的镜像来创建容器:
从上面看到新镜像已经包含我们创建的用户 runoob。
4.6.3 设置镜像标签
我们可以使用 命令,为镜像添加一个新的标签。
sudo docker tag 33263c26f7fc runoob/centos:dev
镜像ID,这里是 33263c26f7fc,用户名称、镜像源名(repository name)和新的标签名(tag)。
使用 命令可以看到,ID为33263c26f7fc的镜像多了一个标签。

是集中存放镜像的地方。以下介绍一下 Docker Hub。当然不止 docker hub,只是远程的服务商不一样,操作都是一样的。
目前 Docker 官方维护了一个公共仓库 Docker Hub。
大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
5.1.1 注册
在 https://hub.docker.com 免费注册一个 Docker 账号。
5.1.2 登录和退出
- 登录:
登录需要输入用户名和密码,登录成功后,我们就可以从 docker hub 上拉取自己账号下的全部镜像。docker login
- 退出:
退出 docker hub 可以使用以下命令:docker logout
5.1.3 拉取镜像
docker search ubuntu
使用 docker pull 将官方 ubuntu 镜像下载到本地:
docker pull ubuntu

5.1.4 推送镜像
用户登录后,可以通过 命令将自己的镜像推送到 Docker Hub。
以下命令中的 请替换为你的 Docker 账号用户名。
是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
这里仅讲解如何运行 Dockerfile 文件来定制一个镜像,具体 Dockerfile 文件内指令详解,将在下一节中介绍,这里你只要知道构建的流程即可。
- 下面以定制一个 nginx 镜像(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件)
在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:讯享网

- FROM 和 RUN 指令的作用
FROM: 定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。RUN: 用于执行后面跟着的命令行命令。有以下俩种格式:
shell 格式:
exec 格式:
讯享网
注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:
以上执行会创建 3 层镜像。可简化为以下格式:
讯享网
docker run:创建一个新的容器并运行一个命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
OPTIONS说明:
- 后台运行容器,并返回容器ID;
- 将一个 host 设备添加给 container;
- 以交互模式运行容器,通常与 -t 同时使用;
- 赋一个名字给 container;
- 添加一个网络给 container;
Docker 有以下 种网络模式:- host 模式;
- none 模式;
- bridge 模式;
- container 模式。
- 指定端口映射,格式为:主机(宿主)端口:容器端口;
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
- 权限全开,使用该参数,container 内的 root 拥有真正的 root 权限;否则,container 内的 root 只是外部的一个普通用户权限。但这样不利于宿主机安全;
- 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- 绑定挂载卷(Bind mount a volume),即挂载宿主机的一个目录;
譬如我要启动一个 centos 容器,宿主机的 /test 目录挂载到容器的 /soft 目录,可通过以下方式指定:docker run -it -v /test:/soft centos /bin/bash



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/179589.html