docker構建tomcat鏡像

一、docker簡介

      Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,
而後發佈到任何流行的 Linux 機器上
   一個完整的Docker有如下幾個部分組成:前端

     DockerClient客戶端 
     Docker Daemon守護進程
     Docker Image鏡像
     Docker Container容器[2] 
     Docker Registry 倉庫:分 公有(Docker Hub)、私有mysql

二、docker安裝

        安裝 yum -y install dockerlinux

        啓動 systemctl start dockernginx

三、docker經常使用命令

   3.一、列表顯示全部的docker命令

   docker --help  sql

   3.二、經常使用命令解釋

    docker search鏡像名稱  (好比 centos,ubutu,nginx等) 搜索遠程倉庫中的鏡像docker

    docker images 查看本地全部鏡像shell

    docker  pull 鏡像名稱    下載遠程倉庫的鏡像 apache

    docker ps -a顯示全部正在運行或者中止的容器  每一個容器都存在一個惟一id       centos

    docker ps -a 顯示全部正在運行或者中止的容器  每一個容器都存在一個惟一id       tomcat

    docker attach 容器id  能夠進入一個進入後臺進程的容器

    docker stop 容器id  關閉一個容器

    docker start  容器id  重啓一個容器

    docker exec 容器id 命令  在一個運行容器中執行一個命令  結合it進入shell界面後 exit退出 容器是不會退出的

    docker rm 容器id  刪除一個建立的容器

    docker rmi 鏡像d  刪除一個鏡像 刪除前肯定該鏡像下沒有容器

    docker  inspect 容器id 查看容器的詳細 信息 好比查詢進程id    docker  inspect 容器id | grep Pid
            查看ip地址 :

([root@cdh2 ~]# docker inspect fb24be559be3 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",)

    docker commit  容器id  資源庫名稱:標籤名  用於將修改後的容器反向生成鏡像

以及

    docker run  [可選參數] 鏡像名稱 【進入倉庫後執行命令】

       運行某個鏡像 運行後的鏡像就是容器 就是進程的容器

        --name 名稱 指定容器名稱  好比 docker run --name mycentos centos 表示運行一個爲mycentos的centos倉庫

        -t 表示打開一個僞中斷  其實centos倉庫就是一個精簡的centos系統

        -i  表示持續打開輸入流 用戶能夠輸入命令 好比 打開一個容器以後 可以與用戶交互 docker run -it centos  進入僞終端後exit命令退出

        -p 能夠進行端口映射 當訪問主機的端口  自動映射到docker容器的某個端口

                   好比映射到docker的nginx  docker  run -p 1122:80 nginx  其餘機器 訪問 http://主機:1122自動訪問docker容器的80端口

       -d 表示啓動容器直接進入後臺模式  daemon  通常若是容器中沒有任何程序進程 通常直接退出

       -v 將主機的某個目錄 映射到 docker容器的某個目錄 

                   好比 docer run  -it -v /data:/data1 centos  表示主機的/data和容器的/data1目錄互相掛載 文件修改都會影響兩個目錄 能夠用戶傳文件

       -h  指定容器的主機的主機名 

四、docker構建映像

    4.一、模擬環境

        使用centos做爲基礎鏡像  在centos鏡像中安裝tomcat  而後經端口8080映射爲主機80

    4.二、構建方式(確認安裝並啓動docker)

       》手動構建

             >>下載centos鏡像 (docker pull centos)

             >> 啓動centos容器 掛載主機和容器目錄用於上傳jdk和tomcat , 映射80端口到8080 ,而且進入僞終端:                   

#主機建立目錄 

    mkdir /data 

#運行容器

    docker run -it -p 80:8080 -v /data:/data centos 
    >>  下載jdk和tomcat在主機/data目錄 並再次進入僞終端

[root@bogon data]# ll
total 63016
-rw-r--r-- 1 root root  7073612 Sep 23  2016 apache-tomcat-6.0.45.tar.gz
-rw-r--r-- 1 root root 57450587 Sep 23  2016 jre-8u77-linux-x64.rpm
[root@bogon data]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
b1f3d11cfb4a        centos              "/bin/bash"         5 minutes ago       Exited (0) 4 minutes ago                       gigantic_liskov
[root@bogon data]# docker start b1f3d11cfb4a 
b1f3d11cfb4a
[root@bogon data]# docker attach b1f3d11cfb4a 

查看docker容器中 /data目錄是否存在 tomcat和jre文件


[root@b1f3d11cfb4a /]# cd data
[root@b1f3d11cfb4a data]# ll
total 63016
-rw-r--r-- 1 root root  7073612 Sep 24  2016 apache-tomcat-6.0.45.tar.gz
-rw-r--r-- 1 root root 57450587 Sep 24  2016 jre-8u77-linux-x64.rpm
           

    >>安裝jdk和tomcat        

        rpm -ivh jre-8u77-linux-x64.rpm
        tar zxvf  apache-tomcat-6.0.45.tar.gz 
        mv  apache-tomcat-6.0.45 tomcat6
     

    若是出現 /unpack200: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directo 表示你在64位系統中安裝32位jdk 換成64位便可
    /data目錄是使用主機映射的 因此生成鏡像後下次進來須要從新映射 因此能夠拷貝一個到鏡像中 使用拷貝的目錄

     cp -fr  /data/* /data1


       >>啓動tomcat  使用 http://主機名/是否能訪問tomcat主頁

      若是使用exit退出了容器  必須使用start命令啓動 執行startup.sh


[root@bogon data]# docker start b1f3d11cfb4a
b1f3d11cfb4a
[root@bogon data]# docker exec b1f3d11cfb4a  /data1/tomcat6/bin/startup.sh
    
    

docker要求容器中 運行的程序必須是前端運行的(也就是運行後 不能再輸入命令) 默認的tomcat8 是使用deamon方式運行(運行完成後 後臺運行能夠繼續輸入命令行 ) 因此 打開catalina.sh 稍做修改 將tomcat6 改成前端運行

      >>建立鏡像    

[root@bogon data]# docker commit -a "jiaozi" b1f3d11cfb4a mytomcat
sha256:f313d1d9e9740877846ce26c73e30a9b827d1a22a98dd4130c3476446b058a67
[root@bogon data]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
mytomcat                latest              f313d1d9e974        5 seconds ago       534.1 MB
docker.io/centos        latest              328edcd84f1b        3 weeks ago         192.5 MB
docker.io/nginx         latest              b8efb18f159b        4 weeks ago         107.5 MB
docker.io/hello-world   latest              1815c82652c0        10 weeks ago        1.84 kB

        >>使用自定義鏡像 建立容器
        清空全部建立的容器           

docker ps -a | awk '{if(NR>1){print $1;system("docker stop "$1);system("docker rm "$1)}}';

        建立並啓動容器  (-d 後臺運行docker)

         docker run  -d -p 80:8080 mytomcat /data1/tomcat6/startup.sh

        訪問tomcat成功

     》dockerfile構建(參考 https://docs.docker.com/engine/reference/builder/#run)

        在主機 /data目錄(已經存在tomcat和jdk文件)下 添加文件 Dockerfile

       /data下解壓 tomcat 將 catalina.sh 修改成 前臺運行模式 (參考手動構建) 拷貝一個到 /data目錄

       編輯Dockerfile文件 

#基於centos鏡像來構建
FROM centos
#建立一個目錄 
RUN mkdir -p /data
#將本地服務器拷貝到遠程 /data目錄
COPY apache-tomcat-6.0.45.tar.gz /data/
COPY jre-8u77-linux-x64.rpm /data/
#進入工做目錄
WORKDIR /data
#解壓tomcat和安裝jdk
RUN tar zxvf apache-tomcat-6.0.45.tar.gz
RUN rpm -ivh jre-8u77-linux-x64.rpm
COPY catalina.sh /data/apache-tomcat-6.0.45/bin
#指定容器啓動時默認的執行命令
CMD  /data/apache-tomcat-6.0.45/bin/startup.sh


  執行命令  
docker build -t autotomcat .    #最後一個.表示當前目錄 -t表示鏡像名稱:tag
  自動多步驟將以上腳本內容執行  完成後查看鏡像中多了個autotomcat
[root@bogon data]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
autotomcat              latest              39ccbb1a0b65        3 minutes ago       465 MB
使用鏡像 啓動容器 訪問tomcat http://主機名 成功
 docker run -d -p 80:8080 autotomcat 

五、docker映像和容器遷移

5.一、容器遷移(dockerfile指定默認鏡像啓動的cmd會丟失 導入啓動從新指定啓動命令)

   查看啓動的容器

[root@bogon ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
0b9716216938        autotomcat          "/bin/sh -c /data/apa"   2 hours ago         Up 2 hours          0.0.0.0:80->8080/tcp   ecstatic_mestorf
  導出容器(導出容器爲tar包 導出的其實就是一個鏡像)
[root@bogon ~]# docker export --help
Usage:  docker export [OPTIONS] CONTAINER
Export a container's filesystem as a tar archive
Options:
      --help            Print usage
  -o, --output string   Write to a file, instead of STDOUT
[root@bogon ~]# docker export 0b9716216938 -o my.tar
[root@bogon ~]# ll
total 612240
-rw-------. 1 root root      2913 Apr  5  2016 anaconda-ks.cfg
drwxr-xr-x  2 root root      4096 Nov 30  2016 mysql
-rw-r--r--  1 root root 172871680 Nov 21  2016 MySQL-5.5.53-1.el7.x86_64.rpm-bundle.tar
-rw-------  1 root root 454053376 Aug 30 02:05 my.tar
 導入鏡像(清除以前容器 而後測試導入)
[root@bogon ~]# docker stop 0b9716216938
0b9716216938
[root@bogon ~]# docker rm 0b9716216938
0b9716216938
[root@bogon ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@bogon ~]# docker import --help
 
Usage:  docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
 
Import the contents from a tarball to create a filesystem image
 
Options:
  -c, --change value     Apply Dockerfile instruction to the created image (default [])
      --help             Print usage
  -m, --message string   Set commit message for imported image
[root@bogon ~]# docker import ~/my.tar mycontainer
sha256:2fada1f574e58e15e9bd3be3a460cf9ed49afdebb3c0acf77c3b0b9755a9f0d0
[root@bogon ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@bogon ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
mycontainer             latest              2fada1f574e5        22 seconds ago      445.7 MB
autotomcat              latest              2cdd3ea7c459        3 hours ago         465 MB
mytomcat1               latest              4f7b426f3c13        7 hours ago         680.2 MB
docker.io/centos        latest              328edcd84f1b        3 weeks ago         192.5 MB
docker.io/nginx         latest              b8efb18f159b        5 weeks ago         107.5 MB
docker.io/hello-world   latest              1815c82652c0        10 weeks ago        1.84 kB
[root@bogon ~]# docker run -d -p 80:8080 mycontainer /bin/bash  #必須指定啓動的命令 不然執行錯誤 建議備份使用save和load
2》鏡像遷移

鏡像導出(docker save)

[root@bogon ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
mycontainer             latest              2fada1f574e5        6 minutes ago       445.7 MB
autotomcat              latest              2cdd3ea7c459        3 hours ago         465 MB
mytomcat1               latest              4f7b426f3c13        7 hours ago         680.2 MB
docker.io/centos        latest              328edcd84f1b        3 weeks ago         192.5 MB
docker.io/nginx         latest              b8efb18f159b        5 weeks ago         107.5 MB
docker.io/hello-world   latest              1815c82652c0        10 weeks ago        1.84 kB
[root@bogon ~]# docker save --help
 
Usage:  docker save [OPTIONS] IMAGE [IMAGE...]
 
Save one or more images to a tar archive (streamed to STDOUT by default)
 
Options:
      --help            Print usage
  -o, --output string   Write to a file, instead of STDOUT
[root@bogon ~]# docker save autotomcat -o autotomcat.tar

鏡像還原(docker load) [root@bogon ~]# docker rmi autotomcat Untagged: autotomcat:latest Deleted: sha256:2cdd3ea7c45993df666aae424a8d1481625b9eebb1d71cc038ed1f863cb1d188 Deleted: sha256:ac56923130beb6fee5dff01b71b372031f0b8fc3aed358e88908e46a71b2addf Deleted: sha256:980448f3feaa6eb532fae0b21becde0058a1ea218fc6daa50c8c98157935680c Deleted: sha256:8a6a4b46aa45b13cff98a812effa2a59d9c057b3cfe249ac6b60a7021af44e28 Deleted: sha256:cbb95e9582c5ab78e2e1c20bf80fcff9718d4da0794a774dbbcf96a55aa88f77 Deleted: sha256:1fcfc02f4248149e893e601a5fef3821ae0f456af9acd09b93b10633bf7017f6 Deleted: sha256:b0e1b6b888bc29d40af4f62440b4332ea48402462a2dfa4a2416b5cfe482f7e7 Deleted: sha256:0863d1db247f560508cf5f8e6aacdc537e5b4a48006f2fae652c8cc64fce5838 Deleted: sha256:61e56c66f3236cca8e7df1a6b373da038ec6462e014386f7d77773476bbc9cf2 Deleted: sha256:2b42f6b1718f9c3cd6ce8ca80ed1ed483ac9c4de97137e8813f8883f3ec80d7d Deleted: sha256:50ecf85d2a745a7d394bbf860e73c93f021a49a3c3e741d3fc2f61c6a3b141e9 Deleted: sha256:d37ed07fc7f41063407aa40acf4e80d81da86051f0ae008e90171d0e47ea97fb Deleted: sha256:12a6f42f828df7d028e6401efcba0150aa6f5152e9f17202387331163e075986 Deleted: sha256:94826b9151a3239f5f435b2345c787d005b12a9d771bfe5d180e4181cae2b203 [root@bogon ~]# ll total 1074548 -rw-------. 1 root root      2913 Apr  5  2016 anaconda-ks.cfg -rw-------  1 root root 473401856 Aug 30 02:17 autotomcat.tar drwxr-xr-x  2 root root      4096 Nov 30  2016 mysql -rw-r--r--  1 root root 172871680 Nov 21  2016 MySQL-5.5.53-1.el7.x86_64.rpm-bundle.tar -rw-------  1 root root 454053376 Aug 30 02:05 my.tar [root@bogon ~]# docker load --help   Usage:  docker load [OPTIONS]   Load an image from a tar archive or STDIN   Options:       --help           Print usage   -i, --input string   Read from tar archive file, instead of STDIN   -q, --quiet          Suppress the load output [root@bogon ~]# docker load -i autotomcat.tar 061db0905f5c: Loading layer [==================================================>]  2.56 kB/2.56 kB cbf3c8e9e1c0: Loading layer [==================================================>] 7.076 MB/7.076 MB 9de133ced06e: Loading layer [==================================================>] 49.22 MB/49.22 MB 3dad1ba7daa6: Loading layer [==================================================>]  11.2 MB/11.2 MB 7b93ff490943: Loading layer [==================================================>] 205.7 MB/205.7 MB 98caa7f18e3c: Loading layer [==================================================>] 20.99 kB/20.99 kB Loaded image: autotomcat:latest [root@bogon ~]# docker images REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE autotomcat              latest              2cdd3ea7c459        3 hours ago         465 MB mytomcat1               latest              4f7b426f3c13        7 hours ago         680.2 MB docker.io/centos        latest              328edcd84f1b        3 weeks ago         192.5 MB docker.io/nginx         latest              b8efb18f159b        5 weeks ago         107.5 MB docker.io/hello-world   latest              1815c82652c0        10 weeks ago        1.84 kB ---------------------   

相關文章
相關標籤/搜索