Docker部署文档
目录
Docker部署文档 1
1、什么是Docker 3
1.1Docker简介 3
1.2对比传统虚拟机总结 4
1.3Docker一般用于以下场景: 5
1.4基本概念 5
Docker 镜像 5
Docker 容器 6
Docker Registry 7
2、Docker原理 9
3、安装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
4、Docker加速器 14
3.1经常使用Docker加速器 14
3.2Centos7配置Docker加速器 15
3.3从新加载配置而且从新启动。 15
3.4检查加速器是否生效 15
3.5Docker加速器地址 15
5、登陆退出Docker Hub 15
登陆docker login 15
退出Docker Hub 16
6、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
7、操做容器 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
6、安装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添加镜像库 33linux
1、什么是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 和传统虚拟化方式的不一样之处。传统虚拟机技术是虚拟 出一套硬件后,在其上运行一个完整操做系统,在该系统上再运行所需应用进程; 而容器内的应用进程直接运行于宿主的内核,容器内没有本身的内核,并且也没有进行硬件虚拟。所以容器要比传统虚拟机更为轻便。nginx
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
2、Docker原理
参考文章《Docker原理》和《docker入门到实践(第二版)》
3、安装Docker
参考文章《docker安装》和《docker入门到实践(第二版)》
3.1Centos系统要求
Docker 最低支持 CentOS 7。
Docker 须要安装在 64 位的 x86 平台或 ARM 平台上(如树莓派) ,而且要求内核版本不低于 3.10。但实际上内核越新越好,太低的内核版本可能会出现部分功能没法使用,或者不稳定。CentOS 7 知足最低内核的要求,但因为内核版本比较低,部分功能(如 overlay2 存储层驱动) 没法使用,而且部分功能可能不太稳定。
用户能够经过以下命令检查本身的内核版本详细信息。
[root@localhost ~]# 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
[root@localhost ~]#web
3.2在安装前卸载旧的版本
$ sudo yum remove docker \
docker-common \
docker-selinux \
docker-enginedocker
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]**
安装校验
root@iZbp12adskpuoxodbkqzjfZ:$ 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/amd64ubuntu
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-enginevim
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 iptablescentos
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
4、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
5、登陆退出Docker Hub
登陆docker login
登陆命令为docker login,按照步骤输入在Docker Hub注册的用户名和密码进行登陆便可
退出Docker Hub
退出登陆命令为docker logout,运行后直接从指定服务器退出,默认为官方Docker Hub服务器
6、Docker镜像使用
6.1查看docker版本
6.1.1使用docker version查看版本信息
[root@localhost ~]# 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查看版本信息
[root@localhost ~]# docker -v
Docker version 17.07.0-ce, build 8784753
[root@localhost ~]# docker --version
Docker version 17.07.0-ce, build 8784753
[root@localhost ~]#
注: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 REPOSITORY@ DIGEST
7、操做容器
容器是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在后台运行的标准操做包括:
一、 检查本地是否存在指定的镜像,不存在就从公有仓库下载
二、 利用镜像建立并启动一个镜像
三、 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
四、 从宿主机配置的网桥接口中桥接一个虚拟接口到容器中
五、 从地址池配置一个ip地址给容器
六、 执行用户指定的应用程序
七、 执行完毕后容器被终止
7.2.3.3运行容器
7.2.3.3.1新建一个容器并输出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强行删除运行中的容器