docker的基本用法

Docker内容器镜像站点https://hub.docker.com

docker架构:

Docker的基本架构由3个主要部分组成:

1.Docker Host 

2. Docker Client 

3. Registry

Docker使用客户端 - 服务器架构。守护程序docker daemon 负责构建,上传和运行您的Docker容器。

Docker客户端和守护程序可以在同一系统上运行,也可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序使用REST API,通过UNIX套接字或网络接口进行通信。

Docker主机

Docker主机运行docker daemon。Docker守护程序侦听Docker请求。

Docker请求可以是“docker run”,“docker build”,任何命令。

它管理docker对象,如镜像,容器,网络和卷。

Docker客户端

Docker Client用于触发Docker命令。当我们发送任何命令(docker build,docker run等)时,docker客户端会将这些命令结束到Docker守护进程,这将进一步处理它们。

注意:Docker客户端可以与多个守护程序通信。

Docker仓库

Registry是一个无状态,高度可扩展的服务器端应用程序,可存储并允许您分发Docker镜像。您可以创建自己的镜像,也可以使用公共仓库,即Docker Hub和Docker Cloud。Docker配置为默认在Docker Hub上查找镜像。

我们实际上可以创建自己的仓库。

因此,当我们运行命令docker pull或docker run时,将从配置的仓库中提取所需的映像。使用docker push命令时,映像将被推送到配置的仓库。

Docker对象

Docker镜像,容器,网络,卷,插件等是Docker对象。

在Dockerland,有图像,有容器。这两者密切相关,但截然不同。但这一切都始于Dockerfile。

一个Dockerfile是您创建镜像时,你建立的一个文件。它包含一堆指令,告知Docker如何构建Docker镜像。

你可以把它与烹饪联系起来。在烹饪中你有食谱。通过配方,您可以了解必须采取的所有步骤,以便生成您想要烹饪的任何内容。烹饪行为正在建立食谱。

Dockerfile是构建Docker镜像的配方或蓝图,运行单独的构建命令的行为会从配方生成Docker镜像。

- Docker Images

一个镜像是一个惰性的,不可变的文件,它本质上是一个容器的快照。它只是一个模板,其中包含有关创建Docker容器的说明。

镜像存储在Docker仓库中,例如registry.hub.docker.com。因为它们可能变得非常大,所以镜像被设计为由其他镜像的层组成,允许在通过网络传输图像时发送最少量的数据。

- Docker容器

要使用编程比喻,如果镜像是类,则容器是类的实例 - 运行时的对象。它们是运行应用程序的环境的轻量级和便携式封装。

您可以使用Docker API或CLI创建,启动,停止,移动或删除容器。您可以将容器连接到一个或多个网络,将存储连接到它,甚至可以根据其当前状态创建新映像。

Docker镜像仓库

镜像和容器

docker 镜像是一个只读的 docker 容器模板,含有启动 docker 容器所需的文件系统结构及其内容,因此是启动一个 docker 容器的基础。docker 镜像的文件内容以及一些运行 docker 容器的配置文件组成了 docker 容器的静态文件系统运行环境:rootfs。可以这么理解,docker 镜像是 docker 容器的静态视角,docker 容器是 docker 镜像的运行状态。我们可以通过下图来理解 docker daemon、docker 镜像以及 docker 容器三者的关系(此图来自互联网):

从上图中我们可以看到,当由 ubuntu:14.04 镜像启动容器时,ubuntu:14.04 镜像的镜像层内容将作为容器的 rootfs;而 ubuntu:14.04 镜像的 json 文件,会由 docker daemon 解析,并提取出其中的容器执行入口 CMD 信息,以及容器进程的环境变量 ENV 信息,最终初始化容器进程。当然,容器进程的执行入口来源于镜像提供的 rootfs。

rootfs

rootfs 是 docker 容器在启动时内部进程可见的文件系统,即 docker 容器的根目录。rootfs 通常包含一个操作系统运行所需的文件系统,例如可能包含典型的类 Unix 操作系统中的目录系统,如 /dev、/proc、/bin、/etc、/lib、/usr、/tmp 及运行 docker 容器所需的配置文件、工具等。

在传统的 Linux 操作系统内核启动时,首先挂载一个只读的 rootfs,当系统检测其完整性之后,再将其切换为读写模式。而在 docker 架构中,当 docker daemon 为 docker 容器挂载 rootfs 时,沿用了 Linux 内核启动时的做法,即将 rootfs 设为只读模式。在挂载完毕之后,利用联合挂载(union mount)技术在已有的只读 rootfs 上再挂载一个读写层。这样,可读写的层处于 docker 容器文件系统的最顶层,其下可能联合挂载了多个只读的层,只有在 docker 容器运行过程中文件系统发生变化时,才会把变化的文件内容写到可读写层,并隐藏只读层中的旧版本文件。

Docker 镜像的主要特点

为了更好的理解 docker 镜像的结构,下面介绍一下 docker 镜像设计上的关键技术。

分层

docker 镜像是采用分层的方式构建的,每个镜像都由一系列的 "镜像层" 组成。分层结构是 docker 镜像如此轻量的重要原因。当需要修改容器镜像内的某个文件时,只对处于最上方的读写层进行变动,不覆写下层已有文件系统的内容,已有文件在只读层中的原始版本仍然存在,但会被读写层中的新版本所隐藏。当使用 docker commit 提交这个修改过的容器文件系统为一个新的镜像时,保存的内容仅为最上层读写文件系统中被更新过的文件。分层达到了在不的容器同镜像之间共享镜像层的效果。

写时复制

docker 镜像使用了写时复制(copy-on-write)的策略,在多个容器之间共享镜像,每个容器在启动的时候并不需要单独复制一份镜像文件,而是将所有镜像层以只读的方式挂载到一个挂载点,再在上面覆盖一个可读写的容器层。在未更改文件内容时,所有容器共享同一份数据,只有在 docker 容器运行过程中文件系统发生变化时,才会把变化的文件内容写到可读写层,并隐藏只读层中的老版本文件。写时复制配合分层机制减少了镜像对磁盘空间的占用和容器启动时间。

内容寻址

在 docker 1.10 版本后,docker 镜像改动较大,其中最重要的特性便是引入了内容寻址存储(content-addressable storage) 的机制,根据文件的内容来索引镜像和镜像层。与之前版本对每个镜像层随机生成一个 UUID 不同,新模型对镜像层的内容计算校验和,生成一个内容哈希值,并以此哈希值代替之前的 UUID 作为镜像层的唯一标识。该机制主要提高了镜像的安全性,并在 pull、push、load 和 save 操作后检测数据的完整性。另外,基于内容哈希来索引镜像层,在一定程度上减少了 ID 的冲突并且增强了镜像层的共享。对于来自不同构建的镜像层,主要拥有相同的内容哈希,也能被不同的镜像共享。

联合挂载

通俗地讲,联合挂载技术可以在一个挂载点同时挂载多个文件系统,将挂载点的原目录与被挂载内容进行整合,使得最终可见的文件系统将会包含整合之后的各层的文件和目录。实现这种联合挂载技术的文件系统通常被称为联合文件系统(union filesystem)。以下图所示的运行 Ubuntu:14.04 镜像后的容器中的 aufs 文件系统为例:

由于初始挂载时读写层为空,所以从用户的角度看,该容器的文件系统与底层的 rootfs 没有差别;然而从内核的角度看,则是显式区分开来的两个层次。当需要修改镜像内的某个文件时,只对处于最上方的读写层进行了变动,不复写下层已有文件系统的内容,已有文件在只读层中的原始版本仍然存在,但会被读写层中的新版本文件所隐藏,当 docker commit 这个修改过的容器文件系统为一个新的镜像时,保存的内容仅为最上层读写文件系统中被更新过的文件。
联合挂载是用于将多个镜像层的文件系统挂载到一个挂载点来实现一个统一文件系统视图的途径,是下层存储驱动(aufs、overlay等) 实现分层合并的方式。所以严格来说,联合挂载并不是 docker 镜像的必需技术,比如在使用 device mapper 存储驱动时,其实是使用了快照技术来达到分层的效果。

Docker 镜像的存储组织方式

综合考虑镜像的层级结构,以及 volume、init-layer、可读写层这些概念,一个完整的、在运行的容器的所有文件系统结构可以用下图来描述:

从图中我们不难看到,除了 echo hello 进程所在的 cgroups 和 namespace 环境之外,容器文件系统其实是一个相对独立的组织。可读写部分(read-write layer 以及 volumes)、init-layer、只读层(read-only layer) 这 3 部分结构共同组成了一个容器所需的下层文件系统,它们通过联合挂载的方式巧妙地表现为一层,使得容器进程对这些层的存在一无所知。

Docker 镜像中的关键概念

registry
我们知道,每个 docker 容器都要依赖 docker 镜像。那么当我们第一次使用 docker run 命令启动一个容器时,是从哪里获取所需的镜像呢?答案是,如果是第一次基于某个镜像启动容器,且宿主机上并不存在所需的镜像,那么 docker 将从 registry 中下载该镜像并保存到宿主机。如果宿主机上存在该镜像,则直接使用宿主机上的镜像完成容器的启动。那么 registry 是什么呢?
registry 用以保存 docker 镜像,其中还包括镜像层次结构和关于镜像的元数据。可以将 registry 简单的想象成类似于 Git 仓库之类的实体。
用户可以在自己的数据中心搭建私有的 registry,也可以使用 docker 官方的公用 registry 服务,即 Docker Hub。它是由 Docker 公司维护的一个公共镜像库。Docker Hub 中有两种类型的仓库,即用户仓库(user repository) 与顶层仓库(top-level repository)。用户仓库由普通的 Docker Hub 用户创建,顶层仓库则由 Docker 公司负责维护,提供官方版本镜像。理论上,顶层仓库中的镜像经过 Docker 公司验证,被认为是架构良好且安全的。

repository
repository 由具有某个功能的 docker 镜像的所有迭代版本构成的镜像组。Registry 由一系列经过命名的 repository 组成,repository 通过命名规范对用户仓库和顶层仓库进行组织。所谓的顶层仓库,其其名称只包含仓库名,如:

而用户仓库的表示类似下面:

可以看出,用户仓库的名称多了 "用户名/" 部分。
比较容易让人困惑的地方在于,我们经常把 mysql 视为镜像的名称,其实 mysql 是 repository 的名称。repository 是一个镜像的集合,其中包含了多个不同版本的镜像,这些镜像之间使用标签进行版本区分,如 mysql:5.6、mysql:5.7 等,它们均属于 mysql 这个 repository。
简单来说,registry 是 repository 的集合,repository 是镜像的集合。

manifest
manifest(描述文件)主要存在于 registry 中作为 docker 镜像的元数据文件,在 pull、push、save 和 load 过程中作为镜像结构和基础信息的描述文件。在镜像被 pull 或者 load 到 docker 宿主机时,manifest 被转化为本地的镜像配置文件 config。在我们拉取镜像时显示的摘要(Digest):

就是对镜像的 manifest 内容计算 sha256sum 得到的。

image 和 layer
docker 内部的 image 概念是用来存储一组镜像相关的元数据信息,主要包括镜像的架构(如 amd64)、镜像默认配置信息、构建镜像的容器配置信息、包含所有镜像层信息的 rootfs。docker 利用 rootfs 中的 diff_id 计算出内容寻址的索引(chainID) 来获取 layer 相关信息,进而获取每一个镜像层的文件内容。
layer(镜像层) 是 docker 用来管理镜像层的一个中间概念。我们前面提到,镜像是由镜像层组成的,而单个镜像层可能被多个镜像共享,所以 docker 将 layer 与 image 的概念分离。docker 镜像管理中的 layer 主要存放了镜像层的 diff_id、size、cache-id 和 parent 等内容,实际的文件内容则是由存储驱动来管理,并可以通过 cache-id 在本地索引到。

Dockerfile
Dockerfile 是通过 docker build 命令构建 docker 镜像时用到的配置文件。它允许用户使用基本的 DSL 语法来定义 docker 镜像,其中的每一条指令描述一个构建镜像的步骤。

Docker引擎

Docker Engine是一个客户端 - 服务器应用程序,包含以下主要组件:

  • 服务器,是一种长时间运行的程序,称为守护程序进程( dockerd命令)。
  • 一个REST API,它指定程序可以用来与守护进程通信并指示它做什么的接口。
  • 命令行界面(CLI)客户端(docker命令)。

CLI使用Docker REST API通过脚本或直接CLI命令控制Docker守护程序或与之交互。许多其他Docker应用程序使用底层API和CLI。

守护程序创建和管理Docker 对象,例如镜像,容器,网络和卷。

Docker安装

[root@node1 ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 
[root@node1 ~]# uname -r
3.10.0-862.el7.x86_64

查看Centos镜像默认docker版本:https://mirrors.tuna.tsinghua.edu.cn/centos/7.5.1804/extras/x86_64/Packages/

在这里我们使用最新的docker版本:

[root@node1 yum.repos.d]# wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
[root@node1 yum.repos.d]# cp  docker-ce.repo{,.cp}
[root@node1 yum.repos.d]# vim docker-ce.repo.cp

[root@node1 yum.repos.d]# vim docker-ce.repo

[root@node1 yum.repos.d]#yum repolist

[root@node1 yum.repos.d]# yum install docker-ce    //区别ce和ee的

docker镜像加速

因为国情的原因,国内下载 Docker HUB 官方的相关镜像比较慢,可以使用国内(docker.io)的一些镜像加速器,镜像保持和官方一致,关键是速度块,推荐使用。

这里需要明确一个问题,就是Mirror与Private Registry的区别。二者有着本质的差别:

1)Private Registry(私有仓库)是开发者或者企业自建的镜像存储库,通常用来保存企业内部的 Docker 镜像,用于内部开发流程和产品的发布、版本控制。

2)Mirror是一种代理中转服务,我们(比如daocloud)提供的Mirror服务,直接对接Docker Hub的官方Registry。Docker Hub 上有数以十万计的各类 Docker 镜像。

3)在使用Private Registry时,需要在Docker Pull 或Dockerfile中直接键入Private Registry 的地址,通常这样会导致与 Private Registry 的绑定,缺乏灵活性。

4)使用 Mirror 服务,只需要在 Docker 守护进程(Daemon)的配置文件中加入 Mirror 参数,即可在全局范围内透明的访问官方的 Docker Hub,避免了对 Dockerfile 镜像引用来源的修改。

5)简单来说,Mirror类似CDN,本质是官方的cache;Private Registry类似私服,跟官方没什么关系。对用户来说,由于用户是要拖docker hub上的image,对应的是Mirror。 yum/apt-get的Mirror又有点不一样,它其实是把官方的库文件整个拖到自己的服务器上做镜像(不管有没有用),并定时与官方做同步;而Docker Mirror只会缓存曾经使用过的image。

目前国内访问docker hub速度上有点尴尬,使用docker Mirror势在必行。

现有国内提供docker镜像加速服务的商家有不少,下面重点介绍几家:

1)ustc的镜像

ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。之前在blog里有提到可以用ustc的docker仓库镜像.

使用方法参考ustc docker镜像使用帮助

ustc的docker镜像加速器速度很不错,一直用的挺happy。ustc docker mirror的优势之一就是不需要注册,真正是公共服务啊。

----------------------------------这里顺便说下在新版Docker里使用ustc的做法-------------------------------------

新版的Docker配置方法:

[root@localhost ~]# vim /etc/docker/daemon.json   //如果没有该文件的话,就手动创建。在该文件里添加下面内容

{

  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]

}

 

然后就可以直接docker pull下载镜像了,速度杠杠滴!!!

[root@localhost docker]# docker pull ubuntu

Using default tag: latest

Trying to pull repository docker.io/library/ubuntu ...

latest: Pulling from docker.io/library/ubuntu

d54efb8db41d: Pull complete

f8b845f45a87: Pull complete

e8db7bf7c39f: Pull complete

9654c40e9079: Pull complete

6d9ef359eaaa: Pull complete

Digest: sha256:dd7808d8792c9841d0b460122f1acf0a2dd1f56404f8d1e56298048885e45535

Status: Downloaded newer image for docker.io/ubuntu:latest

 

[root@localhost ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker.io/ubuntu    latest              0ef2e08ed3fa        2 weeks ago         130 MB

----------------------------------------------------------------------------------------------------------------------

2)daocloud镜像

DaoCloud也提供了docker加速器,但是跟ustc不同,需要用户注册后才能使用,并且每月限制流量10GB。linux上使用比较简单,一条脚本命令搞定:

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://{your_id}.m.daocloud.io

实际上面的脚本执行后,改的是/usr/lib/systemd/system/docker.service文件,加了个–registry-mirror参数。如果不执行上面的脚本命令,可以如下直接修改这个文件也可:

ExecStart=/usr/bin/docker-current daemon --registry-mirror=http://{your_id}.m.daocloud.io\

设置后,需要重新加载配置&重启:

# systemctl enable docker

# systemctl daemon-reload

# systemctl restart docker

但是最近使用DaoCloud的docker加速器体验非常差,加速效果不是很明显。

3)alicloud

阿里云也提供了docker加速器,不过比daocloud更麻烦:不光要注册为阿里云的用户,还得加入开发者平台。

不过虽然麻烦,但是它的服务还真是不错,pull速度很溜!配置方法跟daocloud类似,也是开通加速器以后给一个url。

可以直接去改/usr/lib/systemd/system/docker.service:

ExecStart=/usr/bin/docker-current daemon --registry-mirror=https://{your_id}.mirror.aliyuncs.com\

重新加载配置&重启:

# systemctl enable docker

# systemctl daemon-reload

# systemctl restart docker

pull的时候还是显示docker.io,但速度一点都不docker.io。

# docker pull ubuntu

Using default tag: latest

Trying to pull repository docker.io/library/ubuntu ...

latest: Pulling from docker.io/library/ubuntu

cad964aed91d: Pull complete

3a80a22fea63: Pull complete

50de990d7957: Pull complete

61e032b8f2cb: Pull complete

9f03ce1741bf: Pull complete

Digest: sha256:28d4c5234db8d5a634d5e621c363d900f8f241240ee0a6a978784c978fe9c737

Status: Downloaded newer image for docker.io/ubuntu:latest

4)网易镜像

网易也提供了Docker镜像服务:网易蜂巢

 echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://hub-mirror.c.163.com\"" >> /etc/default/docker

service docker restart

综上,虽然aliyun docker mirror用之前的流程有点繁琐,但服务讲真是很不错的。

我在本次学习中使用的是如下

[root@node1 yum.repos.d]# systemctl start docker.service

docker命令

[root@node1 ~]# docker
Usage:	docker [OPTIONS] COMMAND
使用:DOCK[选项]命令

A self-sufficient runtime for containers
集装箱自给运行时间

Options:
选项:

--config string Location of client config files (default "/root/.docker")
-客户端配置文件的配置字符串位置(默认的/根/ DOCKER)

-D, --debug Enable debug mode
-调试启用调试模式

-H, --host list Daemon socket(s) to connect to
-H-,主机列表Daimon套接字(S)连接到

-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal")
-L,-log级别字符串设置日志级别(“调试””“信息”“警告”“错误”“致命”)

(default "info")
(默认的“信息”)

--tls Use TLS; implied by --tlsverify
TLS使用TLS,TLS-Valman所暗示

--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--TLSCACERT String信任证书,仅由该CA签名(默认的/根/ .dkk/c.Pem)

--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
TLS String路径到TLS证书文件(默认的/根/ .dkk/Cur.Pem)

--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
TLS密钥路径到TLS密钥文件(默认的/根/ .dkk/ key .PEM)

--tlsverify Use TLS and verify the remote
TLSStValk使用TLS并验证远程

-v, --version Print version information and quit
-V,-版本打印版本信息和退出

Management Commands:
管理命令:

config Manage Docker configs
配置管理码头配置

container Manage containers
集装箱管理容器

image Manage images
图像管理图像

network Manage networks
网络管理网络

node Manage Swarm nodes
节点群管理节点

plugin Manage plugins
插件管理插件

secret Manage Docker secrets
秘密管理码头工人的秘密

service Manage services
服务管理服务

stack Manage Docker stacks
栈管理Docker stacks

swarm Manage Swarm
群管理群

system Manage Docker
码头管理系统

trust Manage trust on Docker images
码头管理者的信任管理信任

volume Manage volumes
卷管理卷

Commands:
命令:

attach Attach local standard input, output, and error streams to a running container
将本地标准输入、输出和错误流附加到正在运行的容器上

build Build an image from a Dockerfile
从DOCKL文件构建图像

commit Create a new image from a container's changes
从容器的更改中创建新图像

cp Copy files/folders between a container and the local filesystem
容器和本地文件系统之间的CP复制文件/文件夹

create Create a new container
创建新容器

diff Inspect changes to files or directories on a container's filesystem
DIFF检查对容器文件系统上的文件或目录的更改

events Get real time events from the server
事件从服务器获取实时事件。

exec Run a command in a running container
Excel在运行容器中运行命令

export Export a container's filesystem as a tar archive
导出容器文件系统作为一个TAR存档文件

history Show the history of an image
历史展示图像的历史

images List images
图像列表图像

import Import the contents from a tarball to create a filesystem image
导入来自TabBar的内容以创建文件系统映像

info Display system-wide information
信息显示系统信息

inspect Return low-level information on Docker objects
检查DOCKER对象返回低级信息

kill Kill one or more running containers
杀死一个或多个正在运行的集装箱

load Load an image from a tar archive or STDIN
从TAR存档或STDIN加载图像

login Log in to a Docker registry
登录到码头管理员注册表

logout Log out from a Docker registry
退出码头注册表注销

logs Fetch the logs of a container
日志获取容器的日志。

pause Pause all processes within one or more containers
暂停暂停一个或多个容器内的所有进程

port List port mappings or a specific mapping for the container
端口列表端口映射或容器的特定映射

ps List containers
PS列表容器

pull Pull an image or a repository from a registry
从注册表中拉取图像或储存库

push Push an image or a repository to a registry
将图像或存储库推到注册表中

rename Rename a container
重命名一个容器

restart Restart one or more containers
重新启动一个或多个容器

rm Remove one or more containers
RM移除一个或多个容器

rmi Remove one or more images
删除一个或多个图像

run Run a command in a new container
在新容器中运行命令

save Save one or more images to a tar archive (streamed to STDOUT by default)
将一个或多个图像保存到一个TAR存档(默认情况下流到StdOUT)

search Search the Docker Hub for images
搜索DoKER集线器进行图像搜索

start Start one or more stopped containers
启动一个或多个停止的容器

stats Display a live stream of container(s) resource usage statistics
STATS显示容器资源使用统计的实况流

stop Stop one or more running containers
停止一个或多个正在运行的集装箱

tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
标签创建标签目标图像,这是指SooCyxx图像

top Display the running processes of a container
顶部显示集装箱的运行过程

unpause Unpause all processes within one or more containers
取消暂停取消一个或多个容器内的所有进程

update Update configuration of one or more containers
更新一个或多个容器的更新配置

version Show the Docker version information
版本显示DOCKER版本信息

wait Block until one or more containers stop, then print their exit codes
等待块,直到一个或多个容器停止,然后打印它们的退出代码

[root@node1 ~]# docker create --help

Usage:	docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
用法:DOCKER创建[选项]图像[命令] [ARG…]

Create a new container
创建新容器

Options:
选项:

--add-host list Add a custom host-to-IP mapping (host:ip)
-添加主机列表,将自定义主机添加到IP映射(主机:IP)

-a, --attach list Attach to STDIN, STDOUT or STDERR
-连接到STDIN、STDUT或STDER的A、附件列表

--blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0 to
- BLKIO权重UIT16块IO(相对权重),介于10和1000之间,或0到

disable (default 0)
禁用(默认0)

--blkio-weight-device list Block IO weight (relative device weight) (default [])
--BLKIO权重设备列表IO权重(相对设备权重)(默认[])

--cap-add list Add Linux capabilities
--CAP添加列表添加Linux功能

--cap-drop list Drop Linux capabilities
--CAP下拉列表降低Linux能力

--cgroup-parent string Optional parent cgroup for the container
-容器的CGROUP父字符串可选父CGROUP

--cidfile string Write the container ID to the file
--CIDFrfile字符串将容器ID写入文件

--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
CPU周期INT限制CPU CFS(完全公平调度程序)周期

--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
-- CPU配额限制CPU CFS(完全公平调度程序)配额

--cpu-rt-period int Limit CPU real-time period in microseconds
- CPU RT周期INT在微秒内限制CPU实时周期

--cpu-rt-runtime int Limit CPU real-time runtime in microseconds
--CPU RT运行时INT以微秒限制CPU实时运行时间

-c, --cpu-shares int CPU shares (relative weight)
-C,CPU共享int CPU份额(相对权重)

--cpus decimal Number of CPUs
CPU的十进制数

--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--CPUSET CPU中允许执行的字符串CPU(0-3,0,1)

--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
-CPUSET MEMS串MEMS,其中允许执行(0-3,0,1)

--device list Add a host device to the container
--设备列表向容器中添加主机设备

--device-cgroup-rule list Add a rule to the cgroup allowed devices list
-设备CGROUP规则列表向CGROUP允许的设备列表添加规则

--device-read-bps list Limit read rate (bytes per second) from a device (default [])
-设备读取BPS列表限制从设备读取的速率(每秒字节)(默认[])

--device-read-iops list Limit read rate (IO per second) from a device (default [])
-设备读取IOPS列表限制从设备读取的速率(IO每秒)(默认[])

--device-write-bps list Limit write rate (bytes per second) to a device (default [])
-设备写入BPS列表限制写入速率(字节/秒)到设备(默认[])

--device-write-iops list Limit write rate (IO per second) to a device (default [])
-设备写入IOPS列表限制写入速率(IO每秒)到设备(默认[])

--disable-content-trust Skip image verification (default true)
--禁用内容信任跳过图像验证(默认为真)

--dns list Set custom DNS servers
--DNS列表设置自定义DNS服务器

--dns-option list Set DNS options
--DNS选项列表设置DNS选项

--dns-search list Set custom DNS search domains
--DNS搜索列表设置自定义DNS搜索域

--entrypoint string Overwrite the default ENTRYPOINT of the image
--EntryPoin字符串覆盖图像的默认入口点

-e, --env list Set environment variables
-e,-eNV列表设置环境变量

--env-file list Read in a file of environment variables
在环境变量文件中读取的Env文件列表

--expose list Expose a port or a range of ports
-暴露列表暴露端口或端口范围

--group-add list Add additional groups to join
-组添加列表添加附加组以加入

--health-cmd string Command to run to check health
-运行健康CMD字符串命令以检查健康

--health-interval duration Time between running the check (ms|s|m|h) (default 0s)
-运行检查之间的健康间隔持续时间(ms s m m h)(默认0)

--health-retries int Consecutive failures needed to report unhealthy
——健康报告重试报告不健康的连续故障

--health-start-period duration Start period for the container to initialize before
-容器初始化前的健康启动期持续时间开始期

starting health-retries countdown (ms|s|m|h) (default 0s)
启动健康重试倒计时(MS s m m h)(默认0)

--health-timeout duration Maximum time to allow one check to run (ms|s|m|h) (default 0s)
-健康超时持续时间允许一个检查运行的最大时间(ms s m m h)(默认0)

--help Print usage
--帮助打印使用

-h, --hostname string Container host name
-H-,主机名字符串容器主机名

--init Run an init inside the container that forwards signals
--init在容器内运行一个转发信号的初始化

and reaps processes
收获过程

-i, --interactive Keep STDIN open even if not attached
-交互式,即使没有连接也保持打开

--ip string IPv4 address (e.g., 172.30.100.104)
IP字符串IPv4地址(例如,172.30.100.104)

--ip6 string IPv6 address (e.g., 2001:db8::33)
IP6字符串IPv6地址(例如,2001:dB8::33)

--ipc string IPC mode to use
IPC字符串IPC模式的使用

--isolation string Container isolation technology
——隔离串容器隔离技术

--kernel-memory bytes Kernel memory limit
内核内存字节内核内存限制

-l, --label list Set meta data on a container
-L,-标签列表在容器上设置元数据

--label-file list Read in a line delimited file of labels
-标签行文件中读取的标签文件列表

--link list Add link to another container
--链接列表添加到另一个容器的链接

--link-local-ip list Container IPv4/IPv6 link-local addresses
——链接本地IP列表容器IPv4/IPv6链路本地地址

--log-driver string Logging driver for the container
容器的日志驱动程序字符串记录驱动程序

--log-opt list Log driver options
--log opt列表日志驱动程序选项

--mac-address string Container MAC address (e.g., 92:d0:c6:0a:29:33)
MAC地址字符串容器MAC地址(例如,92:D0:C6:0A:29∶33)

-m, --memory bytes Memory limit
-内存字节限制

--memory-reservation bytes Memory soft limit
内存预留字节内存软极限

--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable
-内存交换字节交换限制等于内存加交换:“-1”使能

unlimited swap
无限交换

--memory-swappiness int Tune container memory swappiness (0 to 100) (default -1)
——内存吞吐率调整容器内存溢出(0到100)(默认值为1)

--mount mount Attach a filesystem mount to the container
-安装挂载将文件系统挂载附加到容器上。

--name string Assign a name to the container
-名称字符串为容器分配名称

--network string Connect a container to a network (default "default")
-网络字符串将容器连接到网络(默认的“默认”)

--network-alias list Add network-sc
--网络别名列表添加网络SC

docker常用命令操作

 

查看docker版本信息

[root@node1 ~]# docker version

[root@node1 ~]# docker info    //显示信息更详细

从站点查看镜像步骤,以Nginx为例:

https://hub.docker.com/   -->nginx -->nginx -->Tags

下载镜像:

BusyBox是一种特殊类型的程序,它将许多重要程序与标准UNIX命令(如Coreutils) “打包”到一个可执行文件中(有时称为其打包方法)。BusyBox 可执行文件被设计为Linux上最小的可执行文件,与安装每个命令的可执行文件相比,可以大大减少磁盘使用量。因此,应用程序特定的Linux发行版嵌入式系统都适合,“ 嵌入式LinuxJittoku刀也称为”。它是GPLv2中发布的免费软件

从功能上讲,它类似于crunchgen命令,它是1994年由马里兰大学帕克分校的James da Silva开发的FreeBSD程序。

查看启动的进程

启动个httpd服务

查看站点

[root@node1 ~]# docker inspect b1   

退出容器

退出容器并关闭容器

/ # ps

PID USER TIME COMMAND

1 root 0:00 sh

17 root 0:00 ps

/ # exit

退出容器但不关闭容器

查看容器 停止不删除 默认不显示

[root@node1 ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

[root@node1 ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

5824fe8b3590 busybox:latest "sh" 35 minutes ago Exited (0) 17 seconds ago b1

[root@node1 ~]# docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

[root@node1 ~]# docker container ls -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

5824fe8b3590 busybox:latest "sh" 35 minutes ago Exited (0) 28 seconds ago b1

启动停止状态的容器

[root@node1 ~]# docker start -i -a b1

强制停止 kill -9 和kill -15的区别 不知道的可以看一下看一下骏马金龙的博文有写

[root@node1 ~]# docker kill b1

b1

[root@node1 ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

5824fe8b3590 busybox:latest "sh" 40 minutes ago Exited (137) 7 seconds ago b1

删除容器

[root@node1 ~]# docker rm b1

b1

[root@node1 ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

启动nginx容器

[root@node1 ~]# docker run --name web1 -d nginx:1.14-alpine

//因为不是sh所以不必加-it 即使本地没有镜像也会自动下载,所以不需要每次都拉到本地

10815556f51f3880e2231e3eebf25283d622efe3ee6cda402a1b682dbd7f2748

在容器跑任何程序包括服务程序一定不要跑在后台,不然已启动就终止

启动个redis

[root@node1 ~]# docker run --name kvstor1 -d redis:4-alpine

......

[root@node1 ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

64bb176c07b6 redis:4-alpine "docker-entrypoint.s…" 14 seconds ago Up 11 seconds 6379/tcp kvstor1

10815556f51f nginx:1.14-alpine "nginx -g 'daemon of…" 7 minutes ago Up 7 minutes 80/tcp web1

[root@node1 ~]# docker exec -it kvstor1 /bin/sh //绕过容器查看内部执行情况

/data # ps

PID USER TIME COMMAND

1 redis 0:00 redis-server

12 root 0:00 /bin/sh

17 root 0:00 ps

/data # netstat -tnl

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN

tcp 0 0 :::6379 :::* LISTEN

/data # redis-cli

127.0.0.1:6379> keys

(error) ERR wrong number of arguments for 'keys' command

127.0.0.1:6379> keys *

(empty list or set)

127.0.0.1:6379> SELECT 1

OK

127.0.0.1:6379[1]> exit

/data # exit

看日志

[root@node1 ~]# docker logs web1

172.17.0.1 - - [24/Oct/2018:12:35:06 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值