标题所讲的两种方法其实就是创建docker镜像的两种方法
第一种:启动镜像后进入容器中操作,将需要的软件或者项目移动到容器中,安装或者部署,然后退出即可
第二种:编写dockerfile,将需要的镜像一层层叠加上去,比如我们要部署项目,可以先下载一个ubuntu基础镜像,然后叠加jdk,然后tomcat,然后项目
这两种方法我都试过,区别在于,第二种比较体现docker的镜像叠加特性,第一种到最终只有一层镜像.
先讲第二种吧,我之前的文章有提到过dockerfile的编写,这边直接给出简单的dockerfile实例和运行命令.当然编写之前要先下一个基础镜像,我们选择ubuntu:运行命令
docker search ubuntu
注意:也可以直接运行dockerfile文件,指定的基础镜像须在仓库中存在
得到如下结果:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating s... 4241 [OK] ubuntu-upstart Upstart is an event-based replacement for ... 65 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 29 [OK] torusware/speedus-ubuntu Always updated official Ubuntu docker imag... 26 [OK] ubuntu-debootstrap debootstrap --variant=minbase --components... 25 [OK] nickistre/ubuntu-lamp LAMP server on Ubuntu 8 [OK] nuagebec/ubuntu Simple always updated Ubuntu docker images... 6 [OK] nimmis/ubuntu This is a docker images different LTS vers... 5 [OK] nickistre/ubuntu-lamp-wordpress LAMP on Ubuntu with wp-cli installed 5 [OK] maxexcloo/ubuntu Docker base image built on Ubuntu with Sup... 2 [OK] jordi/ubuntu Ubuntu Base Image 1 [OK] admiringworm/ubuntu Base ubuntu images based on the official u... 1 [OK] darksheer/ubuntu Base Ubuntu Image -- Updated hourly 1 [OK] life360/ubuntu Ubuntu is a Debian-based Linux operating s... 0 [OK] esycat/ubuntu Ubuntu LTS 0 [OK] lynxtp/ubuntu https://github.com/lynxtp/docker-ubuntu 0 [OK] widerplan/ubuntu Our basic Ubuntu images. 0 [OK] datenbetrieb/ubuntu custom flavor of the official ubuntu base ... 0 [OK] teamrock/ubuntu TeamRock's Ubuntu image configured with AW... 0 [OK] ustclug/ubuntu ubuntu image for docker with USTC mirror 0 [OK] webhippie/ubuntu Docker images for ubuntu 0 [OK] ubuntucore/jenkins-ubuntu Jenkins image based on ubuntu 0 [OK] dorapro/ubuntu ubuntu image 0 [OK] konstruktoid/ubuntu Ubuntu base image 0 [OK] uvatbc/ubuntu Ubuntu images with unprivileged user 0 [OK]
选择星级最高的第一个,也可以选择其他,运行:
docker pull ubuntu
等待下载完成后,开始写dockerfile:
# Version: 1.0.0 # Create Time: 2015-10-16 09:04 # Author: garfield # Description: 在最新版本的ubuntu系统中安装jdk,构建可执行java的环境 FROM ubuntu:latest MAINTAINER garfield "garfield@163.com" # 将jdk安装压缩包解压到/home/jdk1.8.0_51 ADD jdk-8u51-linux-x64.tar.gz /home/ # 安装中文语言包 #RUN locale-gen zh_CN.UTF-8 # 设置java环境变量 ENV JAVA_HOME /home/jdk1.8.0_51 ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH $PATH:$JAVA_HOME/bin # 设置语言环境变量 ENV LANG zh_CN.UTF-8 ENV LANGUAGE zh_CN:zh
如下图显示,这样放好:
然后运行命令:
docker build -t 自定义名称 路径
就会开始构建镜像,这样一个拥有基础镜像和jdk的镜像就做好了.
然后tomcat和web项目的安装同上即可.
接下来将第一种部署方法,启动镜像时需要挂载目录到本地:
docker run -i -t -v /root/software/:/mnt/software/ 53a0016cd0ba /bin/bash
进入系统内部:
docker exec -t -i 53a0016cd0ba /bin/bash
可以看到:
root@53a0016cd0ba:/tmp/mesos-sandbox#
现在就可以开始安装软件了并设置环境变量了,因为进入的系统也是一个普通的linux运行环境,所以这里不赘写具体的安装和环境变量配置了
最后将web项目部署到tomcat目录下之后,编写一个启动脚本,准备在容器启动的时候调用即可,看一下我的镜像实例吧:
REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.161.2:5000/mq_app latest f59fdf14b64f 3 months ago 381.8 MB mesoscloud/marathon latest e4396ffc8383 3 months ago 561.6 MB yfix/jenkins-master latest aee26ee6e30b 3 months ago 1.262 GB python latest 70c16d34e4c8 3 months ago 689.6 MB webcenter/activemq latest 87fdf4718a31 3 months ago 446.3 MB haproxy latest 26df93f0d499 3 months ago 139.1 MB 192.168.161.2:5000/tomcat latest e3de4da2f84a 3 months ago 357.4 MB redis latest 4f5f397d4b7c 4 months ago 177.6 MB
其中第一个就是我制作的web项目了,应该算蛮清晰的了吧.做得比较久了有些详情也忘了,有问题请见谅...
对了制作后启动除了前面说的启动脚本之外,还需要设置端口映射,也就是-p参数(也可以设置本地网络模式,不展开了)这样就可以访问了...