Docker简介
基于Go语言开发的开源项目
官网:https://www.docker.com/
文档地址:https://docs.docker.com/
仓库地址:https://hub.docker.com/
Docker为什么会出现?
叶檀财经:开发 —> 上线 两套环境!
开发 ··· 运维 问题:项目在我的电脑上可以运行
环境配置是十分麻烦的,每一个机器都需要部署集群,费时费力
我们发布一个(jar + (Redis、Mysql、jdk … )),项目能不能都带上环境打包部署
传统:开发jar,部署上线运维来做
现在:开发打包部署上线一条龙服务
Docker 给以上问题,提出了解决方案
Docker的核心思想
隔离机制:
例子:水果,生化武器
通过隔离机制,可以将服务器利用到极致
Docker的历史
2010年,几位怀揣着梦想的年轻人,创立了一家公司DotCloud,公司起初做的业务为即"DotCloud Paas"平台即服务供应商,底层技术上,dotCloud采用了Linux容器技术。为了方便创建和管理这些容器,dotCloud开发了一套自己的内部工具,Docker这就这样诞生的!
2013年,dotCloud业务发展并不景气,为了寻求新的突破,将Docker开源并公司重新命名为Docker,放弃了dotCloud平台,怀揣着"将Docker和容器技术推向全世界"的使命,开启了一段新的征程。
2014年,Docker1.0发布。
2018年,公司估值已为惊人的13亿美元。
Docker为什么这么火?
Docker与传统虚拟机Vmware类比:
VM:隔离 需要开启多个虚拟机 每个虚拟机大小为几G不等 启动时间长达"几分钟"
Docker:隔离 镜像(最核心的环境 4m + jdk + mysql …)十分小巧,运行镜像就可以了 启动时间为"秒级"
Docker与JVM类比:
JVM:一次编译到处运行
Docker:一次构建到处运行
Docker能干嘛?
应用更快速的交付和部署
传统:环境部署,一堆帮助文档,安装配置运行
Docker:打包发布镜像测试,一键运行
更便捷的升级和扩缩容
使用Docker之后,部署应用升级就好比搭积木。
项目打包为一个镜像,需要扩展就直接复制粘贴到另一个服务器。
更简单的系统运维:
容器化之后,我们的开发、测试环境都是高度一致的。
更高效的计算机资源利用:
Docker是内核级别的虚拟化,可以在一个服务器上运行很多容器实例,把服务器性能利用到极致。
Docker安装与使用
参考文档:http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
# 1、需要的安装包
yum install -y yum-utils
# 2、设置下载镜像的仓库(这里我们使用国内镜像仓库)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 默认是国外的
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云镜像地址
# 2.1在 vim /etc/docker/daemon.json 添加镜像
{
"registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com/","https://docker.mirrors.ustc.edu.cn/","https://hub-mirror.c.163.com","https://registry.docker-cn.com"]
# 3、安装Docker引擎 docker-ce 社区版 | docker-ee 企业版(这里安装最新版本)
yum install docker-ce docker-ce-cli containerd.io
# 安装指定版本Docker
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
# 4、启动与停止Docker
systemctl start docker
systemctl stop docker
# 5、查看Docker当前版本号
docker --version
# 6、启动 hello world
docker run hello-world
1. Unable to find image 'hello-world:latest' locally # 没有找到 hello world
2. latest: Pulling from library/hello-world # 自动拉取镜像
# 7、查看下载的 hello world 镜像
docker images
# 8、卸载Docker
# 卸载依赖
1. yum remove docker-ce docker-ce-cli containerd.io
# 删除资源
2. rm -rf /var/lib/docker
# 9、Docker默认工作路径
/var/lib/docker
# 列出本机的所有容器文件。
docker image ls
docker images
# 删除容器文件
docker image rm [imageName]
# 查看当前正在运行的容器
docker ps 、 # 列出本机正在运行的容器
docker ps -a # 列出本机所有容器,包括终止运行的容器
# 手动从仓库中拉取镜像文件
docker image pull library/hello-world # 默认为最新版本
示例
一:安装nginx
# 从官网拉取nginx镜像
docker pull nginx
# 查看镜像库
docker images
# 使用nginx镜像创建nginx容器实例
docker run --name nginx-test -p 8080:80 -d nginx
# run 创建容器实例
# -- name 容器命名
# -v 映射目录
# -p 本机端口映射 将容器的80端口映射到本机的80端口
# -d 设置容器后台运行
# 语句最后一个nginx是使用镜像的名称
# 停止nginx容器
docker stop nginx-test
# 启动nginx容器
docker start nginx-test
二:将nginx关键目录映射到本机
# 在本机上创建目录
mkdir -p /root/nginx/www /root/nginx/logs /root/nginx/conf
# www: nginx存储网站网页的目录
# logs: nginx日志目录
# conf: nginx配置文件目录
# 查看nginx容器ID
docker ps -a
# 将docker-test容器配置文件copy到本地
docker cp [容器ID]:/etc/nginx/nginx.conf /root/nginx/conf
# 创建新容器实例之前需要将当前正在运行的暂停(防止端口冲突)
docker stop [容器ID]
# 创建新nginx容器nginx-web,并将www,logs,conf目录映射到本地
docker run -d -p 8989:80 --name nginx-web -v /root/nginx/www:/usr/share/nginx/html -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/logs:/var/log/nginx nginx
# 启动nginx
docker start nginx-web
# 在本机"www"创建docker首页 index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>docker</title>
</head>
<body>
<h1>docker搭建nginx映射成功</h1>
</body>
</html>