一.Docker简介
1.了解虚拟化的概念
在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种 实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间 的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚 拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计 算能力和资料存储。
2.docker技术又称容器技术
由于“客居”于操作系统,容器只能运行与底层宿主机相同或者相似的操作系统,这看 起来并不是非常灵活。例如:可以在 Ubuntu 服务中运行 Redhat Enterprise Linux,但无法再 Ubuntu 服务器上运行 Microsoft Windows。
3.容器与虚拟机的区别
容器:
容器管理程序虚拟化通过中间层将一台或者多台独立 的机器虚拟运行与物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。因 此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行 在同一台宿主机上。
虚拟机:
多个虚拟系统共享硬件资源,优点:可以安装不同内核的操作系统
4.Docker特点:
1)上手快
2)职责的逻辑分类
3)快速高效的开发生命周期
4)鼓励使用面向服务的架构
5.Docker组件
1)Docker客户端与服务器
2)Docker镜像
3)Registry(注册中心)
4)Docker容器
6.使用Docker做什么?
容器提供了隔离性,结论是,容器可以为各种测试提供很好的沙盒环境。并且,容器本
身就具有“标准性”的特征,非常适合为服务创建构建块。Docker 的一些应用场景如下:
- 加速本地开发和构建流程,使其更加高效、更加轻量化。本地开发人员可以构建、 运行并分享 Docker 容器。容器可以在开发环境中构建,然后轻松的提交到测试环境中,并 最终进入生产环境。
- 能够让独立的服务或应用程序在不同的环境中,得到相同的运行结果。这一点在 面向服务的架构和重度依赖微型服务的部署由其实用。
- 用 Docker 创建隔离的环境来进行测试。例如,用 Jenkins CI 这样的持续集成工具 启动一个用于测试的容器。
- Docker 可以让开发者先在本机上构建一个复杂的程序或架构来进行测试,而不是 一开始就在生产环境部署、测试。
二.Docker安装
1. 在Ubuntu中安装Docker
更新ubuntu的apt源索引
sudo apt-get update
安装包允许apt通过HTTPS使用仓库
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
添加Docker官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
这一步如果出现了gpg: 无法解析公钥服务器 URL
可以sudo vim /etc/hosts
添加:
219.76.4.4 git .4 github-cloud.s3.amazonaws.com
设置Docker稳定版仓库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
添加仓库后,更新apt源索引
sudo apt-get update
安装最新版Docker CE(社区版)
sudo apt-get install docker-ce
检查Docker CE是否安装正确
sudo docker run hello-world
出现如下信息,表示安装成功
三.Docker操作
1.Docker镜像操作
1>列出镜像 docker image ls
- REPOSITORY:镜像所在的仓库名称
- TAG:镜像标签
- IMAGEID:镜像ID
- CREATED:镜像的创建日期(不是获取该镜像的日期)
- SIZE:镜像大小
2>拉取镜像
docker image pull library/hello-world
可以直接在线下的...
3>删除镜像
docker image rm 镜像名或镜像id
例如:
docker image rm hello-world
2.Docker容器操作
1>创建容器
docker run [option] 镜像名 [向启动容器中传入的命令]
常用可选参数说明:
- -i 表示以“交互模式”运行容器
- -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。
- --name 为创建的容器命名
- -v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上。
- -d 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
- -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射
- -e 为容器设置环境变量
- --network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同
2>交互式容器
docker run -it --name=myubuntu ubuntu /bin/bash
在容器中可以随意执行linux命令,就是一个ubuntu的环境,当执行exit命令退出时,该容器也随之停止。
重点在docker run -it --name=myubuntu ubuntu /bin/bash
3>守护式容器
docker run -dit --name=myubuntu2 ubuntu
如果写了d,就会创建守护式容器,此时i可写可不写,不起作用
4>进入已运行的容器
docker exec -it 容器名或容器id 进入后执行的第一个命令
例如:
docker exec -it myubuntu2 /bin/bash
5>查看容器
# 列出本机正在运行的容器
docker container ls
# 列出本机所有容器,包括已经终止运行的
docker container ls --all
6>停止和启动容器(创建时默认容器已启动)
# 停止一个已经在运行的容器
docker container stop 容器名或容器id
# 启动一个已经停止的容器
docker container start 容器名或容器id
# kill掉一个已经在运行的容器
docker container kill 容器名或容器id
删除容器:
docker container rm 容器名或容器id
总结:1. docker run -it 镜像名 交互式运行,已创建容器,退出自动关闭容器
2.docker run 镜像名 创建容器
3.docker run -dit --name=容器名 镜像名 守护式容器(即在后端总动运行)
第1,2种方式在 docker container -ls --all 可以查看到
也可以用 docker container rm 容器名 删除
也可以启动和停止
3.将容器保存为对象
docker commit 容器名 镜像名
4.镜像备份与迁移
docker save -o 保存的文件名 镜像名
例如:
docker save -o ./ubuntu.tar ubuntu
在拿到镜像文件后,可以通过load方法,将镜像加载到本地
docker load -i ./ubuntu.tar
总结:
四.使用Docker安装FastDFS
1.FastDFS分布式文件系统
FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制, 充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS 架构包括Tracker server和Storage server。客户端请求 Tracker server 进行文 件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。
-
Tracker server作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些 策略找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。
-
Storage server作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上, Storageserver 没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将 storage 称为存储服务器。
-
服务端两个角色:
- Tracker : 管理集群,tracker 也可以实现集群。每个 tracker 节点地位平等。收集 Storage 集群的状态。
- Storage : 实际保存文件, Storage 分为多个组,每个组之间保存的文件是不同的。每 个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有 主从的概念。
2. 获取镜像
可以利用已有的FastDFS Docker镜像来运行FastDFS。
获取镜像可以通过下载
docker image pull delron/fastdfs
也可是直接使用提供给大家的镜像备份文件
docker load -i 文件路径/fastdfs_docker.tar
2. 运行tracker
执行如下命令开启tracker 服务
docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
- 我们将fastDFS tracker运行目录映射到本机的 /var/fdfs/tracker目录中。
执行如下命令查看tracker是否运行起来
docker container ls
如果想停止tracker服务,可以执行如下命令
docker container stop tracker
停止后,重新运行tracker,可以执行如下命令
docker container start tracker
3. 运行storage
执行如下命令开启storage服务
docker run -dti --network=host --name storage -e TRACKER_SERVER=127.0.0.1:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage
注意:127.0.0.1 需要改成自己的IP地址
- TRACKER_SERVER=本机的ip地址:22122 本机ip地址不要使用127.0.0.1
- 我们将fastDFS storage运行目录映射到本机的/var/fdfs/storage目录中
- 会生成固定的文件夹,导入数据的时候需要对用存入数据的文件夹替换
- 这里因为我重新生成过容器,遇到一个问题,storage容器开启后,docker container ls显示没有,但是确能访问到图片,隔一段时间就访问不到了?
- 解决办法:
- 如果无法重新运行,可以删除/var/fdfs/storage/data目录下的fdfs_storaged.pid 文件,然后重新运行storage。
执行如下命令查看storage是否运行起来
docker container ls
如果想停止storage服务,可以执行如下命令
docker container stop storage
停止后,重新运行storage,可以执行如下命令
docker container start storage
注意:如果无法重新运行,可以删除/var/fdfs/storage/data
目录下的fdfs_storaged.pid
文件,然后重新运行storage。