標題所講的兩種方法其實就是創建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參數(也可以設置本地網絡模式,不展開了)這樣就可以訪問了...
