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. [root@bogon 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. ([root@cdh2 ~]# 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. [root@bogon 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. [root@bogon 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. [root@bogon data]# docker start b1f3d11cfb4a
  9. b1f3d11cfb4a
  10. [root@bogon data]# docker attach b1f3d11cfb4a
             查看docker容器中 /data目录是否存在 tomcat和jre文件


   
   
  1. [root@b1f3d11cfb4a /]# cd data
  2. [root@b1f3d11cfb4a 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. [root@bogon data]# docker start b1f3d11cfb4a
  2. b1f3d11cfb4a
  3. [root@bogon data]# docker exec b1f3d11cfb4a /data1/tomcat6/bin/startup.sh
    docker要求容器中 运行的程序必须是前端运行的(也就是运行后 不能再输入命令) 默认的tomcat8 是使用deamon方式运行(运行完成后 后台运行可以继续输入命令行 ) 所以 打开catalina.sh 稍作修改 将tomcat6 改为前端运行

    委屈


      >>创建镜像    


   
   
  1. [root@bogon data]# docker commit -a "jiaozi" b1f3d11cfb4a mytomcat
  2. sha256:f313d1d9e9740877846ce26c73e30a9b827d1a22a98dd4130c3476446b058a67
  3. [root@bogon 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. [root@bogon 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. [root@bogon ~]# 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. [root@bogon ~]# 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. [root@bogon ~]# docker export 0b9716216938 -o my.tar
  8. [root@bogon ~]# 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. [root@bogon ~]# docker stop 0b9716216938
  2. 0b9716216938
  3. [root@bogon ~]# docker rm 0b9716216938
  4. 0b9716216938
  5. [root@bogon ~]# docker ps -a
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. [root@bogon ~]# 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. [root@bogon ~]# docker import ~/my.tar mycontainer
  15. sha256:2fada1f574e58e15e9bd3be3a460cf9ed49afdebb3c0acf77c3b0b9755a9f0d0
  16. [root@bogon ~]# docker ps -a
  17. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  18. [root@bogon ~]# 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. [root@bogon ~]# docker run -d -p 80:8080 mycontainer /bin/bash #必须指定启动的命令 否则执行错误 建议备份使用save和load

2》镜像迁移

镜像导出(docker save)


   
   
  1. [root@bogon ~]# 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. [root@bogon ~]# 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. [root@bogon ~]# docker save autotomcat -o autotomcat.tar

镜像还原(docker load)


   
   
  1. [root@bogon ~]# 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. [root@bogon ~]# 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. [root@bogon ~]# 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. [root@bogon ~]# 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. [root@bogon ~]# 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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值