对Docker的一点理解
来源:互联网 发布:淘宝店铺特色装修 编辑:程序博客网 时间:2024/05/22 10:39
用虚拟机(VMWare或者Virtual Box等),可用将系统备份,将所有的开发、运行环境等完全做好,备份,然后可迅速用到其他的机器上。Docker,类似的思想。[本人刚接触学习Docker,以下内容如若有错误,还望帮忙指出错误一边修正]
1. 安装Docker
注意安装Docker的先决条件:64位cpu、Linux内核等
2. 使用docker run命令创建Docker容器
sudo docker run -i -t ubuntu /bin/bash
上述代码使用的是ubuntu镜像,Docker将基于Ubuntu镜像来创建容器。ubuntu镜像是一个常备镜像(基础镜像),它由Docker公司提供,保存在Docker Hub Repositories上。可以以ubuntu基础镜像为基础,在选择的操作系统上构建自己的镜像。
Docker会检查本地是否存在ubuntu镜像,如果本地还没有该镜像的话,那么Docker就会连接官方维护的Docker Hub Registry,查看Docker Hub中是否有该镜像。Docker一旦找到该镜像,就会下载该镜像并将其保存到本地宿主机中。随后,Docker在文件系统内部用这个镜像创建了一个新容器。该容器拥有自己的网络、IP地址,以及一个用来和宿主机进行通信的桥接网络接口。最后,我们告诉Docker在新容器中要运行/bin/bash命令,此命令运行之后,将启动一个Bash Shell,然后就会看到容器内的shell了。
3. 容器使用
上述创建的容器,类似一个新的机器,此机器中的环境是完全干净的,可以安装各种软件,如java EE的运行环境(java, tomcat, mysql)等。注意这里,由于环境太干净了,连基本的vim也是没有的。首先apt-get update之后,再来装软件。
4. 镜像保存为文件
经过第三步骤,应用所需的基本环境搭建完毕之后,可以将镜像保存为文件(docker save )。这一步骤,还可以将镜像push到Docker Hub仓库中,以后也可以使用。
5. 从文件载入镜像
假设想在另外的主机上面运行应用,可以将第四步中的文件,载入为镜像(docker load)。使用 docker images命令,检查刚刚加载的镜像是否可用。
6. 使用镜像
docker run -d -p 你的端口号:容器内的端口号 --name 镜像名称 镜像中可执行命令
-d:表示以“守护模式”执行/root/run.sh脚本,此时 Tomcat 控制台不会出现在输出终端上。-p:表示宿主机与容器的端口映射。
假设Docker中部署的是java web应用,那么“你的端口号”就是准备对外发布可用于访问的端口号,
镜像中可执行命令:可将要执行的命令,置于一个shell程序中,然后就会自动执行此shell,如启动tomcat。例如docker run -d -p 18080:8080 –name javaweb ubuntu:12.10 /root/run.sh
遇到的问题:
有时候下载的速度太慢了,可以修改Ubuntu的apt-get源为国内较快的源。
使用wget下载文件时候,如下载JDK等较大文件,下载完毕之后注意查看文件大小,下载可能是失败错误的。
备注:借助Docker与Jenkins来构建持续集成、部署环境,可避免重复劳动,从而提高效率。
参考资料
《第一本Docker书(修订版)》
- 对Docker的一点理解
- 对ActiveX的一点理解
- 对inherited的一点理解
- 对管理信息系统的一点理解
- 对主力的一点理解
- 对HANDLE_MSG()的一点理解
- 对__threadfence的一点理解
- 对makefile的一点理解
- 对ibatis的一点理解
- 对中断的一点理解
- 对Zigbee的一点理解
- 对AndroidRuntime的一点理解
- 对HANDLE_MSG()的一点理解
- 对软件工程的一点理解
- 对.Class的一点理解
- 对static的一点理解
- 对Struts2的一点理解
- 对AJAX的一点理解
- ARTOOLKIT安装与配置
- 第一、二章
- 数据结构期末总结
- 实现BaseFragment的创建分析
- java零基础第一天
- 对Docker的一点理解
- LaTex 数学公式中的空格
- Mysql创建带参的存储过程
- Android杂记(一)
- Matlab 根据轮廓线获取高脚杯模型
- 浅谈CSS自定义下划线
- MatConvNet--VL_NNBNORM
- 持续集成 Jenkins(一)Ubuntu 安装 jenkins
- Sublime text 2不支持raw_input输入的问题