Docker部署文档

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker部署文档相关的知识,希望对你有一定的参考价值。

Docker部署文档
目录
Docker部署文档 1
一、什么是Docker 3
1.1Docker简介 3
1.2对比传统虚拟机总结 4
1.3Docker通常用于如下场景: 5
1.4基本概念 5
Docker 镜像 5
Docker 容器 6
Docker Registry 7
二、Docker原理 9
三、安装Docker 9
3.1Centos系统要求 9
3.2在安装前卸载旧的版本 10
3.3安装Docker 10
3.3.1使用Docker官方脚本自动安装 10
3.3.2阿里云方式安装 11
3.3.3DaoCloud 的安装脚本 13
3.3.4yum安装 13
3.4启动 Docker 引擎 13
3.5建立Docker用户组 14
四、Docker加速器 14
3.1常用Docker加速器 14
3.2Centos7配置Docker加速器 15
3.3重新加载配置并且重新启动。 15
3.4检查加速器是否生效 15
3.5Docker加速器地址 15
五、登录退出Docker Hub 15
登录docker login 15
退出Docker Hub 16
六、Docker镜像使用 16
6.1查看docker版本 16
6.1.1使用docker version查看版本信息 16
6.1.2使用docker -v查看版本信息 16
6.2搜索并获取镜像 17
6.2.1使用docker search搜索可用的docker镜像 17
6.2.2使用docker pull命令获取镜像 17
6.3列出当前镜像列表 19
6.3.1使用docker images命令查看 19
6.3.2列出部分镜像 20
6.3.3查看镜像摘要 20
6.4删除本地镜像 20
6.4.1docker rmi语法: 20
6.4.2使用镜像名删除本地镜像 21
6.4.3使用ID删除本地镜像 22
6.4.4使用镜像摘要删除本地镜像 22
七、操作容器 22
7.1列出所有运行中的容器 22
7.2创建启动容器 23
7.2.1启动容器的两种方式 23
7.2.2新建容器 24
7.2.3新建并启动容器 24
7.3暂停终止容器 27
7.4重启暂停的容器 28
7.5删除容器 29
六、安装Docker Rancher 29
6.0 Docker Hub镜像获取方法 29
6.1 快速安装Docker rancher 29
6.2 查看是否正常启动docker rancher 30
6.3Web访问Docker Rancher 30
6.4配置部署Rancher 31
6.4.1添加主机 31
5.4.2添加镜像库 33

一、什么是Docker
1.1Docker简介
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司 内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源),主要项目代码在 GitHub 上进行维护。Docker 项 目后来还加入了 Linux 基金会,并成立推动开放容器联盟。
Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 3 万 6 千个 星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公 司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则 从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离, 属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进 程,因此也称其为容器。最初实现是基于 LXC,从 0.7 以后开始去除 LXC,转而使 用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔 离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻 便、快捷。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟 出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程; 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

1.2对比传统虚拟机总结
特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
1.3Docker通常用于如下场景:
? web应用的自动化打包和发布;
? 自动化测试和持续集成、发布;
? 在服务型环境中部署和调整数据库或其他的后台应用;
? 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
1.4基本概念
Docker 包括三个基本概念
镜像(lmage)
容器(Container)
仓库(Repository)
理解了这三个概念,就理解了Docker的整个生命周期
Docker 镜像
我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image) ,就相当于是一个 root 文件系统。比如官方镜像 ubuntu:14.04 就包含了完整的一套Ubuntu 14.04 最小系统的 root 文件系统。
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等) 。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
分层存储
因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。
分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。
关于镜像构建,将会在后续相关章节中做进一步的讲解。
Docker 容器
镜像(Image) 和容器(Container) 的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学Docker 时常常会把容器和虚拟机搞混。
前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume) 、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器可以随意删除、重新 run ,数据却不会丢失。
Docker Registry
镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。
一个 Docker Registry 中可以包含多个仓库(Repository) ;每个仓库可以包含多个标签(Tag) ;每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。以 Ubuntu 镜像 为例, ubuntu 是仓库的名字,其内包含有不同的版本标签,如, 14.04 , 16.04 。我们可以通过 ubuntu:14.04 ,或者 ubuntu:16.04来具体指定所需哪个版本的镜像。如果忽略了标签,比如 ubuntu ,那将视为ubuntu:latest 。
仓库名经常以 两段式路径 形式出现,比如 jwilder/nginx-proxy ,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于所使用的具体 Docker Registry 的软件或服务。
Docker Registry 公开服务
Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。
最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。除此以外,还有 CoreOS 的 Quay.io,CoreOS 相关的镜像存储在这里;Google 的 Google Container Registry,Kubernetes 的镜像使用的就是这个服务。
由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务(Registry Mirror) ,这些镜像服务被称为加速器。常见的有 阿里云加速器、DaoCloud 加速器、灵雀云加速器等。使用加速器会直接从国仓库的地址下载 Docker Hub 的镜像,比直接从官方网站下载速度会提高很多。在后面的章节中会有进一步如何配置加速器的讲解。
国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 时速云镜像仓库、网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库等。
私有 Docker Registry
除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。在后续的相关章节中,会有进一步的搭建私有 Registry 服务的讲解。
开源的 Docker Registry 镜像只提供了 Docker Registry API 的服务端实现,足以支持 docker 命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。在官方的商业化版本 Docker Trusted Registry 中,提供了这些高级功能。
除了官方的 Docker Registry 外,还有第三方软件实现了 Docker Registry API,甚至提供了用户界面以及一些高级功能。比如,VMWare Harbor 和 SonatypeNexus
二、Docker原理
参考文章《Docker原理》和《docker入门到实践(第二版)》
三、安装Docker
参考文章《docker安装》和《docker入门到实践(第二版)》
3.1Centos系统要求
Docker 最低支持 CentOS 7。
Docker 需要安装在 64 位的 x86 平台或 ARM 平台上(如树莓派) ,并且要求内核版本不低于 3.10。但实际上内核越新越好,过低的内核版本可能会出现部分功能无法使用,或者不稳定。CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动) 无法使用,并且部分功能可能不太稳定。
用户可以通过如下命令检查自己的内核版本详细信息。
[[email protected] ~]# uname -a
Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[[email protected] ~]#

3.2在安装前卸载旧的版本
$ sudo yum remove docker \
docker-common \
docker-selinux \
docker-engine

3.3安装Docker
3.3.1使用Docker官方脚本自动安装
Docker 官方为了简化安装流程,提供了一套安装脚本,CentOS 系统上可以使用这套脚本安装:
curl -sSL https://get.docker.com/ | sh
执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 安装在系统中。不过,由于伟大的墙的原因,在国内使用这个脚本可能会出现某些下载出现错误的情况。国内的一些云服务商提供了这个脚本的修改版本,使其使用国内的 Docker软件源镜像安装,这样就避免了墙的干扰。
3.3.2阿里云方式安装
3.3.2.1yum安装
CentOS 7 (使用yum进行安装)

step 1: 安装必要的一些系统工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Step 2: 添加软件源信息

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Step 3: 更新并安装 Docker-CE

sudo yum makecache fast
sudo yum -y install docker-ce

Step 4: 开启Docker服务

sudo service docker start

注意:

官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。

vim /etc/yum.repos.d/docker-ee.repo

将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1

#

安装指定版本的Docker-CE:

Step 1: 查找Docker-CE的版本:

yum list docker-ce.x86_64 --showduplicates | sort -r

Loading mirror speeds from cached hostfile

Loaded plugins: branch, fastestmirror, langpacks

docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable

docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable

docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable

Available Packages

Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)

sudo yum -y install docker-ce-[VERSION]

安装校验
[email protected]:$ docker version
Client:
Version: 17.03.0-ce
API version: 1.26
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64

Server:
Version: 17.03.0-ce
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64
Experimental: false
3.3.2.2阿里云的安装脚本
3.3.3DaoCloud 的安装脚本
curl -sSL https://get.daocloud.io/docker | sh
3.3.4yum安装
这个centos-extras仓库必须启用。这个库是默认可用的,但如果不能使用,你需要重新启用它。(不建议使用默认extras仓库安装,因为安装版本较低,建议自行添加docker仓库)
执行下面的命令添加 yum 软件源
cat >/etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
更新 yum 软件源缓存,并安装 docker-engine 。
$ sudo yum makecache
$ sudo yum install docker-engine

3.4启动 Docker 引擎
设置开机启动Docker Daemon进程
systemctl start docker.service
systemctl enable docker.service
查看docker进程的状态
ps -ef | grep docker
关闭firewalld防火墙,并启用iptables
systemctl stop firewalld.service
systemctl disable firewalld.service
添加iptables防火墙并启动
yum -y install iptables-services
systemctl enable iptables
systemctl start iptables

3.5建立Docker用户组
默认情况下, docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。建立 docker 组:
$ sudo groupadd docker
将当前用户加入 docker 组:
$ sudo usermod -aG docker $USER
四、Docker加速器
3.1常用Docker加速器
国内访问 Docker Hub 有时会遇到困难,此时可以配置镜像加速器。国内很多云服
务商都提供了加速器服务,例如:
阿里云加速器
DaoCloud 加速器
灵雀云加速器
注册用户并且申请加速器,会获得如https://8sqvv6ih.mirror.aliyuncs.com 这样的地址。我们需要将其配置给Docker 引擎。
3.2Centos7配置Docker加速器
对于使用 systemd 的系统,用 systemctl enable docker 启用服务后,编辑
/etc/systemd/system/multi-user.target.wants/docker.service 文件,找到 ExecStart= 这一行,在这行最后添加加速器地址 --registry-mirror=<加速器地址> ,如:镜像加速器
ExecStart=/usr/bin/dockerd --registry-mirror=https://8sqvv6ih.mirror.aliyuncs.com
注:对于 1.12 以前的版本, dockerd 换成 docker daemon 。
3.3重新加载配置并且重新启动。
systemctl daemon-reload
systemctl restart docker
3.4检查加速器是否生效
Linux系统下配置完加速器需要检查是否生效,在命令行执行 ps -ef | grep dockerd ,如果从结果中看到了配置的 --registry-mirror 参数说明配置成功。
$ sudo ps -ef | grep dockerd
root 5346 1 0 19:03 ? 00:00:00 /usr/bin/dockerd
--registry-mirror=https://jxus37ad.mirror.aliyuncs.com

3.5Docker加速器地址
阿里云加速器地址https://8sqvv6ih.mirror.aliyuncs.com
五、登录退出Docker Hub
登录docker login
登录命令为docker login,按照步骤输入在Docker Hub注册的用户名和密码进行登录即可
退出Docker Hub
退出登录命令为docker logout,运行后直接从指定服务器退出,默认为官方Docker Hub服务器
六、Docker镜像使用
6.1查看docker版本
6.1.1使用docker version查看版本信息
[[email protected] ~]# docker version
Client:
Version: 17.07.0-ce
API version: 1.31
Go version: go1.8.3
Git commit: 8784753
Built: Tue Aug 29 17:42:01 2017
OS/Arch: linux/amd64

Server:
Version: 17.07.0-ce
API version: 1.31 (minimum version 1.12)
Go version: go1.8.3
Git commit: 8784753
Built: Tue Aug 29 17:43:23 2017
OS/Arch: linux/amd64
Experimental: false
6.1.2使用docker -v查看版本信息
[[email protected] ~]# docker -v
Docker version 17.07.0-ce, build 8784753
[[email protected] ~]# docker --version
Docker version 17.07.0-ce, build 8784753
[[email protected] ~]#
注:docker –v 和docker –version这两条命令相同

6.2搜索并获取镜像
6.2.1使用docker search搜索可用的docker镜像
命令行的格式为:
docker search 镜像名字
如:

6.2.2使用docker pull命令获取镜像
现在默认使用的是Docker Hub上的高质量的镜像,下面开始介绍如何获取这些镜像。获取镜像的命令为docker pull 。
docker pull命令格式为
源格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
docker pull [选项] [Docker Registry地址] 仓库名[:标签]
docker pull 用户名/镜像名
镜像名称格式:
Docker Registry地址:地址的格式一般是 <域名/IP>[:端口号] 。默认地址是Docker Hub。
仓库名:如之前所说,这里的仓库名是两段式名称,既 <用户名>/<软件名> 。对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。
镜像都是按照用户名/镜像名的方式来存储的。有一组比较特殊的镜像用户名/镜像名可通过“docker search 镜像名字”搜索即可查看
如:
$docker pull learn/tutorial
直接写镜像名字也可以
$ docker pull centos

上面的命令中没有给出 Docker Registry 地址,因此将会从 Docker Hub 获取镜
像。而镜像名称是 ubuntu:14.04 ,因此将会获取官方镜像 library/ubuntu仓库中标签为 14.04 的镜像。从下载过程中可以看到我们之前提及的分层存储的概念,镜像是由多层存储所构成。下载也是一层层的去下载,并非单一文件。下载过程中给出了每一层的 ID 的前 12 位。并且下载结束后,给出该镜像完整的 sha256 的摘要,以确保下载一致性。在实验上面命令的时候,你可能会发现,你所看到的层 ID 以及 sha256 的摘要和这里的不一样。这是因为官方镜像是一直在维护的,有任何新的 bug,或者版本更新,都会进行修复再以原来的标签发布,这样可以确保任何使用这个标签的用户可以获得更安全、更稳定的镜像。
如果从 Docker Hub 下载镜像非常缓慢,可以参照后面的章节配置加速器。
6.3列出当前镜像列表
6.3.1使用docker images命令查看
要想列出已经下载下来的镜像,可以使用 docker images 命令
列表包含了仓库名、标签、镜像 ID、创建时间以及所占用的空间。其中仓库名、标签在之前的基础概念章节已经介绍过了。镜像 ID 则是镜像的唯一标识,一个镜像可以对应多个标签。因此,在上面的例子中,我们可以看到ubuntu:16.04 和 ubuntu:latest 拥有相同的 ID,因为它们对应的是同一个镜像。
6.3.2列出部分镜像
在不加任何参数的情况下,docker images会列出所有的镜像,但有时会只希望列出部分镜像可以使用下面的命令进行列出部分镜像内容。
使用命令进行查看docker images 仓库名字
6.3.3查看镜像摘要
使用命令$ docker images --digests进行查看镜像摘要,如下

6.4删除本地镜像
6.4.1docker rmi语法:
删除本地的镜像,可以使用docker rmi命令,其格式为:
docker rmi [选项] 镜像1 [镜像...]
参数:
-f 强行移除该镜像,即使正在使用中
--no-prune
注:docker rm命令是删除容器,docker rmi命令是删除本地镜像
在删除镜像时其中[镜像1]可以是ID 、镜像名、摘要 来删除镜像,其中ID我们可以使用完整的ID也就是长ID,也可以使用断ID来删除镜像,其中短ID就是说一般取前3个字符以上,只要足够区分与别的镜像就可以了,docker images已经列出来的已经算是断ID了。
如:使用docker imager查看镜像列表

6.4.2使用镜像名删除本地镜像
也就是 <仓库名>:<标签> ,来删除镜像
6.4.3使用ID删除本地镜像

6.4.4使用镜像摘要删除本地镜像
docker rmi [email protected] DIGEST
七、操作容器
容器是docker的核心概念,容器是独立运行的一个或一组应用,以及他们的运行状态环境
7.1列出所有运行中的容器
命令格式语法:docker ps [OPTIONS]
参数选项:
-a 列出所有运行中的容器
-q 仅列出容器ID
-s 显示容器大小
-n=1 列出最近创建的n个容器
如:

7.2创建启动容器
7.2.1启动容器的两种方式
7.1.1新建容器并启动
这种启动方式为基于镜像新建一个容器并启动,所需要的命令主要为docker run,相当于先执行docker create命令在执行docker start命令进行启动容器
7.1.2终止状态的容器并启动
这一种启动方式为容器在停止状态(stopped)的容器使用docker start命令进行重新启动
7.2.2新建容器
可以使用docker create命令新建容器,但此时创建的容器处于停止状态,可以使用docker start命令来启动。

7.2.3新建并启动容器
新建容器并启动容器的命令主要为docker run命令。
7.2.3.1Docker run语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
选项:
-i选项让容器的标准输入保持打开,以交互模式运行容器,通常与-t同时使用
-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上通常与-i同时使用
-d或者-d=true选项则是让docker容器以守护状态在后台运行而不是直接把执行命令的结果输出在当前的宿主机下并返回容器ID
--name nginx 指定容器名称,如果没有指定则会自动生成一个随机字符串UUID
-h hostname 指定容器的hostname
-P (大P)映射到主机的随机端口
-p (小p) 将容器的端口映射到主机端口 如: –p 80:80将容器的80端口映射到主机80端口
-v 将主机的目录映射到容器的目录 如:-v /data:/data将主机的data目录映射到容器的data目录
--dns 强制容器使用dns服务器,例如docker –d --dns 8.8.8.8
7.2.3.2创建并启动容器时执行过程
当利用docker run来创建并启动容器时,docker在后台运行的标准操作包括:
1、 检查本地是否存在指定的镜像,不存在就从公有仓库下载
2、 利用镜像创建并启动一个镜像
3、 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
4、 从宿主机配置的网桥接口中桥接一个虚拟接口到容器中
5、 从地址池配置一个ip地址给容器
6、 执行用户指定的应用程序
7、 执行完毕后容器被终止

7.2.3.3运行容器
7.2.3.3.1新建一个容器并输出hello world 并终止容器

docker run ubuntu:14.04 echo hello-world

    本条命令启动ubuntu:14.04版本的镜像,并在其中运行打印hello world的命令;

由于我们的命令是一个简单的语句,并不会持续很长时间,当命令执行完毕时,容器就退出了因此,我们通过docker ps –a可以看到容器的状态是停止状态

7.2.3.3.2新建一个容器并启动一个bash终端,允许用户进行交互
#docker run -i -t centos /bin/bash
在交互式模式下可以在终端下使用命令如下

用户可以使用exit命令退出容器

对于创建的bash容器,当使用命令exit退出容器时,该容器就自动处于终止状态了,这是因为对于docker容器来说,当运行的应用退出后,容器也就没有继续运行的必要了。
7.2.3.3.3后台运行一个容器 使用-d选项

7.2.3.3.4运行nginx服务镜像
$ docker run -d -p 80:80 --name webserver nginx
安装成功后,可以使用浏览器访问http:// ip地址,如能访问则nginx成功安装并启动。

7.2.3.3.5新建一个web容器能访问
新建一个nginx web服务器映射本机80端口,使其能正常访问

7.3暂停终止容器
停止上面创建的nginx服务镜像
命令docker stop Docker_Name

$ docker stop webservice

在如停止上面例子中后台运行的centos

7.4重启暂停的容器
使用docker restart 命令会将一个运行状态为终止的容器进行重新启动

进入容器
在使用-d参数时,容器启动后会进入后台,用户无法查看到容器中的信息,有些时候如果需要进入容器进行操作时,可以进入到容器进行操作,有很多方法包括docker attach命令,docker exec命令以及nsenter工具等
docker attche命令
docker attche命令是docker自带的命令,可查看下面例子使用该命令

使用docker attach命令时,当多人同时使用docker attach到同一个容器的时候,所有的窗口都会同步显示,当某个窗口因命令阻塞时,其他窗口也无法执行操作。 

7.5删除容器
可以使用docker rm命令删除处于终止状态的容器,
其格式为docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS选项:
-f 强行终止并删除一个运行中的容器
-l 删除容器的连接,但保留容器
-v删除容器挂载的数据卷

$ docker rm webservice

先暂停centos服务在删除centos容器

使用-f强行删除运行中的容器

以上是关于Docker部署文档的主要内容,如果未能解决你的问题,请参考以下文章

docker 部署 coredns(内部域名解析)

Docker部署文档

云原生之Docker实战使用docker部署mm-wiki文档系统

云原生之Docker实战使用docker部署mkdocs项目文档工具

云原生之Docker实战使用Docker部署Mindoc文档管理平台

云原生之Docker实战使用Docker部署BookStack文档管理系统