首页 > 代码库 > Docker学习笔记
Docker学习笔记
-
基本概念
Docker: 开源的容器虚拟化平台,虚拟机能做的Docker都能做,而且速度更快。
Docker的核心思想有三点:
- 集装箱,将一个个程序(应用)看作集装箱,在网络间进行搬运,Docker中的集装箱也就是镜像
- 标准化,将程序所需的环境进行标准化
- 隔离,集装箱直接互相隔离
在对Docker有一个大概的认识后再来看Docker的内部:
Docker 镜像 - Docker images
Docker 仓库 - Docker registeries
Docker 容器 - Docker containers
镜像就是一系列的文件,每一层的镜像都是只读的,仓库是用来保存镜像的,容器的本质是进程,镜像可以理解为容器的文件系统,一个Docker容包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。
-
基本操作
安装过程见官网,安装完成后键入命令,docker version,可获取如下内容:
安装完成后,对docker的镜像进行下载,也就是docker pull image 命令,最后的image是由docker官网提供的镜像名称,因为国情的原因,国内下载 Docker HUB 官方的相关镜像比较慢,我在ubuntu16系统下,镜像无法从官网直接pull ,可以通过daocloud.io获得自己的加速器。具体操作如下:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://990a497a.m.daocloud.io
配置Docker Hub Mirror
sudo echo "DOCKER_OPTS=\"$DOCKER_OPTS --registry-mirror=http://xxx.m.daocloud.io\"" >> /etc/default/docker service docker restart
将xxx替换为在 DaoCloud 上注册后,专属生成的Mirror地址链接名。 该脚本可以将 --registry-mirror 加入到Docker配置文件 /etc/defaults/docker中。
Docker Hub Mirror使用不需要任何附件操作,就像这样下载官方Ubuntu镜像
docker pull ubuntu
最终问题解决。
然后就可以开始练习docker的一些基本操作了,一些基本的操作可以参考这篇博客http://blog.csdn.net/zjin_hua/article/details/52041757。
自己制作完成的镜像可以上传至私有仓库,在这里我使用了阿里云的私有仓库,按照阿里云的提示步骤将本地镜像上传至私有仓库。
镜像上传成功后结果如下:
-
web应用容器化
对docker仓库,镜像,容器等有了基础的认识后,开始在docker中运行自己的web项目,以下实例中的web项目来自于我自己开发的基于SSH框架的java web项目。
- 首先安装tomcat镜像
- 编辑Dockerfile文件,具体内容如下
from tomcat #第一条指令必须是FROM,其后可以是各种镜像的操作指令
MAINTAINER 所有者名字 邮箱 #指定镜像所有者
ADD classnet.war /usr/local/tomcat/webapps/ #将web项目添加至tomcat工作目录下,classnet.war是项目的名称,需要和dockerfile在同一个目录下
CMD ["catalina.sh", "run"] #在容器启动时启动tomcat服务器
- 输入指令 docker build -t name:tag . #为web的镜像命名,指定版本号,并在最后说明dockerfile的存放位置
- 在docker中安装mysql的镜像
- 分别将mysql和web的镜像启动为容器,并指定端口号,另外需要在mysql启动时,通过-e指令配置环境变量,指定数据库的连接密码和数据库名称,与web项目中保持一致。
- docker ps命令查看容器是否正常启动
- 输入localhost:端口号/classnet/index.jsp 正常访问网站 #另在web项目中须将mysql的连接地址改为虚拟机的ip地址,若使用localhost则不能正常访问
详细操作可参考这篇博文https://yq.aliyun.com/articles/6894,其中涉及到maven的安装,在配置maven项目时出现 [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?经查证后发现是jdk版本的问题Linux系统中自带jdk,版本为open版,更新为oracle版后解决问题。可参考https://zhidao.baidu.com/question/332067219210122805.html替换jdk版本。
Docker学习笔记