序言
这世界的担子太重了,不是一个人可以担负得起的;这世上的悲哀太多了,不是一颗心可以承受的。
1Dokcer简介
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
1.1为什么选择Docker?
(1)上手快。
用户只需要几分钟,就可以把自己的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。
随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。
(2)职责的逻辑分类
使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”
(3)快速高效的开发生命周期
Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。)
(4)鼓励使用面向服务的架构
Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序)
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了
1.2Docker架构
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
2 Docker安装与启动
Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。注:本次教程的使用的环境是CentOS7
推荐阅读:Docker安装
2.1Docker安装
1.yum包更新到最新
sudo yum update
2 安装需要的软件包, yum-utils 提供yum-config-manager功能,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4 安装docker
安装期间全部回复y即可
sudo yum install docker-ce
5安装后查看docker版本
显示版本则安装成功
docker -v
2.2设置镜像加速器
国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务
创建或修改 /etc/docker/daemon.json 文件,修改为如下形式
编辑该文件:
vi /etc/docker/daemon.json
在该文件中输入如下内容:
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
国内加速地址有
- Docker中国区官方镜像
https://registry.docker-cn.co - 网易
http://hub-mirror.c.163.c - ustc
https://docker.mirrors.ustc.edu.c - 中国科技大学
https://docker.mirrors.ustc.edu.cn
推荐阅读:docker设置国内镜像源
docker国内镜像源设置
2.3 Docker的启动与停止
启动docker:
systemctl start docker
停止docker:
systemctl stop docker
重启docker:
systemctl restart docker
查看docker状态:
systemctl status docker
开机启动:
systemctl enable docker
查看docker概要信息
docker info
查看docker帮助文档
docker --help
3 常用命令
3.1 镜像相关命令
3.1.1 查看镜像
docker images
各个选项说明:
-
REPOSITORY:表示镜像的仓库源
-
TAG:镜像的标签
-
IMAGE ID:镜像ID
-
CREATED:镜像创建时间
-
SIZE:镜像大小
因为我们刚刚安装了docker,所以我们docker容器里什么都没有
3.1.2 搜索镜像
docker search 镜像名称
举例
搜索 centos 7镜像
docker search centos:7
3.1.3 拉取镜像
拉取镜像就是从中央仓库中下载镜像到本地
docker pull 镜像名称
举例 拉取 centos7 拉取过程可能会比较慢 一定要配置国内镜像源
docker pull centos:7
3.1.4 删除镜像
按镜像ID删除镜像
docker rmi 镜像ID
按自定义镜像名称删除镜像
docker rmi 自定义镜像名称
3.2 容器相关命令
3.2.1 查看容器
查看正在运行的容器
docker ps
查看所有容器
docker ps –a
查看最后一次运行的容器
3.2.2 创建与启动容器
创建容器常用的参数说明:
创建容器命令:docker run
-
-i:表示运行容器
-
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
-
–name :为创建的容器命名。
-
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
(1)交互式方式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态
退出当前容器
exit
(2)守护式方式创建容器:
docker run -di --name=容器名称 镜像名称:标签
登录守护式容器方式:
docker exec -it 容器名称 (或者容器ID) /bin/bash
3.2.3 停止与启动容器
停止容器:
docker stop 容器名称(或者容器ID)
启动容器:
docker start 容器名称(或者容器ID)
3.2.4 文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
3.2.5 目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
如果你共享的是多级的目录,可能会出现权限不足的提示。
这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题
docker实例
好了 了解完这些基础命令我们可以练习一下实例
大家做这些之前一定不要忘了配置docker国内镜像源
不然会非常的慢
docker安装mysql
拉取MySQL镜像
docker pull centos/mysql-57-centos7
使用以下命令来查看是否已安装了 mysql:
docker images
运行容器
安装完成后,我们可以使用以下命令来运行 mysql 容器:
-e MYSQL_ROOT_PASSWORD设置的是mySQL root账户下的密码
docker run -di --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
本机可以通过 root 和密码 123456 访问 MySQL 服务。
mysql -h localhost -u root -p