百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

分享,项目docker打包 docker打包django项目

bigegpt 2024-10-03 14:55 3 浏览



项目团队成员对docker不是很熟悉,所以整理了一下docker打包的过程,方便大家在后面的快速部署打包上能有比较高的效率。

总体流程有以下几个步骤:

准备两台机器:

192.168.0.54(镜像仓库服务器)

192.168.0.55(微服务应用服务器)

  1. 支撑环境的安装
  • 安装私有镜像仓库(harbor)
在192.168.0.54服务器中安装docker环境和harbor私有镜像仓库,安装过程参考网络文章即可。  
同时开通 tcp://192.168.0.54:2375 连接

开通方式(docker 开启2375端口,提供外部访问docker):

vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重启服务

systemctl daemon-reload // 1,加载docker守护线程 
systemctl restart docker // 2,重启docker

安装后,浏览器访问如下图:





  • 安装docker环境及docker-compose服务
在192.168.0.55 安装docker和dokcer-compose,安装过程参考网络文章即可。


  1. IDEA配置相环境
  • 配置idea环境Docker



  • 配置私有镜像仓库docker registry


  • 通过IDEA 构建打包镜像


配置docker执行文件,选择打包环境,选择已经写好的Dockerfile脚本文件,写好镜像名称,勾选掉运行容器按钮,不让它运行,确认即可。

执行此运行配置,即可打包docker镜像。

  • 把已经打好的镜像推送到私有镜像仓库(192.168.0.54)中。



其中:

Registry :配置的镜像仓库地址 
Repository:程仓库地址,如:192.168.0.54/ts-common-lib/ts-base
tag:版本标记 如:0.0.1
  1. 微服务docker脚本的编写

本次一共需要安装以下几个微服务服务:注册中心、配置中心、网关服务、鉴权服务、业务支撑、BI服务。

需要安装应用服务:nginx

其中redis和数据库为外部提供,因此不需要在容器中安装。

  • 安装服务前,安装ts-base基础依赖包,依赖包中包含:centos+jdk环境,这样做的目的统一依赖环境。可以把每个微服务都需要的一些依赖打到这个包中,但要注意的事情,它会影响镜像的容量大小。
#  执行构建程序。
FROM       centos:7.5.1804
MAINTAINER by bask (jli@tsingsoft.com.cn)

#添加jdk安装包
ADD ./jdk-8u121-linux-x64.tar.gz /usr/local/

# 只有通过ENV 环境变量才会生效,通过写/etc/profile的方式不行。
ENV JAVA_HOME /usr/local/jdk1.8.0_121
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin

如图:



  • 注册中心脚本
FROM 192.168.0.54/ts-common-lib/ts-base:0.0.1
MAINTAINER by bask (jli@tsingsoft.com.cn)
VOLUME /tmp
ADD ts-eureka-0.0.1.jar eureka.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08","-jar","/eureka.jar"]
EXPOSE 1002
  • 配置中心
FROM 192.168.0.54/ts-common-lib/ts-base:0.0.1
MAINTAINER by bask (jli@tsingsoft.com.cn)

VOLUME /tmp
ADD ts-config-0.0.1.jar config.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08","-jar","/config.jar"]
EXPOSE 2002
  • 网关服务
FROM 192.168.0.54/ts-common-lib/ts-base:0.0.1
VOLUME /tmp
ADD ts-gateway-0.0.1.jar gateway.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08","-jar","/gateway.jar"]
EXPOSE 3002
  • 鉴权服务
FROM 192.168.0.54/ts-common-lib/ts-base:0.0.1
VOLUME /tmp
ADD ts-auth-0.0.1.jar auth.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08","-jar","/auth.jar"]
EXPOSE 4002
  • 业务支撑
FROM 192.168.0.54/ts-common-lib/ts-base:0.0.1
VOLUME /tmp
ADD ts-biz-support-0.0.1-SNAPSHOT.jar support.jar
COPY Apache_OpenOffice_4.1.6_Linux_x86-64_install-rpm_zh-CN.tar.gz Apache_OpenOffice_4.1.6_Linux_x86-64_install-rpm_zh-CN.tar.gz
#安装OpenOffice
RUN tar -xvf Apache_OpenOffice*.tar.gz && \
yum install -y zh-CN/RPMS/*.rpm && \
yum groupinstall -y "X Window System" && \
#清除yum缓存
yum clean all && \
#删除压缩包
rm -f Apache_OpenOffice_4.1.6_Linux_x86-64_install-rpm_zh-CN.tar.gz&& \
#删除解压缩的文件
rm -Rf zh-CN
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08","-jar","/support.jar"]
EXPOSE 6002
  • BI服务
FROM 192.168.0.54/ts-common-lib/ts-base:0.0.1
VOLUME /tmp
ADD ts-bi-0.0.1-SNAPSHOT.jar bi.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/bi.jar"]
EXPOSE 5002
  1. 一健部署脚本的编写
version: "3"
services:
  ts-nginx:
    image: 192.168.0.54/ts-common-lib/ts-nginx:1.10.1
    ports:
      - 80:80
      - 443:443
    privileged: true #修改容器权限,给容器加特权
    volumes:
      - /data/nginx/html:/usr/local/nginx/html:rw
      - /data/nginx/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf
      - /data/nginx/logs:/usr/local/nginx/logs:rw
      - /data/nginx/cert:/usr/local/nginx/cert:rw
    command: /bin/bash -c "exec nginx -g 'daemon off;'"

  ts-center:
    image: 192.168.0.54/hb-trade-center/ts-center:0.0.2
    ports:
      - "1002:1002"
    hostname: ts-center
    restart: always

  ts-config:
    image: 192.168.0.54/hb-trade-center/ts-config:0.0.1
    ports:
      - "2002:2002"
    hostname: ts-config
    environment:
      - "eureka_client_serviceUrl_defaultZone=http://tsingsoft:Tsingsoft2018@192.168.0.55:1002/eureka"
    restart: always
    depends_on:
      - ts-center

  ts-gateway:
    image: 192.168.0.54/hb-trade-center/ts-gateway:0.0.2
    ports:
      - "3002:3002"
    hostname: ts-gateway
    restart: always
    depends_on:
      - ts-center
      - ts-config
    environment:
      - "spring_profiles_active=hb-test"
      - "eureka_client_serviceUrl_defaultZone=http://tsingsoft:Tsingsoft2018@192.168.0.55:1002/eureka"

  ts-biz-support:
    image: 192.168.0.54/hb-trade-center/ts-biz-support:0.0.2
    ports:
      - "6002:6002"
    hostname: ts-biz-support
    restart: always
    depends_on:
      - ts-center
      - ts-config
    environment:
      - "spring_profiles_active=hb-test"
      - "eureka_client_serviceUrl_defaultZone=http://tsingsoft:Tsingsoft2018@192.168.0.55:1002/eureka"

  ts-auth:
    image: 192.168.0.54/hb-trade-center/ts-auth:0.0.1
    ports:
      - "4002:4002"
    hostname: ts-auth
    restart: always
    depends_on:
      - ts-center
      - ts-config
    environment:
      - "spring_profiles_active=hb-test"
      - "eureka_client_serviceUrl_defaultZone=http://tsingsoft:Tsingsoft2018@192.168.0.55:1002/eureka"

  ts-bi:
    image: 192.168.0.54/hb-trade-center/ts-bi:0.0.1
    ports:
      - "5002:5002"
    hostname: ts-bi
    restart: always
    depends_on:
      - ts-center
      - ts-config
    environment:
      - "spring_profiles_active=hb-test"
      - "eureka_client_serviceUrl_defaultZone=http://tsingsoft:Tsingsoft2018@192.168.0.55:1002/eureka"

nginx.conf 主配置参考:

user nginx nginx;

worker_processes  1;

#daemon off;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  65535;
    multi_accept on;
}

http {
    fastcgi_connect_timeout 1200;
    fastcgi_send_timeout 1200;
    fastcgi_read_timeout 1200;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 256k;
    client_max_body_size 20M;
    #add_header Access-Control-Allow-Origin *;
    #add_header Access-Control-Allow-Headers X-Requested-With;
    #add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    #gzip_http_version 1.0;
    gzip_comp_level 8;
    gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif     image/png;
    gzip_vary on;
    gzip_disable "MSIE [1-6]\.";

	server {
        listen   80;
        server_name  192.168.0.55;
        charset utf-8;
        root /usr/local/nginx/html;
        #access_log  logs/host.access.log  main;


        location /{
            index  index.html index.htm;
            if ( $request_uri = "/" ) {
                rewrite "/" http://192.168.0.55/trade/index break;
            }
            alias   /usr/local/nginx/html/trade;
        }

        location /power {
            try_files $uri $uri/ /power/index.html;
            index  index.html index.htm;
            root  /usr/local/nginx/html;
            proxy_set_header X-real-ip           $remote_addr;
            proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
        }
        location /trade {
            try_files $uri $uri/ /trade/index.html;
            index  index.html index.htm;
            root  /usr/local/nginx/html;
            proxy_set_header X-real-ip           $remote_addr;
            proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
        }
        location /trade/login {
            try_files $uri $uri/ /trade/index.html;
            index  index.html index.htm;
            root  /usr/local/nginx/html;
            proxy_set_header X-real-ip           $remote_addr;
            proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
        }
        location /auth {
            try_files $uri $uri/ /auth/index.html;
            index  index.html index.htm;
            root  /usr/local/nginx/html;
            proxy_set_header X-real-ip           $remote_addr;
            proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
        }

        location /api/ {
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Accept";
            proxy_set_header X-real-ip           $remote_addr;
            proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
            # /api
            proxy_pass http://192.168.0.55:3002/;
            proxy_connect_timeout 300s;
            proxy_send_timeout 300s;
            proxy_read_timeout 300s;
        }
        location /file {
            alias file;
        }
        location /ws/ {
            # /ws
            proxy_pass http://192.168.0.55:3002;
            proxy_http_version 1.1;
            proxy_set_header X-real-ip           $remote_addr;
            proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
            proxy_set_header Upgrade websocket;
            proxy_set_header Connection "Upgrade";
            proxy_connect_timeout       1200;
            proxy_send_timeout          1200;
            proxy_read_timeout          1200;
            send_timeout                1200;

        }

        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #

    }
	
    # include /etc/nginx/dev-conf/*.conf;
}
  1. docker的相关命令
1 优化命令
1.1 清理命令  
           docker image prune -a # 清理没有用到的镜像

1.2 删除前应该停止所有的容器:
     docker stop $(docker ps -a -q)
1.3 批量删除tag为"<none>"镜像可以采用如下方法(下面两种方式均可以):
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
docker images | grep none | awk '{print $3}' | xargs docker rmi

1.4 删除所有停止的容器:
docker rm $(docker ps -a -q)

1.5 强制删除所有的镜像:

docker rmi -f $(docker images -q)

2 容器相关
docker run -d -p 91:80 nginx :在后台运行nginx,若没有镜像则先下载,并将容器的80端口映射为宿主机的91端口。

-d:后台运行
-P:随机端口映射
-p:指定端口映射
-net:网络模式
docker ps:列出运行中的容器
docker ps -a :列出所有的容器
docker stop 容器id:停止容器
docker kill 容器id:强制停止容器
docker start 容器id:启动已停止的容器
docker inspect 容器id:查看容器的所有信息
docker container logs 容器id:查看容器日志
docker top 容器id:查看容器里的进程
docker exec -it 容器id /bin/bash:进入容器
exit:退出容器
docker rm 容器id:删除已停止的容器
docker rm -f 容器id:删除正在运行的容器

构建镜像
确定镜像模板:如java、nginx
新建Dockerfile文件
使用Dockerfile的指令完善Dockerfile的内容
在Dockerfile文件的所在路径执行docker build -t imageName:tag .,-t指定镜像名称,末尾的点标识Dockerfile文件的路径
执行docker run -d -p 92:80 imageName:tag即可
  1. 如何调试查错。
docker logs 【containerId】 # 查看日志

docker exec -it 【containerId】 bin/bash # 进入容器内部

docker生态还有很多内容,等待大家去发现。


作者:程序员,晒太阳

相关推荐

有些人能留在你的心里,但不能留在你生活里。

有时候,你必须要明白,有些人能留在你的心里,但不能留在你生活里。Sometimes,youhavetorealize,Somepeoplecanstayinyourheart,...

Python学不会来打我(34)python函数爬取百度图片_附源码

随着人工智能和大数据的发展,图像数据的获取变得越来越重要。作为Python初学者,掌握如何从网页中抓取图片并保存到本地是一项非常实用的技能。本文将手把手教你使用Python函数编写一个简单的百度图片...

软网推荐:图像变变变 一“软”见分晓

当我们仅需要改变一些图片的分辨率、裁减尺寸、添加水印、标注文本、更改图片颜色,或将一种图片转换为另一种格式时,总比较讨厌使用一些大型的图像处理软件,尤其是当尚未安装此类软件时,更是如此。实际上,只需一...

首款WP8.1图片搜索应用,搜照片得资料

首款WP8.1图片搜索应用,搜照片得资料出处:IT之家原创(天际)2014-11-1114:32:15评论WP之家报道,《反向图片搜索》(ReverseImageSearch)是Window...

分享一组美图(图片来自头条)(头条美女头像)

...

盗墓笔记电视剧精美海报 盗墓笔记电视剧全集高清种子下载

出身“老九门”世家的吴邪,因身为考古学家的父母在某次保护国家文物行动时被国外盗墓团伙杀害,吴家为保护吴邪安全将他送去德国读书,因而吴邪对“考古”事业有着与生俱来的兴趣。在一次护宝过程中他偶然获得一张...

微软调整Win11 24H2装机策略:6月起36款预装应用改为完整版

IT之家7月16日消息,微软公司今天(7月16日)发布公告,表示自今年6月更新开始,已默认更新Windows1124H2和WindowsServer2025系统中预装...

谷歌手把手教你成为谣言终结者 | 域外

刺猬公社出品,必属原创,严禁转载。合作事宜,请联系微信号:yunlugongby贾宸琰编译、整理11月23日,由谷歌新闻实验室(GoogleNewsLab)联合Bellingcat、DigD...

NAS 部署网盘资源搜索神器:全网资源一键搜,免费看剧听歌超爽!

还在为找不到想看的电影、电视剧、音乐而烦恼?还在各个网盘之间来回切换,浪费大量时间?今天就教你如何在NAS上部署aipan-netdisk-search,一款强大的网盘资源搜索神器,让你全网资源...

使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建

前言回顾在上一篇文章《搭建持久化的INFINIConsole与Easysearch容器环境》中,我们详细介绍了如何使用基础的dockerrun命令,手动启动和配置INFINICon...

为庆祝杜特尔特到访,这个国家宣布全国放假?

(观察者网讯)近日,一篇流传甚广的脸书推文称,为庆祝杜特尔特去年访问印度,印度宣布全国放假,并举办了街头集会以示欢迎。菲媒对此做出澄清,这则消息其实是“假新闻”。据《菲律宾世界日报》2日报道,该贴子...

一课译词:毛骨悚然(毛骨悚然的意思是?)

PhotobyMoosePhotosfromPexels“毛骨悚然”,汉语成语,意思是毛发竖起,脊梁骨发冷;形容恐惧惊骇的样子(withone'shairstandingonend...

Bing Overtakes Google in China&#39;s PC Search Market, Fueled by AI and Microsoft Ecosystem

ScreenshotofBingChinahomepageTMTPOST--Inastunningturnintheglobalsearchenginerace,Mic...

找图不求人!6个以图搜图的识图网站推荐

【本文由小黑盒作者@crystalz于03月08日发布,转载请标明出处!】前言以图搜图,专业说法叫“反向图片搜索引擎”,是专门用来搜索相似图片、原始图片或图片来源的方法。常用来寻找现有图片的原始发布出...

浏览器功能和“油管”有什么关联?为什么要下载

现在有没有一款插件可以实现全部的功能,同时占用又小呢,主题主要是网站的一个外观,而且插件则主要是实现wordpress网站的一些功能,它不仅仅可以定制网站的外观,还可以实现很多插件的功能,搭载chro...