zoukankan      html  css  js  c++  java
  • docker 实战:安装配置

    之前项目使用tomcat部署,随着后期项目越来越多,同一个tomcat下启动N个项目,造成的问题就是更新其中某一个项目会导致整个tomcat重启,其他同一个tomcat下的项目导致暂时无法访问,非常影响工作效率。为了解决这一个痛点,所以目前想到使用docker容器部署配置项目,希望以此可以隔离不同项目环境,使之不互相影响。

    环境说明

    centos7(192.168.1.146,docker宿主机)

    jenkins服务器(192.168.1.143)


    docker安装

    docker安装命令:

    # yum install -y epel-release yum install docker-io
    

    image-20201110142253756

    安装完成之后,需要设置docker随机启动,命令如下

    [root@localhost ~]# systemctl enable docker
    

    截图如下

    image-20201110142728682

    然后启动docker

    [root@localhost system]# systemctl start docker
    Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
    

    第一次启动的时候提示"Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.",这里需要禁用禁用selinux,如图修改docker配置文件

    #vi /etc/sysconfig/docker
    ******
    设置--selinux-enabled=false,如图
    

    image-20201112140245946

    修改保存之后再次启动docker成功!

    tomcat镜像

    此前曾尝试拉去docker官网的tomcat7镜像来进行项目部署,但是发现获取的镜像文件jdk不符合项目需求,所以这里改为使用本地的jdk和tomcat制作镜像。

    下载jdk和tomcat包

    准备需要的jdk版本和tomcat版本,版本要可以一起配合使用;这里使用的是之前项目中用到的jdk-8u152-linux-x64.tar.gz和apache-tomcat-7.0.103.tar.gz,将两个tar包上传到docker服务器中,如图

    image-20201112141208800

    记得要加上可执行权限!!!

    # chmod 777 apache-tomcat-7.0.103.tar.gz
    # chmod 777 jdk-8u152-linux-x64.tar.gz
    

    制作Dockerfile文件

    # touch Dockerfile
    # vi Dockerfile
    
    

    编辑Dockerfile文件,内容如下

    # 基础镜像
    FROM centos
    # 作者
    MAINTAINER  chy
    # 把jdk与tomcat添加到容器中
    ADD jdk-8u152-linux-x64.tar.gz /usr/local/
    ADD apache-tomcat-7.0.103.tar.gz /usr/local/
    # 配置环境变量
    # 设置编码字符
    ENV LC_ALL en_US.UTF-8
    # 留意jdk(tomcat)文件夹的名称,此处必须和jdk(tomcat)解压后的文件名一致,否则无法启动tomcat
    ENV JAVA_HOME /usr/local/jdk1.8.0_152
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.103
    ENV CATALINA_BASE /usr/local/apache-tomcat-7.0.103
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    # 容器运行时监听的端口
    EXPOSE 8080
    #配置容器启动后执行的命令
    ENTRYPOINT /usr/local/apache-tomcat-7.0.103/bin/startup.sh && tail -f /usr/local/apache-tomcat-7.0.103/logs/catalina.out
    #启动时运行tomcat
    CMD ["/usr/local/apache-tomcat-7.0.103/bin/catalina.sh","run"]
    
    
    
    # 以当前目录下(.)的 Dockerfile 文件 构建镜像名为 chy/tomcat 的镜像
    # docker build -t chy/tomcat-70103:v1 .
    # 查看镜像
    # docker images
    
    

    启动项目

    使用docker启动项目有三种方式:

    第一种:把war包丢到宿主机 在丢到container里面丢到tomcat/webapps

    docker cp rcm_test.war 16c1d697bf43:/usr/local/tomcat/webapps
    

    这种方式的弊端据说是容器重启后项目就会不再了,可以尝试验证一下~

    第二种:挂载方式启动:

    #挂载方式启动项目
    # docker run -d -v /docker_file/rcm_test.war:/usr/local/apache-tomcat-7.0.103/webapps/rcm_test.war -p 8081:8080 --name rcm chy/tomcat-70103:v1
    

    第三种方式:使用Dockerfile文件

    这种方式暂时没有尝试,后期验证~

    这个时候就可以正常访问网站了http://192.168.1.146:8081,如图

    image-20201112143621902

    搭建私库

    [root@localhost ~]# docker pull registry
    [root@localhost ~]# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry
    

    修改配置文件

     # vi /etc/docker/daemon.json 
    {"insecure-registries":["192.168.1.146:5000"]}
    # service docker restart
    

    docker常用命令

    # 启动docker服务
    # systemctl start docker
    # 重启docker 容器
    # docker restart id/name
    # 查看镜像&删除镜像
    # docker image ls
    # docker image rm 容器id/容器name
    # 查看启动的所有的进程以及历史记录,docker ps查看的是运行的容器
    # docker ps -a 
    # 关掉容器
    # docker stop e307e884417f(容器id或name)
    # 删除容器
    # docker rm e307e884417f(容器id或name)
    # 启动
    # docker start bdfa03a03a68(容器id或name)
    
    # 查看容器内部的全部细节:
    # docker inspect 容器id
    
    # 进入容器
    # docker exec -it jolly_poincare /bin/bash
    # cd /usr/local/apache-tomcat-7.0.103/logs
    # 查看tomcat日志信息
    # tail -f catalina.out
    

    CI集成

    由于目前暂无介入私库,所以在shell脚本中执行命令进行持续构建。

    构建

    jenkins新建自由风格的项目,增加构建配置(使用centos系统安装的maven工具)如图

    image-20201113162915265

    shell脚本命令如下

    # 由于war需要替换jdbc和licens文件,所有需要解压war包替换文件重新打包
    cd /docker_file/war/target/
    mv *.war rcm_test.war
    mv rcm_test.war /docker_file/rcm_test
    cd /docker_file/rcm_test
    jar -xvf rcm_test.war
    rm rcm_test.war
    cp -rf /docker_file/jdbc.properties /docker_file/rcm_test/WEB-INF/classes/jdbc.properties
    cp -rf /docker_file/license.lic /docker_file/rcm_test/WEB-INF/classes/license.lic
    cd /docker_file/
    ./timestamps_local.sh > release.properties 
    cp -rf /docker_file/release.properties /docker_file/rcm_test/WEB-INF/classes/release.properties
    cd /docker_file/rcm_test/
    jar -cvf rcm_test.war .
    ls | grep -v *.war | xargs rm -rf
    mv rcm_test.war /docker_file/war/target/
    
    构建后操作

    如图:

    image-20201113163022261

    错误指引

    Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details

    如果启动docker提示此错误,需要禁用selinux,方法参考之前配置

    docker启动正常,访问提示"拒绝访问",使用curl方式提示同理

    如图

    image-20201112102505241

    排查过程:
    # 开启防火墙端口访问
    # firewall-cmd --permanent --zone=public --add-port=8081/tcp
    

    tomcat启动正常,没有任何报错信息!很头疼,从头排查查看启动容器配置

    #挂载方式启动项目
    # docker run -d -v /docker_file/rcm_test.war:/usr/local/apache-tomcat-7.0.103/webapps/rcm_test.war -p 8081:8080 --name rcm chy/tomcat-70103:v1
    

    这里第一次启动的时候写错了img

    OPTIONS说明:

    -d: 后台运行容器,并返回容器ID;
    
    -P: 随机端口映射,容器内部端口随机映射到主机的端口
    
    -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
    
    --name="nginx-lb": 为容器指定一个名称;
    

    所以前一个"8081"是主机外部访问的端口,而后一个"8080"是内部容器的端口,这里很重要!!!

    tomcat中文显示

    启动的时候tomcat中文会显示"???",需要在Dockerfile文件中增加字符配置,如图

    image-20201112145500399

    致谢

    docker安装后启动不了

    Docker构建JDK+Tomcat镜像

    docker部署tomcat及web应用全过程和三种实现方式。

    Docker容器部署tomcat出现中文乱码

  • 相关阅读:
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1131 Subway Map (30 分)
    PAT 甲级 1131 Subway Map (30 分)
    AcWing 906. 区间分组 区间贪心
    AcWing 907. 区间覆盖 区间贪心
  • 原文地址:https://www.cnblogs.com/LOVEYU/p/13964192.html
Copyright © 2011-2022 走看看