1. 程式人生 > >docker紀錄篇1-docker構建tomcat映象

docker紀錄篇1-docker構建tomcat映象

一。docker簡介

      Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,
然後釋出到任何流行的 Linux 機器上
   一個完整的Docker有以下幾個部分組成:
     DockerClient客戶端 
     Docker Daemon守護程序
     Docker Image映象
     Docker Container容器[2] 
     Docker Registry 倉庫:分 公有(Docker Hub)、私有

二。docker安裝

  》》 安裝 yum -y install docker

  》》啟動 systemctl start docker

三。docker常用命令

   1》列表顯示所有的docker命令

   docker --help  

   2》 常用命令解釋

    docker search映象名稱  (比如 centos,ubutu,nginx等) 搜尋遠端倉庫中的映象

    docker images

檢視本地所有映象

    docker  pull 映象名稱    下載遠端倉庫的映象 

    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 ps -a顯示所有正在執行或者停止的容器  每個容器都存在一個唯一id       


    
  1. [[email protected] sbin]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. df775408e9d9 centos "/bin/bash" 7 minutes ago Exited (127) About a minute ago grave_goldwasser
  4. 6d0c66822268 centos "/bin/bash" 11 minutes ago Exited (0) 11 minutes ago lonely_lalande
  5. f7cdb266a7b8 hello-world "/hello" 19 minutes ago Exited (0) 19 minutes ago compassionate_poitras
  6. 0140addda370 nginx "nginx -g 'daemon off" 5 hours ago Exited (0) 14 minutes ago mynginx
  7. e27860b7dbc4 centos "/bin/bash" 5 hours ago Exited (127) 5 hours ago mycentos
      docker ps -a 顯示所有正在執行或者停止的容器  每個容器都存在一個唯一id        

    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地址 :


    
  1. ([[email protected] ~]# docker inspect fb24be559be3 | grep IPAddress
  2. "SecondaryIPAddresses": null,
  3. "IPAddress": "172.17.0.2",
  4. "IPAddress": "172.17.0.2",)

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

四。docker構建映像

    1》模擬環境

        使用centos作為基礎映象  在centos映象中安裝tomcat  然後經埠8080對映為主機80

    2》構建方式(確認安裝並啟動docker)

       》手動構建

             >>下載centos映象 (docker pull centos)

             >> 啟動centos容器 掛載主機和容器目錄用於上傳jdk和tomcat , 對映80埠到8080 ,並且進入偽終端:                   


    
  1. #主機建立目錄
  2. mkdir /data
  3. #執行容器
  4. docker run -it -p 80:8080 -v /data:/data centos
             >>  下載jdk和tomcat在主機/data目錄 並再次進入偽終端

 


    
  1. [[email protected] data]# ll
  2. total 63016
  3. -rw-r--r-- 1 root root 7073612 Sep 23 2016 apache-tomcat-6.0.45.tar.gz
  4. -rw-r--r-- 1 root root 57450587 Sep 23 2016 jre-8u77-linux-x64.rpm
  5. [[email protected] data]# docker ps -a
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. b1f3d11cfb4a centos "/bin/bash" 5 minutes ago Exited (0) 4 minutes ago gigantic_liskov
  8. [[email protected] data]# docker start b1f3d11cfb4a
  9. b1f3d11cfb4a
  10. [[email protected] data]# docker attach b1f3d11cfb4a
             檢視docker容器中 /data目錄是否存在 tomcat和jre檔案


    
  1. [[email protected] /]# cd data
  2. [[email protected] data]# ll
  3. total 63016
  4. -rw-r--r-- 1 root root 7073612 Sep 24 2016 apache-tomcat-6.0.45.tar.gz
  5. -rw-r--r-- 1 root root 57450587 Sep 24 2016 jre-8u77-linux-x64.rpm
       >>安裝jdk和tomcat        


    
  1. rpm -ivh jre-8u77-linux-x64.rpm
  2. tar zxvf apache-tomcat-6.0.45.tar.gz
  3. mv apache-tomcat-6.0.45 tomcat6
  4. 如果出現 /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


    
  1. [[email protected] data]# docker start b1f3d11cfb4a
  2. b1f3d11cfb4a
  3. [[email protected] data]# docker exec b1f3d11cfb4a /data1/tomcat6/bin/startup.sh
    docker要求容器中 執行的程式必須是前端執行的(也就是執行後 不能再輸入命令) 預設的tomcat8 是使用deamon方式執行(執行完成後 後臺執行可以繼續輸入命令列 ) 所以 開啟catalina.sh 稍作修改 將tomcat6 改為前端執行

    委屈


      >>建立映象    


    
  1. [[email protected] data]# docker commit -a "jiaozi" b1f3d11cfb4a mytomcat
  2. sha256:f313d1d9e9740877846ce26c73e30a9b827d1a22a98dd4130c3476446b058a67
  3. [[email protected] data]# docker images
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. mytomcat latest f313d1d9e974 5 seconds ago 534.1 MB
  6. docker.io/centos latest 328edcd84f1b 3 weeks ago 192.5 MB
  7. docker.io/nginx latest b8efb18f159b 4 weeks ago 107.5 MB
  8. 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檔案 


    
  1. #基於centos映象來構建
  2. FROM centos
  3. #建立一個目錄
  4. RUN mkdir -p /data
  5. #將本地伺服器拷貝到遠端 /data目錄
  6. COPY apache-tomcat-6.0.45.tar.gz /data/
  7. COPY jre-8u77-linux-x64.rpm /data/
  8. #進入工作目錄
  9. WORKDIR /data
  10. #解壓tomcat和安裝jdk
  11. RUN tar zxvf apache-tomcat-6.0.45.tar.gz
  12. RUN rpm -ivh jre-8u77-linux-x64.rpm
  13. COPY catalina.sh /data/apache-tomcat-6.0.45/bin
  14. #指定容器啟動時預設的執行命令
  15. CMD /data/apache-tomcat-6.0.45/bin/startup.sh


  執行命令  

docker build -t autotomcat .    #最後一個.表示當前目錄 -t表示映象名稱:tag
    
  自動多步驟將以上指令碼內容執行  完成後檢視映象中多了個autotomcat


    
  1. [[email protected] data]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. autotomcat latest 39ccbb1a0b65 3 minutes ago 465 MB
使用映象 啟動容器 訪問tomcat http://主機名 成功

 docker run -d -p 80:8080 autotomcat 
    

五。docker映像和容器遷移

1》容器遷移(dockerfile指定預設映象啟動的cmd會丟失 匯入啟動重新指定啟動命令)

   檢視啟動的容器


    
  1. [[email protected] ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 0b9716216938 autotomcat "/bin/sh -c /data/apa" 2 hours ago Up 2 hours 0.0.0.0:80->8080/tcp ecstatic_mestorf
  匯出容器(匯出容器為tar包 匯出的其實就是一個映象)


    
  1. [[email protected] ~]# docker export --help
  2. Usage: docker export [OPTIONS] CONTAINER
  3. Export a container's filesystem as a tar archive
  4. Options:
  5. --help Print usage
  6. -o, --output string Write to a file, instead of STDOUT
  7. [[email protected] ~]# docker export 0b9716216938 -o my.tar
  8. [[email protected] ~]# ll
  9. total 612240
  10. -rw-------. 1 root root 2913 Apr 5 2016 anaconda-ks.cfg
  11. drwxr-xr-x 2 root root 4096 Nov 30 2016 mysql
  12. -rw-r--r-- 1 root root 172871680 Nov 21 2016 MySQL-5.5.53-1.el7.x86_64.rpm-bundle.tar
  13. -rw------- 1 root root 454053376 Aug 30 02:05 my.tar
 匯入映象(清除之前容器 然後測試匯入)

    
  1. [[email protected] ~]# docker stop 0b9716216938
  2. 0b9716216938
  3. [[email protected] ~]# docker rm 0b9716216938
  4. 0b9716216938
  5. [[email protected] ~]# docker ps -a
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. [[email protected] ~]# docker import --help
  8. Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
  9. Import the contents from a tarball to create a filesystem image
  10. Options:
  11. -c, --change value Apply Dockerfile instruction to the created image (default [])
  12. --help Print usage
  13. -m, --message string Set commit message for imported image
  14. [[email protected] ~]# docker import ~/my.tar mycontainer
  15. sha256:2fada1f574e58e15e9bd3be3a460cf9ed49afdebb3c0acf77c3b0b9755a9f0d0
  16. [[email protected] ~]# docker ps -a
  17. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  18. [[email protected] ~]# docker images
  19. REPOSITORY TAG IMAGE ID CREATED SIZE
  20. mycontainer latest 2fada1f574e5 22 seconds ago 445.7 MB
  21. autotomcat latest 2cdd3ea7c459 3 hours ago 465 MB
  22. mytomcat1 latest 4f7b426f3c13 7 hours ago 680.2 MB
  23. docker.io/centos latest 328edcd84f1b 3 weeks ago 192.5 MB
  24. docker.io/nginx latest b8efb18f159b 5 weeks ago 107.5 MB
  25. docker.io/hello-world latest 1815c82652c0 10 weeks ago 1.84 kB
  26. [[email protected] ~]# docker run -d -p 80:8080 mycontainer /bin/bash #必須指定啟動的命令 否則執行錯誤 建議備份使用save和load

2》映象遷移

映象匯出(docker save)


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

映象還原(docker load)


    
  1. [[email protected] ~]# docker rmi autotomcat
  2. Untagged: autotomcat:latest
  3. Deleted: sha256:2cdd3ea7c45993df666aae424a8d1481625b9eebb1d71cc038ed1f863cb1d188
  4. Deleted: sha256:ac56923130beb6fee5dff01b71b372031f0b8fc3aed358e88908e46a71b2addf
  5. Deleted: sha256:980448f3feaa6eb532fae0b21becde0058a1ea218fc6daa50c8c98157935680c
  6. Deleted: sha256:8a6a4b46aa45b13cff98a812effa2a59d9c057b3cfe249ac6b60a7021af44e28
  7. Deleted: sha256:cbb95e9582c5ab78e2e1c20bf80fcff9718d4da0794a774dbbcf96a55aa88f77
  8. Deleted: sha256:1fcfc02f4248149e893e601a5fef3821ae0f456af9acd09b93b10633bf7017f6
  9. Deleted: sha256:b0e1b6b888bc29d40af4f62440b4332ea48402462a2dfa4a2416b5cfe482f7e7
  10. Deleted: sha256:0863d1db247f560508cf5f8e6aacdc537e5b4a48006f2fae652c8cc64fce5838
  11. Deleted: sha256:61e56c66f3236cca8e7df1a6b373da038ec6462e014386f7d77773476bbc9cf2
  12. Deleted: sha256:2b42f6b1718f9c3cd6ce8ca80ed1ed483ac9c4de97137e8813f8883f3ec80d7d
  13. Deleted: sha256:50ecf85d2a745a7d394bbf860e73c93f021a49a3c3e741d3fc2f61c6a3b141e9
  14. Deleted: sha256:d37ed07fc7f41063407aa40acf4e80d81da86051f0ae008e90171d0e47ea97fb
  15. Deleted: sha256:12a6f42f828df7d028e6401efcba0150aa6f5152e9f17202387331163e075986
  16. Deleted: sha256:94826b9151a3239f5f435b2345c787d005b12a9d771bfe5d180e4181cae2b203
  17. [[email protected] ~]# ll
  18. total 1074548
  19. -rw-------. 1 root root 2913 Apr 5 2016 anaconda-ks.cfg
  20. -rw------- 1 root root 473401856 Aug 30 02:17 autotomcat.tar
  21. drwxr-xr-x 2 root root 4096 Nov 30 2016 mysql
  22. -rw-r--r-- 1 root root 172871680 Nov 21 2016 MySQL-5.5.53-1.el7.x86_64.rpm-bundle.tar
  23. -rw------- 1 root root 454053376 Aug 30 02:05 my.tar
  24. [[email protected] ~]# docker load --help
  25. Usage: docker load [OPTIONS]
  26. Load an image from a tar archive or STDIN
  27. Options:
  28. --help Print usage
  29. -i, --input string Read from tar archive file, instead of STDIN
  30. -q, --quiet Suppress the load output
  31. [[email protected] ~]# docker load -i autotomcat.tar
  32. 061db0905f5c: Loading layer [==================================================>] 2.56 kB/2.56 kB
  33. cbf3c8e9e1c0: Loading layer [==================================================>] 7.076 MB/7.076 MB
  34. 9de133ced06e: Loading layer [==================================================>] 49.22 MB/49.22 MB
  35. 3dad1ba7daa6: Loading layer [==================================================>] 11.2 MB/11.2 MB
  36. 7b93ff490943: Loading layer [==================================================>] 205.7 MB/205.7 MB
  37. 98caa7f18e3c: Loading layer [==================================================>] 20.99 kB/20.99 kB
  38. Loaded image: autotomcat:latest
  39. [[email protected] ~]# docker images
  40. REPOSITORY TAG IMAGE ID CREATED SIZE
  41. autotomcat latest 2cdd3ea7c459 3 hours ago 465 MB
  42. mytomcat1 latest 4f7b426f3c13 7 hours ago 680.2 MB
  43. docker.io/centos latest 328edcd84f1b 3 weeks ago 192.5 MB
  44. docker.io/nginx latest b8efb18f159b 5 weeks ago 107.5 MB
  45. docker.io/hello-world latest 1815c82652c0 10 weeks ago 1.84 kB




一。docker簡介

      Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,
然後釋出到任何流行的 Linux 機器上
   一個完整的Docker有以下幾個部分組成:
     DockerClient客戶端 
     Docker Daemon守護程序
     Docker Image映象
     Docker Container容器[2] 
     Docker Registry 倉庫:分 公有(Docker Hub)、私有

二。docker安裝

  》》 安裝 yum -y install docker

  》》啟動 systemctl start docker

三。docker常用命令

   1》列表顯示所有的docker命令

   docker --help  

   2》 常用命令解釋

    docker search映象名稱  (比如 centos,ubutu,nginx等) 搜尋遠端倉庫中的映象

    docker images 檢視本地所有映象

    docker  pull 映象名稱    下載遠端倉庫的映象 

    docker run  [可選引數] 映象名稱 【進入倉庫後執行命令】

       執行某個映象 執行後的映象就是容器 就是程序的容器

        --name 名稱 指定容器名稱  比如 docker run --name mycentos centos 表示執行一個為mycentos的centos倉庫

        -t 表示開啟一個偽中斷