zoukankan      html  css  js  c++  java
  • docker简单入门之使用docker容器部署简单的java web开源项目jpress博客程序

    一、在centos7.3上安装docker
    前置条件
    x86_64-bit 系统
    kernel 3.10+
    
    1.检查内核版本,返回的值大于3.10即可
    [root@node1 ~]# uname -r
    3.10.0-514.el7.x86_64
    
    2.使用 sudo 或 root 权限的用户登入终端
    
    3.卸载旧版本(如果安装过旧版本的话)
    # yum remove docker docker-common docker-selinux docker-engine
    
    4.安装需要的软件包
    # yum-util提供yum-config-manager功能#另外两个是devicemapper驱动依赖的
    
    $ yum install -y yum-utils device-mapper-persistent-data lvm2
    
    5.设置yum源
    $ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    6.安装docker
    6.1. 安装最新版本
    $ yum install -y docker-ce
    
    6.2. 安装指定版本
    #查询版本列表
    $ yum list docker-ce --showduplicates | sort -r已加载插件:fastestmirror, langpacks已安装的软件包可安装的软件包
     * updates: mirrors.163.comLoading mirror speeds from cached hostfile
     * extras: mirrors.163.com
    docker-ce.x86_64            17.09.1.ce-1.el7.centos            docker-ce-stable
    docker-ce.x86_64            17.09.0.ce-1.el7.centos            docker-ce-stable...#指定版本安装(这里的例子是安装上面列表中的第二个)
    $ yum install -y docker-ce-17.09.0.ce
    
    7.启动docker服务
    
    systemctl start docker.service
    7.验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
    
    [root@node1 ~]# docker version
    Client:
     Version:    18.03.0-ce
     API version:    1.37
     Go version:    go1.9.4
     Git commit:    0520e24
     Built:    Wed Mar 21 23:09:15 2018
     OS/Arch:    linux/amd64
     Experimental:    false
     Orchestrator:    swarm
    
    Server:
     Engine:
      Version:    18.03.0-ce
      API version:    1.37 (minimum version 1.12)
      Go version:    go1.9.4
      Git commit:    0520e24
      Built:    Wed Mar 21 23:13:03 2018
      OS/Arch:    linux/amd64
      Experimental:    false
    
    二、镜像的安装和简单操作
    1.拉取并运行hello-world测试镜像
    # 查看镜像 [root@node1
    ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE # 拉取hello-world镜像 [root@node1 ~]# docker pull hello-world 运行hello-world # 运行hello-world镜像 [root@node1 ~]# docker run hello-world 三、容器的网络 1.拉取并运行nginx镜像 # 拉取nignx镜像 # docker pull nginx 因为nginx需要在外部访问,而我们是无法直接访问容器里面的应用的,需要进行端口映射 # 后台启动nginx容器 [root@node1 ~]# docker run -d nginx e07f4cbc4ea9d7e53944b729535a596a651d278531a3450d25ea733b2f60a9ac # 启动nginx容器,将容器的80端口映射到宿主机的8080端口上 [root@node1 ~]# docker run -d -p 8080:80 nginx b1194639fc58f2fb24adaa72140cd0e44ee88d133fc73d846b93c4ca57c8fb39 # 查看容器状态 [root@node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b1194639fc58 nginx "nginx -g 'daemon of…" 2 seconds ago Up 1 second 0.0.0.0:8080->80/tcp elastic_mayer [root@node1 ~]# netstat -an|grep 8080 tcp6 0 0 :::8080 :::* LISTEN 进入容器,原生nginx容器只支持少量的命令 [root@node1 ~]# docker exec -it b1194639fc58 bash root@16f19cac5349:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@16f19cac5349:/# nginx status nginx: invalid option: "status" root@16f19cac5349:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx 访问宿主机的8080端口就可以访问容器里的nginx服务了 停用nginx,重新启动nginx [root@node1 ~]# docker stop b1194639fc58 b1194639fc58 [root@node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 刚才我是将容器的端口指定到宿主机的特定端口,我们还可以将将容器的内部的端口映射到宿主机的随机端口,可以看到nginx的80映射到了宿主机的32768端口上 [root@node1 ~]# docker run -d -P nginx 16f19cac53494281f184799e94dbde41cfae672f68509363c26191e44aab8fa4 [root@node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 16f19cac5349 nginx "nginx -g 'daemon of¡­" 4 seconds ago Up 2 seconds 0.0.0.0:32768->80/tcp competent_davinci # 可以看到宿主机中监听了32768端口,访问宿主机的32768也可以正常访问nginx [root@node1 ~]# netstat -an|grep 32768 tcp6 0 0 :::32768 :::* LISTEN 四、制作自己的镜像,运行一个自己的java web程序 这里已一个java的开源博客系统jpress举例,jpress是一个类似wordpress的博客程序,区别是一个是php源码,一个是java源码 1.下载jpress的war包 2.下载tomcat容器作为基础镜像,并编写Dockefile文件 [root@node1 ~]# docker pull tomcat 在jpress.war所在目录建立Dockefile文件 [root@node1 ~]# cat Dockerfile # 说明是以tomcat为基础模板 from tomcat # 容器的版权信息 MAINTAINER jack jack@163.com # 拷贝war包发布到tomcat的www web程序发布目录 COPY jpress.war /usr/local/tomcat/webapps 3.创建一个叫做jpress:latest的镜像 [root@node1 ~]# docker build -t jpress:latest .
    启动容器将容器的8080端口映射到宿主机的8888 [root@node1
    ~]# docker run -d -p 8888:8080 jpress 04252a52ecffab83d151a7d37aa24c0acd0b7bc75607b6cc8da2c017ee84ac4b 访问tomcat,可以看到能够正常访问jpress,http://192.168.3.177:8888/jpress/
    4.安装mysql镜像
    因为jpress后台依赖mysql数据库,需要安装mysql
    # docker pull mysql
    
    运行mysql容器,3306映射到宿主3306,创建密码,数据库为jpress
    [root@node1 ~]# docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=jpress mysql
    7b2ea4ced739ef2e296513f67fcef5fea104a70a1b6badef56cd4fde99df6bc7
    
    现在jpress依赖的mysql和tomcat安装启动完毕,需要继续安装jpress程序,注意数据库主机需要填写宿主机的ip,因为Localhost是找容器的localhost,jpress容器中没有mysql只有Jpress程序
    
    
    5.重新启动Jpress,再次访问网站就ok了
    [root@node1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    7b2ea4ced739        mysql               "docker-entrypoint.s¡­"   8 minutes ago       Up 8 minutes        0.0.0.0:3306->3306/tcp   vigilant_perlman
    04252a52ecff        jpress              "catalina.sh run"        23 minutes ago      Up 23 minutes       0.0.0.0:8888->8080/tcp   lucid_tesla
    16f19cac5349        nginx               "nginx -g 'daemon of¡­"   About an hour ago   Up About an hour    0.0.0.0:32768->80/tcp    competent_davinci
    [root@node1 ~]# docker restart 04252a52ecff
    
    至此,使用docker部署我们自己的一个Java web程序就告一段落
  • 相关阅读:
    HTML页面空格记录     (小计)
    JS对象、构造器函数和原型对象之间的关系
    情人节,送女友一桶代码可否?
    JavaScript中的BOM和DOM
    js中字符替换函数String.replace()使用技巧
    XML DOM 节点类型(Node Types)
    node 基础
    npm脚本命令npm run script的使用
    Node.js学习笔记六,获取get/post请求的参数
    querystring模块详解
  • 原文地址:https://www.cnblogs.com/reblue520/p/8716139.html
Copyright © 2011-2022 走看看