Docker基础
1.Docker是什么?为什么会流行?
一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关系很多东西,这也是很多互联网公司不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。
Docker可以消除协助编码时“在我的机器上可正常工作”的问题。
Docker镜像的设计,是的Docker得以打破过去【程序即应用】的观念,透过镜像(images)将作业系统核心除外,运作应用程序所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。
Docke是基于Go语言实现的云开源项目。主要目标是“Build, Ship and Rn Any App, Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
Linux容器技术的出现就解决了这样一个问题,而Docker就是在它的基础上发展过来的。将应用运行在Docker容器上面,而Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
一句话,Docker解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
1.2. Docker能做什么
由于虚拟机存在的缺点(资源占用多,冗余步骤多,启动慢),Linux发展出了另一种虚拟化技术:Linux容器(Linux Containers,缩写为LXC)。
Linux容器不是模拟一个完整的操作系统,而是对进程镜像隔离。有了容器,就可以将软件运行所需要的资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都始终如一地运行。
Docker和传统虚拟化方式的不同之处
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
而容器内的应用进程直接运行与宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。
1.3. 运维好处
一次构件、随处运行
更快速的应用交付和部署
更便捷的升级和扩缩容
更简单的系统运维
更高效的计算资源利用
1.4. 学习坐标
官网:http://www.docker.com
中文官网:http://www.docker-cn.com(访问不到了)
Docker三要素仓库,镜像,容器。
Docker镜像存放到仓库:http://hub.docker.com
Docker架构图
Docker镜像(Image)就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器。
Docker利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
仓库(Repository)是集中存放镜像文件的场所。
仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是Docker Hub(https://hub.docker.com),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。
小结:
Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好行成一个可交付的运行环境,这个打包好的运行环境就似乎image镜像文件。只有通过这个镜像文件才能生成Docker容器。image文件可以看作是容器的模板。Docker根据image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例。
image文件生成的容器实例,本身也是一个文件,称为镜像文件。
一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。
仓库,就是存放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库拉下来就可以了。
1.5. 安装
CentOS Docker安装,Docker支持以下的CentOS版本:
CentOS 7(64-bit)
CentOS 6.5(64-bit)或更高的版本。
目前,CentOS仅发行版本中的内核支持Docker。Docker运行在CentOS 7以上,要求系统为64位、系统内核版本为3.10以上。本文使用CentOS 7。
查看自己的内核
uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。
uname –r
cat /etc/redhat-release
1.5.1. CentOS7安装Docker
安装可以参考https://www.runoob.com/docker/centos-docker-install.html
从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。
Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
这里安装Docker CE。
安装一些必要的系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum 缓存:
sudo yum makecache fast
安装 Docker-ce:
sudo yum -y install docker-ce
启动 Docker 后台服务
sudo systemctl start docker
1.5.2. HelloWorld镜像
docker pull hello-world拉取hello-world镜像
docker run hello-world运行hello-world
1.6. Docker原理
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器是一个运行时环境,就是我们前面说到的集装箱。
Docker是怎么工作的
为什么Docker比VM快
1、 Docker有着比虚拟机更少的抽象层。由于Docker不需要Hypervison实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上Docker将会在效率上有明显优势。
2、 Docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核。仍然避免引用、加载操作系统内核反而比较耗费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,整个新建过程是分钟级别的。而Docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个Docker容器只需要几秒钟。
1.7. 配置镜像加速器
在pull镜像时,访问国外的网站可能很慢,甚至访问不到,我们可以使用阿里云镜像加速器:
按照CentOS说明编辑配置文件:
执行sudo systemctl restart docker重新启动Docker后台服务。
查看版本信息
2.Docker安装JDK
docker pull java
查看镜像
运行
查看java version
3.Docker安装Oracle
安装oracle 11g镜像到docker
搜索符合条件的镜像
docker search oracle
选择安装jaspeen/oracle-11g,等待下载安装完成。
docker pull jaspeen/oracle-11g
查看下载好的镜像
下载oracle11g安装文件
wget –c –b
http://download.oracle.com/otn/linux/oracle11g/R2/linux.x64_11gR2_database_1of2.zip
wget –c -b
http://download.oracle.com/otn/linux/oracle11g/R2/linux.x64_11gR2_database_2of2.zip
这个方法不是很方便,因为oracle现在下载软件需要登录用户,所以这个链接不一定能用。这里建议使用迅雷下载好后再通过工具上传,上面的两个链接是有效的。
在usr下创建目录
mkdir install
将下载的oracle安装压缩文件解压到/install下
通过镜像开启容器服务
docker run --privileged --name oracle11g –p 1521:1521 –v /usr/install:/install jaspeen/oracle-11g
docker ps查看正在运行的容器
docker ps –a查看所有容器,包括未运行的
docker ps –s 查看容器大小。
看到这里,oracle11g的容器已经开启。
注:oracle11g是在通过镜像开启容器服务时命名的。
进入oracle11g容器
docker exec –it oracle11g /bin/bash
切换到image的oracle用户
su – oracle
进入oracle数据库
sqlplus / as sysdba
解锁scott用户
使用navicat premium连接服务器成功
创建视图时报错:ORA-01031: insufficient privileges。
授予scott创建视图的权限。当前用户是sys才可以处理。可以退出当前用户,重新登录。
grant create view to scott;
docker start oracle11g
docker stop oracle11g
在这里要注意一个问题,就是将容器中的数据挂载到操作系统上,防止容器被误删除的情况。
容器可以建私库或是通过导入导出的方式,快速移植功能。
注:oracle11g有一个新特性,创建用户时缺省密码过期限制是180天,如果超过180天用户密码未做修改则该用户无法登陆。
密码到期时执行语句:ALTER USER 用户名 IDENTIFIED BY 密码 ;
可以通过如下SQL语句将其关闭
alter profile default limit password_life_time unlimited