首页
视频
留言
壁纸
直播
下载
友链
统计
推荐
vue
在线工具
Search
1
ElasticSearch ES 安装 Kibana安装 设置密码
421 阅读
2
记一个报错GC overhead limit exceeded解决方法
344 阅读
3
Teamcity + Rancher + 阿里云Code 实现Devops 自动化部署
230 阅读
4
JAVA秒杀系统的简单实现(Redis+RabbitMQ)
209 阅读
5
分布式锁Redisson,完美解决高并发问题
206 阅读
JAVA开发
前端相关
Linux相关
电商开发
经验分享
电子书籍
个人随笔
行业资讯
其他
登录
/
注册
Search
标签搜索
AOP
支付
小说
docker
SpringBoot
XML
秒杀
K8S
RabbitMQ
工具类
Shiro
多线程
分布式锁
Redisson
接口防刷
Jenkins
Lewis
累计撰写
146
篇文章
累计收到
14
条评论
首页
栏目
JAVA开发
前端相关
Linux相关
电商开发
经验分享
电子书籍
个人随笔
行业资讯
其他
页面
视频
留言
壁纸
直播
下载
友链
统计
推荐
vue
在线工具
搜索到
15
篇与
的结果
2022-08-30
Linux查看java项目启动情况
ps -aux | grep java
2022年08月30日
47 阅读
0 评论
0 点赞
2022-06-08
分享一个正在用的jar启动、关闭、暂停脚本
#!/bin/bash #这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME=某某某.jar #使用说明,用来提示输入参数 usage() { echo "Usage: sh 执行脚本.sh [start|stop|restart|status]" exit 1 } #检查程序是否在运行 is_exist(){ pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' ` #如果不存在返回1,存在返回0 if [ -z "${pid}" ]; then return 1 else return 0 fi } #启动方法 start(){ is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is already running. pid=${pid} ." else nohup java -jar -Xms1024m -Xmx2048m -Dapollo.meta=http://192.168.44.120:8080 $APP_NAME & fi } #停止方法 stop(){ is_exist if [ $? -eq "0" ]; then kill -9 $pid else echo "${APP_NAME} is not running" fi } #输出运行状态 status(){ is_exist if [ $? -eq "0" ]; then echo "${APP_NAME} is running. Pid is ${pid}" else echo "${APP_NAME} is NOT running." fi } #重启 restart(){ stop start } #根据输入参数,选择执行对应方法,不输入则执行使用说明 case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) usage ;; esac
2022年06月08日
47 阅读
0 评论
0 点赞
2022-04-28
一些查看linux配置的指令
# 设置主机名 hostnamectl set-hostname # CPU个数: $ grep ``'physical id'` `/``proc``/``cpuinfo | sort ``-``u | wc ``-``l # CPU核数: $ cat ``/``proc``/``cpuinfo | grep ``"cpu cores"` `| uniq # CPU型号: $ cat ``/``proc``/``cpuinfo | grep ``'model name'` `|uniq # cpu内核频率: $ cat ``/``proc``/``cpuinfo |grep MHz|uniq # 查看CPU统计信息: $ lscpu # 内存总数: $ cat ``/``proc``/``meminfo | grep MemTotal # 内核版本: $ cat ``/``proc``/``version # 操作系统内核信息: uname -a # 查看显卡; $ lspci | grep ``-``i vga # 机器型号: dmidecode | grep "Product Name" # 主板型号: dmidecode |grep -A16 "System Information$" # 磁盘信息: fdisk -l # 操作系统发行版信息: cat /etc/redhat-release
2022年04月28日
45 阅读
0 评论
0 点赞
2022-03-28
记录一个启动sentinel的脚本
执行前提:1.在/usr/local/sentinel/目录下添加sentinel-dashboard-1.8.3.jar2.创建/data/logs/sentinel目录3.执行chmod +x /usr/local/sentinel/sentinel-dashboard-1.8.3.jar添加权限{dotted startColor="#ff6c6c" endColor="#1989fa"/}#!/bin/bash # # chkconfig: 2345 10 90 # # description:auto_run ##### 上面这三行注释的代码必须添加 上面的注释的意思是,sentinel服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10。 #程序名 RUN_NAME="sentinel-dashboard" #资源位置 JAVA_OPTS=/usr/local/sentinel/sentinel-dashboard-1.8.3.jar #日志位置 LOG_DIR=/data/logs/sentinel LOG_FILE=$LOG_DIR/sentinel-dashboard.log LOG_OPTS=$LOG_DIR/sentinel_temp.log #开始方法 start() { source /etc/profile; nohup java -Xms256M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=256M -Dcsp.sentinel.log.dir=$LOG_DIR -Dlogging.file=$LOG_FILE -Dserver.port=29000 -Dcsp.sentinel.dashboard.server=127.0.0.1:29000 -Dproject.name=Sentinel-Dashboard -jar $JAVA_OPTS >$LOG_OPTS 2>&1 & echo "$RUN_NAME started success..." } #结束方法 stop() { echo "stopping $RUN_NAME ..." kill -9 `ps -ef|grep $JAVA_OPTS|grep -v grep|grep -v stop|awk '{print $2}'` } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo "Userage: $0 {start|stop|restart}" exit 1 esac{dotted startColor="#ff6c6c" endColor="#1989fa"/}执行后: chkconfig --add /etc/rc.d/init.d/sentinel # 添加自定义服务 chkconfig sentinel on # 自定义服务开机启动 systemctl daemon-reload # 刷新 systemctl start sentinel # 启动sentinel netstat -ntlp #查看端口启动情况 ps -ef|grep sentinel # 查看启动情况
2022年03月28日
76 阅读
0 评论
0 点赞
2022-01-27
ElasticSearch ES 安装 Kibana安装 设置密码
一、下载安装ES数据库# 新建一个文件夹 mkdir elasticSearch # 进入文件夹 cd elasticSearch/ # 下载安装包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-linux-x86_64.tar.gz # 解压安装包 gzip -d elasticsearch-7.8.0-linux-x86_64.tar.gz tar -vxf elasticsearch-7.8.0-linux-x86_64.tar # 进入解压后的目录 cd elasticsearch-7.8.0 # 添加跨域 vim config/elasticsearch.yml # 将以下两段话插入文档最底下 http.cors.enabled: true http.cors.allow-origin: "*" # 因为linux下不支持root用户启动所以我们要创建一个es用户 # window和mac不需要此步骤可以直接启动数据库 # 创建linux的es用户 adduser es # 设置密码 输入两次密码 passwd es # 给es用户赋予权限 后面的是es安装的目录 chown es /usr/local/elasticSearch/ -R # 切换到es用户 su es # 启动es数据库 cd bin/ ./elasticsearch -d # 启动访问本地的9200端口查看是否启动成功 # 出现如所示则启动成功 curl http://127.0.0.1:9200二、安装IK分词器下载地址将插件解压之后放入elasticSearch目录的plugins文件夹中然后重启ElasticSearch即可可以看到启动日志中显示已经加载了IK分词器三、下载安装KibanaKibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。3.1安装kibana# 下载kibana wget https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-linux-x86_64.tar.gz # 解压kibana tar -xvf kibana-7.8.0-linux-x86_64 # 进入config文件夹设置kibana.yml文件 server.port: 5601 server.host: "localhost" server.basePath: "/kibana" server.name: "kibana" elasticsearch.hosts: ["http://localhost:9200"] # 启动kibana cd kibana-7.8.0-linux-x86_64/bin/ ./kibana # 后台启动 nohup ./kibana & # 访问本地 5601接口即可3.2设置kibana密码# 修改kibana安装文件下的config的kibana.yml文件,打开 #elasticsearch.username: "kibana_system" #elasticsearch.password: "pass" #修改成 elasticsearch.username: "kibana" # abcd1234 = es密码 elasticsearch.password: "abcd1234"3.3设置kibana用户权限四、设置ElasticsSearch访问权限(密码)由于上线需要设置用户名和密码,发现ES7.7以后的版本将安全认证功能免费开放了。并将X-pack插件集成了到了开源的ElasticSearch版本中。下面将图文介绍如何利用X-pack给ElasticSearch相关组件设置用户名和密码。进入ES的安装目录config下的elasticsearch.yml文件在最后一行添加xpack.security.enabled: true=开启密码验证2.重启了Es数据库。只有重启之后才可以设置用户名和密码# 启动ES ./elasticsearch -d # 设置用户名密码 ./elasticsearch-setup-passwords interactive # 为ES很多预设的用户设置密码,如果记不住最好都设为一样。3.到此已经完成ES及相关组件的加密了,后续访问和使用相关组件都需要验证用户名和密码了, 使用curl会报错。使用curl localhost:9200 -u elastic:{password}如下方式访问则正常:4.如果你觉得之前用户的密码设置的太简单了,你想修改密码可以采用如下方式:curl -XPOST -u elastic "localhost:9200/_security/user/elastic/_password" -H 'Content-Type: application/json' -d'{"password" : "abcd1234"}'这种方式修改密码需要注意的是:(1)之前设置过elastic的用户密码;(2)还记的用户elastic用户的密码。如果忘记之前elastic用户的密码,这个时候又要用到ES的加密功能,那需要重置ES的密码认证;详细步骤如下:修改config/elasticsearch.yml;注释掉 xpack.security.enabled: true这一行; 重启ES,查看下索引,发现多了一个.security-7 删除掉.security-7索引:到此就回到ES没有设置密码的阶段了五、ES常见启动错误查看原文
2022年01月27日
421 阅读
0 评论
0 点赞
2021-11-01
Nginx 通过 Lua + Redis 实现动态封禁 IP
背景 为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单。对于黑名单之内的 IP ,拒绝提供服务。架构 实现 IP 黑名单的功能有很多途径:1、在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求;2、在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单;3、在应用层面,在请求服务之前检查一遍客户端 IP 是否在黑名单。为了方便管理和共享,我们选择通过 Nginx+Lua+Redis 的架构实现 IP 黑名单的功能,架构图如下:实现1、安装 Nginx+Lua模块,推荐使用 OpenResty,这是一个集成了各种 Lua 模块的 Nginx 服务器:2、安装并启动 Redis 服务器;3、配置 Nginx 示例:Nginx 配置其中lua_shared_dict ip_blacklist 1m;由 Nginx 进程分配一块 1M 大小的共享内存空间,用来缓存 IP 黑名单。access_by_lua_file lua/ip_blacklist.lua;指定 lua 脚本位置4、配置 lua 脚本,定期从 Redis 获取最新的 IP 黑名单。5、在 Redis 服务器上新建 Set 类型的数据 ip_blacklist,并加入最新的 IP 黑名单。完成以上步骤后,重新加载 nginx,配置便开始生效了。这时访问服务器,如果你的 IP 地址在黑名单内的话,将出现拒绝访问,如下图:
2021年11月01日
76 阅读
0 评论
0 点赞
2021-10-21
安装Gitlab到CentOS(YUM)
GitLab是Git的基于WEB的图形化管理平台,提供Git的用户、权限等高级管理功能。 {card-default label="运行环境" width=""}系统版本:CentOS Linux release 7.3.1611 (Core)软件版本:Gitlab-ce-11.10.1硬件要求:最低2核4GB,建议4核8GB{/card-default}安装过程1、安装依赖[root@localhost ~]# yum -y install curl policycoreutils-python openssh-server 2、配置系统环境[root@localhost ~]# systemctl enable sshd => 设置SSH远程服务开机自启 [root@localhost ~]# systemctl start sshd => 启动SSH远程服务 [root@localhost ~]# systemctl stop firewalld => 停止Firewalld防火墙服务 [root@localhost ~]# systemctl disable firewalld => 禁用Firwalld防火墙服务开机自启 [root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux => 关闭SeLinux(重启主机生效) [root@localhost ~]# setenforce 0 => 关闭SeLinux(当前生效)3、添加YUM-Gitlab源我们使用清华大学提供的YUM源,以提高下载速度。[root@localhost ~]# vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck=0 enabled=1 [root@localhost ~]# yum makecache4、安装Gitlab我们选择安装最新版本的Gitlab。[root@localhost ~]# yum install -y gitlab-ce可以访问"https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/"查看Gitlab-ce的版本。安装历史版本请使用下面命令:[root@localhost ~]# yum install -y gitlab-ce-{VERSION}5、配置Gitlab建议使用HTTPS。[root@localhost ~]# vim /etc/gitlab/gitlab.rb ### 基础配置 ### external_url 'https://gitlab.xxx.cn' #用户访问所使用的URL,域名或者IP地址 gitlab_rails['time_zone'] = 'Asia/Shanghai' #时区 ### SSH配置 ### gitlab_rails['gitlab_shell_ssh_port'] = 10222 #使用SSH协议拉取代码所使用的连接端口。 ### 邮箱配置 ### gitlab_rails['smtp_enable'] = true #启用SMTP邮箱功能,绑定一个第三方邮箱,用于邮件发送 gitlab_rails['smtp_address'] = "smtp.exmail.qq.com" #设置SMTP服务器地址 gitlab_rails['smtp_port'] = 465 #设置SMTP服务器端口 gitlab_rails['smtp_user_name'] = "xxx@xxx.cn" #设置邮箱账号 gitlab_rails['smtp_password'] = "xxx" #设置邮箱密码 gitlab_rails['smtp_authentication'] = "login" #设置邮箱账号密码身份验证方式,"login"表示采用账号密码的方式登陆 gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true #设置开启SMTP邮件使用TLS传输加密协议传输邮件,以保证邮件安全传输 gitlab_rails['gitlab_email_from'] = 'xxx@xxx.cn' #设置Gitlab来源邮箱地址,设置登陆所使用的邮箱地址 ### WEB配置 ### nginx['enable'] = true #启用Nginx服务 nginx['client_max_body_size'] = '250m' #设置客户端最大文件上传大小 nginx['redirect_http_to_https'] = true #设置开启自动将HTTP跳转到HTTPS nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.xxx.cn.pem" #设置HTTPS所使用的证书 nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.xxx.cn.key" #设置HTTPS所使用的证书密码 nginx['ssl_protocols'] = "TLSv1.1 TLSv1.2" #设置HTTPS所使用的TLS协议版本 nginx['ssl_session_cache'] = "builtin:1000 shared:SSL:10m" #设置开启SSL会话缓存功能 nginx['ssl_session_timeout'] = "5m" #设置SSL会话超时时间 nginx['listen_addresses'] = ['*', '[::]'] #设置Nginx监听地址,"*"表示监听主机上所有网卡的地址 nginx['gzip_enabled'] = true #设置开启Nginx的传输压缩功能,以节约传输带宽,提高传输效率6、上传SSL证书到指定目录[root@localhost ~]# ll /etc/gitlab/ssl/ total 28 drwxr-xr-x 2 root root 4096 Apr 25 11:48 ./ drwxrwxr-x 4 root root 4096 Apr 25 12:50 ../ -rw-r--r-- 1 root root 1675 Apr 25 11:45 gitlab.xxx.cn.key -rw-r--r-- 1 root root 3671 Apr 25 11:45 gitlab.xxx.cn.pem7、刷新配置当配置文件发生变化时,或者是第一次启动时,我们需要刷新配置。[root@localhost ~]# systemctl restart gitlab-runsvdir [root@localhost ~]# gitlab-ctl reconfigure8、启动服务[root@localhost ~]# gitlab-ctl restart [root@localhost ~]# gitlab-ctl status run: alertmanager: (pid 13541) 2171s; run: log: (pid 13221) 2192s run: gitaly: (pid 13557) 2170s; run: log: (pid 12463) 2266s run: gitlab-monitor: (pid 13580) 2169s; run: log: (pid 13103) 2208s run: gitlab-workhorse: (pid 13602) 2169s; run: log: (pid 12887) 2226s run: logrotate: (pid 13617) 2168s; run: log: (pid 12959) 2218s run: nginx: (pid 13628) 2168s; run: log: (pid 12927) 2222s run: node-exporter: (pid 13714) 2168s; run: log: (pid 13002) 2214s run: postgres-exporter: (pid 13720) 2167s; run: log: (pid 13270) 2188s run: postgresql: (pid 13740) 2167s; run: log: (pid 12669) 2258s run: prometheus: (pid 13748) 2166s; run: log: (pid 13181) 2198s run: redis: (pid 13761) 2166s; run: log: (pid 11907) 2293s run: redis-exporter: (pid 13800) 2165s; run: log: (pid 13143) 2202s run: sidekiq: (pid 13821) 2163s; run: log: (pid 12872) 2227s run: unicorn: (pid 13833) 2162s; run: log: (pid 12832) 2233s9、测试邮件发送我们在启动完成后测试一下邮件发送功能是否正常工作。[root@localhost ~]# gitlab-rails console irb(main):001:0> Notify.test_email('邮箱地址', '标题', '内容').deliver_now irb(main):002:0> exit10、第一次访问登陆第一次需要输入新的超级管理员(root)密码。修改成功后,我们使用超级管理员用户“root”账号登录Gitlab管理平台。11、关闭用户注册功能为了避免用户随便注册账号,我们将注册功能关闭。11、设置语言为"简体中文"保存后重启登陆即可。
2021年10月21日
53 阅读
0 评论
0 点赞
2021-07-12
Teamcity + Rancher + 阿里云Code 实现Devops 自动化部署
Teamcity + Rancher + 阿里云CODE + 阿里云镜像仓库实现DevOps1.安装DockerDocker相关知识具体参考:https://www.bdysoft.com/archives/3.html备注:由于rancher 1.6.30仅支持19.03.2一下版本建议在执行docker安装时,执行一下指令进行安装:# 1.删除服务器中原本安装的docker yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 2.安装yum-utils yum install -y yum-utils device-mapper-persistent-data lvm2 # 3.为yum源添加docker仓库位置 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # 4.yum安装docker yum -y install docker-ce-18.06.3.ce # 5.设置docker开机自启 systemctl start docker systemctl enable docker2.安装Teamcity + Teamcity Agent# 1.安装Teamcity docker run -d -u 0 -it --name teamcity -v /data/tc/server/datadir:/data/teamcity_server/datadir -p 你准备用来提供访问的接口:8111 --restart=always jetbrains/teamcity-server # 2.如果是在同一台机器部署Teamcity + Teamcity Agent,可以通过一下指令找到Teamcity的地址 docker inspect --format '{{ .NetworkSettings.IPAddress }}' teamcity-server的CONTAINERID # 3.安装Teamcity Agent docker run -d -u 0 -it -e SERVER_URL="可以访问Teamcity的地址" \ -v /data/tc/agent/conf:/data/teamcity_agent/conf \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /data/tc/agent/buildagent/work:/opt/buildagent/work \ -v /data/tc/agent/buildagent/temp:/opt/buildagent/temp \ -v /data/tc/agent/buildagent/tools:/opt/buildagent/tools \ -v /data/tc/agent/buildagent/plugins:/opt/buildagent/plugins \ -v /data/tc/agent/buildagent/system:/opt/buildagent/system \ --restart=always \ jetbrains/teamcity-agent 3.配置Teamcity 及设置Teamcity Agent到这里teamcity就配置结束了,我们尝试用temacity打包并推送到阿里云镜像仓库。4.利用Teamcity 完成项目创建及配置项目中必须包含Dockerfile文件,Dockerfile文件里面的一些参数可参考以下说明,形象的理解。备注:测试所用的阿里云code,输入账号密码登录有问题,所以需要在project上传SSHkey 。5.配置阿里云镜像仓库与Teamcity关联备注:所需要的密码是在这里设置的:6.配置Teamcity 发版流水线先设置maven clean package构建镜像推送镜像, 其中%name%是在parameters里面配置的:推送完成, 其中%name%是在parameters里面配置的:6.在一台【Docker环境干净的】服务器上创建Rancher 1.6.30版本1.具体安装教程:https://docs.rancher.cn/docs/rancher1/overview/start/_index/2.注意需要开放以下接口:https://www.cnblogs.com/heqiuyong/p/10460150.htmlhttp://docs.rancher.cn/docs/rancher2/installation/requirements/ports/_index3.开放端口firewall-cmd --zone=public --add-port=6443/tcp --permanent # 开放5672端口firewall-cmd --zone=public --remove-port=6443/tcp --permanent #关闭5672端口firewall-cmd --reload # 配置立即生效4.查看防火墙所有开放的端口firewall-cmd --zone=public --list-ports# 1.安装前可以清理一下容器: docker stop $(docker ps -aq) docker system prune -f docker volume rm $(docker volume ls -q) docker image rm $(docker image ls -q) rm -rf /etc/ceph \ /etc/cni \ /etc/kubernetes \ /opt/cni \ /opt/rke \ /run/secrets/kubernetes.io \ /run/calico \ /run/flannel \ /var/lib/calico \ /var/lib/etcd \ /var/lib/cni \ /var/lib/kubelet \ /var/lib/rancher/rke/log \ /var/log/containers \ /var/log/pods \ /var/run/calico # 2.安装Docker 镜像 docker run -d --restart=unless-stopped -p 80:8080 rancher/server:stable7.完成Rancher 主机注册并配置镜像仓库:1.添加镜像仓库2.注册主机,选择custom,将主机注册指令,复制到需要注册的主机节点上即可#可通过修改主机名: hostnamectl set-hostname node2 8.创建应用9.创建服务10.通过触发器实现镜像一旦在阿里云仓库更新则容器上的服务自动更新11.通过Rancher API 实现在Teamcity里通过输入build的版本号部署对应的服务前置条件为每次build及push到阿里云镜像仓库的版本号都不一样。1.打开浏览器的开发者模式,点击服务右侧的升级按钮,复制浏览器发送请求的升级参数,然后API查看里面打开,找到upgrade那个API,将参数复制进去后show requerst,复制完整的requert,并且将其中appkey 和 secret 换成自己生成的,还有其中有一个参数是imageUuid,我们可以在imageUUid对应的镜像末尾修改为%version%,这个version就是前面我们设计的必须要输入的参数。2.在teamcity中添加build step,选择runner type = Command Line,在下面的命令行输入上面复制并进行修改的代码即可。
2021年07月12日
230 阅读
2 评论
0 点赞
2021-03-12
Docker Compose的介绍安装与使用
一、Docker ComposeCompose 简介Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。Compose 使用的三个步骤:使用 Dockerfile 定义应用程序的环境。使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。最后,执行 docker-compose up 命令来启动并运行整个应用程序。docker-compose.yml 的配置案例如下(配置参数参考下文):实例:# yaml 配置实例 version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {}Compose 安装LinuxLinux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。运行以下命令以下载 Docker Compose 的当前稳定版本:$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose{message type="info"}要安装其他版本的 Compose,请替换 1.24.1。{/message}将可执行权限应用于二进制文件:$ sudo chmod +x /usr/local/bin/docker-compose创建软链:$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose测试是否安装成功:$ docker-compose --version{message type="info"}注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。{/message}二、Docker Compose使用2.1.准备工作2.1.1 创建一个测试目录:$ mkdir composetest $ cd composetest2.1.2 在测试目录中创建一个名为 app.py 的文件,并复制粘贴以下内容:import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times.\n'.format(count){message type="info"}在此示例中,redis 是应用程序网络上的 redis 容器的主机名,该主机使用的端口为 6379。{/message}2.1.3在 composetest 目录中创建另一个名为 requirements.txt 的文件,内容如下:flask redis2.2 创建 Dockerfile 文件2.2.1 在 composetest 目录中,创建一个名为的文件 Dockerfile,内容如下:FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["flask", "run"]2.2.2 Dockerfile 内容解释:①:FROM python:3.7-alpine: 从 Python 3.7 映像开始构建镜像。②:WORKDIR /code: 将工作目录设置为 /code。③:ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 设置 flask 命令使用的环境变量。④:RUN apk add --no-cache gcc musl-dev linux-headers: 安装 gcc,以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速。⑤:COPY requirements.txt requirements.txt RUN pip install -r requirements.txt 复制 requirements.txt 并安装 Python 依赖项。⑥:COPY . .: 将 . 项目中的当前目录复制到 . 镜像中的工作目录。⑦:CMD ["flask", "run"]: 容器提供默认的执行命令为:flask run。2.3 创建 docker-compose.yml2.3.1 在测试目录中创建一个名为 docker-compose.yml 的文件,然后粘贴以下内容:# yaml 配置 version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"该 Compose 文件定义了两个服务:web 和 redis。①:web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 。②:redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像。2.4 使用 Compose 命令构建和运行您的应用2.4.1 在测试目录中,执行以下命令来启动应用程序:docker-compose up2.4.2 如果你想在后台执行该服务可以加上 -d 参数:docker-compose up -d
2021年03月12日
46 阅读
0 评论
0 点赞
2021-03-10
除了负载均衡,Nginx 能做的真是太强大了!
Nginx应该是现在最火的web和反向代理服务器,没有之一。她是一款诞生于俄罗斯的高性能web服务器,尤其在高并发情况下,相较Apache,有优异的表现。那除了负载均衡,她还有什么其他的用途呢,下面我们来看下。一、静态代理Nginx擅长处理静态文件,是非常好的图片、文件服务器。把所有的静态资源的放到nginx上,可以使应用动静分离,性能更好。二、负载均衡Nginx通过反向代理可以实现服务的负载均衡,避免了服务器单节点故障,把请求按照一定的策略转发到不同的服务器上,达到负载的效果。常用的负载均衡策略有,1、轮询将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。2、加权轮询不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。3、ip_hash(源地址哈希法)根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客户端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。4、随机通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。5、least_conn(最小连接数法)由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。三、限流Nginx的限流模块,是基于漏桶算法实现的,在高并发的场景下非常实用。1、配置参数1)limit_req_zone定义在http块中,$binary_remote_addr 表示保存客户端IP地址的二进制形式。2)Zone定义IP状态及URL访问频率的共享内存区域。zone=keyword标识区域的名字,以及冒号后面跟区域大小。16000个IP地址的状态信息约1MB,所以示例中区域可以存储160000个IP地址。3)Rate定义最大请求速率。示例中速率不能超过每秒100个请求。2、设置限流burst排队大小,nodelay不限制单个请求间的时间。四、缓存1、浏览器缓存,静态资源缓存用expire。2、代理层缓存五、黑白名单1、不限流白名单2、黑名单
2021年03月10日
49 阅读
0 评论
0 点赞
2021-03-08
再见命令行!K8S傻瓜式安装,图形化管理真香!
之前我们一直都是使用命令行来管理K8S的,这种做法虽然对程序员来说看起来很炫酷,但有时候用起来还是挺麻烦的。今天我们来介绍一个K8S可视化管理工具Rancher,使用它可以大大减少我们管理K8S的工作量,希望对大家有所帮助!Rancher简介Rancher是为使用容器的公司打造的容器管理平台。Rancher简化了使用K8S的流程,开发者可以随处运行K8S,满足IT需求规范,赋能DevOps团队。Rancher安装Rancher已经内置K8S,无需再额外安装。就像我们安装好Minikube一样,K8S直接就内置了。首先下载Rancher镜像:docker pull rancher/rancher:v2.5-head下载完成后运行Rancher容器,Rancher运行起来有点慢需要等待几分钟:docker run -p 80:80 -p 443:443 --name rancher \ --privileged \ --restart=unless-stopped \ -d rancher/rancher运行完成后就可以访问Rancher的主页了,第一次需要设置管理员账号密码,访问地址:https://主机IP设置下Rancher的Server URL,一个其他Node都可以访问到的地址,如果我们要安装其他Node的话需要用到它;Rancher使用我们首先来简单使用下Rancher。在首页我们可以直接查看所有集群,当前我们只有安装了Rancher的集群;点击集群名称可以查看集群状态信息,也可以点击右上角的按钮来执行kubectl命令;点击仪表盘按钮,我们可以查看集群的Dashboard,这里可以查看的内容就丰富多了,Deployment、Service、Pod信息都可以查看到了。Rancher实战之前我们都是使用命令行的形式操作K8S,这次我们使用图形化界面试试。还是以部署SpringBoot应用为例,不过先得部署个MySQL。部署MySQL首先我们以yaml的形式创建Deployment,操作路径为Deployments->创建->以YAML文件编辑;Deployment的yaml内容如下,注意添加namespace: default这行,否则会无法创建;apiVersion: apps/v1 kind: Deployment metadata: # 指定Deployment的名称 name: mysql-deployment # 指定Deployment的空间 namespace: default # 指定Deployment的标签 labels: app: mysql spec: # 指定创建的Pod副本数量 replicas: 1 # 定义如何查找要管理的Pod selector: # 管理标签app为mysql的Pod matchLabels: app: mysql # 指定创建Pod的模板 template: metadata: # 给Pod打上app:mysql标签 labels: app: mysql # Pod的模板规约 spec: containers: - name: mysql # 指定容器镜像 image: mysql:5.7 # 指定开放的端口 ports: - containerPort: 3306 # 设置环境变量 env: - name: MYSQL_ROOT_PASSWORD value: root # 使用存储卷 volumeMounts: # 将存储卷挂载到容器内部路径 - mountPath: /var/log/mysql name: log-volume - mountPath: /var/lib/mysql name: data-volume - mountPath: /etc/mysql name: conf-volume # 定义存储卷 volumes: - name: log-volume # hostPath类型存储卷在宿主机上的路径 hostPath: path: /home/docker/mydata/mysql/log # 当目录不存在时创建 type: DirectoryOrCreate - name: data-volume hostPath: path: /home/docker/mydata/mysql/data type: DirectoryOrCreate - name: conf-volume hostPath: path: /home/docker/mydata/mysql/conf type: DirectoryOrCreate其实我们也可以通过页面来配置Deployment的属性,如果你对yaml中的配置不太熟悉,可以在页面中修改属性并对照下,比如hostPath.type这个属性,一看就知道有哪些了;之后以yaml的形式创建Service,操作路径为Services->创建->节点端口->以YAML文件编辑;Service的yaml内容如下,namespace属性不能少;apiVersion: v1 kind: Service metadata: # 定义空间 namespace: default # 定义服务名称,其他Pod可以通过服务名称作为域名进行访问 name: mysql-service spec: # 指定服务类型,通过Node上的静态端口暴露服务 type: NodePort # 管理标签app为mysql的Pod selector: app: mysql ports: - name: http protocol: TCP port: 3306 targetPort: 3306 # Node上的静态端口 nodePort: 30306部署完成后需要新建mall数据库,并导入相关表,表地址:https://github.com/macrozheng/mall-learning/blob/master/document/sql/mall.sql这里有个比较简单的方法来导入数据库,通过Navicat创建连接,先配置一个SSH通道;接下来要获得Rancher容器运行的IP地址(在Minikube中我们使用的使用Minikube的地址);docker inspect rancher |grep IPAddress之后我们就可以像在Linux服务器上访问数据库一样访问Rancher中的数据库了,直接添加Rancher的IP和数据库端口即可。部署SpringBoot应用以yaml的形式创建SpringBoot应用的Deployment,操作路径为Deployments->创建->以YAML文件编辑,配置信息如下;apiVersion: apps/v1 kind: Deployment metadata: namespace: default name: mall-tiny-fabric-deployment labels: app: mall-tiny-fabric spec: replicas: 1 selector: matchLabels: app: mall-tiny-fabric template: metadata: labels: app: mall-tiny-fabric spec: containers: - name: mall-tiny-fabric # 指定Docker Hub中的镜像地址 image: macrodocker/mall-tiny-fabric:0.0.1-SNAPSHOT ports: - containerPort: 8080 env: # 指定数据库连接地址 - name: spring.datasource.url value: jdbc:mysql://mysql-service:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai # 指定日志文件路径 - name: logging.path value: /var/logs volumeMounts: - mountPath: /var/logs name: log-volume volumes: - name: log-volume hostPath: path: /home/docker/mydata/app/mall-tiny-fabric/logs type: DirectoryOrCreate以yaml的形式创建Service,操作路径为Services->创建->节点端口->以YAML文件编辑,配置信息如下;apiVersion: v1 kind: Service metadata: namespace: default name: mall-tiny-fabric-service spec: type: NodePort selector: app: mall-tiny-fabric ports: - name: http protocol: TCP port: 8080 targetPort: 8080 # Node上的静态端口 nodePort: 30180创建成功后,在Deployments标签中,我们可以发现实例已经就绪了。外部访问应用依然使用Nginx反向代理的方式来访问SpringBoot应用。由于Rancher服务已经占用了80端口,Nginx服务只能重新换个端口了,这里运行在2080端口上;docker run -p 2080:2080 --name nginx \ -v /mydata/nginx/html:/usr/share/nginx/html \ -v /mydata/nginx/logs:/var/log/nginx \ -v /mydata/nginx/conf:/etc/nginx \ -d nginx:1.10创建完Nginx容器后,添加配置文件mall-tiny-rancher.conf,将mall-tiny.macrozheng.com域名的访问反向代理到K8S中的SpringBoot应用中去;server { listen 2080; server_name mall-tiny.macrozheng.com; #修改域名 location / { proxy_set_header Host $host:$server_port; proxy_pass http://172.17.0.3:30180; #修改为代理服务地址 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }再修改访问Linux服务器的本机host文件,添加如下记录;192.168.5.46 mall-tiny.macrozheng.com之后即可直接在本机上访问K8S上的SpringBoot应用了,访问地址:http://mall-tiny.macrozheng.com:2080/swagger-ui.html总结使用Rancher可视化管理K8S还真是简单,大大降低了K8S的部署和管理难度。一个Docker命令即可完成部署,可视化界面可以查看应用运行的各种状态。K8S脚本轻松执行,不会写脚本的图形化界面设置下也能搞定。总结一句:真香!都看到这了,确定不来个点赞,在看鼓励下么?这将是我创造更多优质文章的最大动力!参考资料Rancher官方文档项目源码地址
2021年03月08日
72 阅读
0 评论
0 点赞
2021-03-05
使用Dockerfile为SpringBoot应用构建Docker镜像
通过docker-maven-plugin来构建docker镜像的方式,此种方式需要依赖自建的Registry镜像仓库。本文将讲述另一种方式,使用Dockerfile来构建docker镜像,此种方式不需要依赖自建的镜像仓库,只需要应用的jar包和一个Dockerfile文件即可。1.Dockerfile常用指令ADD用于复制文件,格式:ADD 示例:# 将当前目录下的mall-tiny-docker-file.jar包复制到docker容器的/目录下 ADD mall-tiny-docker-file.jar /mall-tiny-docker-file.jarENTRYPOINT指定docker容器启动时执行的命令,格式:ENTRYPOINT ["executable", "param1","param2"...]示例:# 指定docker容器启动时运行jar包 ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]ENV用于设置环境变量,格式:ENV 示例:# mysql运行时设置root密码 ENV MYSQL_ROOT_PASSWORD rootEXPOSE声明需要暴露的端口(只声明不会打开端口),格式:EXPOSE ...示例:# 声明服务运行在8080端口 EXPOSE 8080FROM指定所需依赖的基础镜像,格式:FROM :示例:# 该镜像需要依赖的java8的镜像 FROM java:8MAINTAINER指定维护者的名字,格式:MAINTAINER 示例:MAINTAINER bdysoftRUN在容器构建过程中执行的命令,我们可以用该命令自定义容器的行为,比如安装一些软件,创建一些文件等,格式:RUN RUN ["executable", "param1","param2"...]示例:# 在容器构建过程中需要在/目录下创建一个mall-tiny-docker-file.jar文件 RUN bash -c 'touch /mall-tiny-docker-file.jar'2.使用Dockerfile构建SpringBoot应用镜像编写Dockerfile文件# 该镜像需要依赖的基础镜像 FROM java:8 # 将当前目录下的jar包复制到docker容器的/目录下 ADD mall-tiny-docker-file-0.0.1-SNAPSHOT.jar /mall-tiny-docker-file.jar # 运行过程中创建一个mall-tiny-docker-file.jar文件 RUN bash -c 'touch /mall-tiny-docker-file.jar' # 声明服务运行在8080端口 EXPOSE 8080 # 指定docker容器启动时运行jar包 ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"] # 指定维护者的名字 MAINTAINER macrozheng3.使用maven打包应用在IDEA中双击package命令进行打包将应用jar包及Dockerfile文件上传到linux服务器4.在Linux上构建docker镜像在Dockerfile所在目录执行以下命令# -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile docker build -t mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT .
2021年03月05日
34 阅读
0 评论
0 点赞
2021-03-05
使用Docker Compose部署SpringBoot应用
Docker Compose是一个用于定义和运行多个docker容器应用的工具。使用Compose你可以用YAML文件来配置你的应用服务,然后使用一个命令,你就可以部署你配置的所有服务了。一、安装1.下载Docker Composecurl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose2.修改该文件的权限为可执行chmod +x /usr/local/bin/docker-compose3.查看是否已经安装成功docker-compose --version二、使用Docker Compose的步骤使用Dockerfile定义应用程序环境,一般需要修改初始镜像行为时才需要使用;使用docker-compose.yml定义需要部署的应用程序服务,以便执行脚本一次性部署;使用docker-compose up命令将所有应用服务一次性部署起来。2.1docker-compose.yml常用命令image指定运行的镜像名称# 运行的是mysql5.7的镜像 image: mysql:5.7container_name配置容器名称# 容器名称为mysql container_name: mysqlports指定宿主机和容器的端口映射(HOST:CONTAINER)# 将宿主机的3306端口映射到容器的3306端口 ports: - 3306:3306volumes将宿主机的文件或目录挂载到容器中(HOST:CONTAINER)# 将外部文件挂载到myql容器中 volumes: - /mydata/mysql/log:/var/log/mysql - /mydata/mysql/data:/var/lib/mysql - /mydata/mysql/conf:/etc/mysqlenvironment配置环境变量# 设置mysqlroot帐号密码的环境变量 environment: - MYSQL_ROOT_PASSWORD=rootlinks连接其他容器的服务(SERVICE:ALIAS)# 可以以database为域名访问服务名称为db的容器 links: - db:database三、Docker Compose常用命令构建、创建、启动相关容器# -d表示在后台运行 docker-compose up -d指定文件启动docker-compose -f docker-compose.yml up -d停止所有相关容器docker-compose stop列出所有容器信息docker-compose ps四、使用Docker Compose 部署应用3.1编写docker-compose.yml文件Docker Compose将所管理的容器分为三层,工程、服务及容器。docker-compose.yml中定义所有服务组成了一个工程,services节点下即为服务,服务之下为容器。容器与容器直之间可以以服务名称为域名进行访问,比如在mall-tiny-docker-compose服务中可以通过jdbcmysql//db:3306这个地址来访问db这个mysql服务。version: '3' services: # 指定服务名称 db: # 指定服务使用的镜像 image: mysql:5.7 # 指定容器名称 container_name: mysql # 指定服务运行的端口 ports: - 3306:3306 # 指定容器中需要挂载的文件 volumes: - /mydata/mysql/log:/var/log/mysql - /mydata/mysql/data:/var/lib/mysql - /mydata/mysql/conf:/etc/mysql # 指定容器的环境变量 environment: - MYSQL_ROOT_PASSWORD=root # 指定服务名称 mall-tiny-docker-compose: # 指定服务使用的镜像 image: mall-tiny/mall-tiny-docker-compose:0.0.1-SNAPSHOT # 指定容器名称 container_name: mall-tiny-docker-compose # 指定服务运行的端口 ports: - 8080:8080 # 指定容器中需要挂载的文件 volumes: - /etc/localtime:/etc/localtime - /mydata/app/mall-tiny-docker-compose/logs:/var/logs注意:如果遇到mall-tiny-docker-compose服务无法连接到mysql,需要在mysql中建立mall数据库,同时导入mall.sql脚本。具体参考使用Dockerfile为SpringBoot应用构建Docker镜像中的运行mysql服务并设置部分。五、使用maven插件构建mall-tiny-docker-compose镜像六、运行Docker Compose命令启动所有服务先将docker-compose.yml上传至Linux服务器,再在当前目录下运行如下命令:docker-compose up -d
2021年03月05日
41 阅读
0 评论
0 点赞
2021-03-04
使用Jenkins一键打包部署SpringBoot应用
Jenkins简介Jenkins是开源CI&CD软件领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何项目的需要。我们可以用Jenkins来构建和部署我们的项目,比如说从我们的代码仓库获取代码,然后将我们的代码打包成可执行的文件,之后通过远程的ssh工具执行脚本来运行我们的项目。一:Jenkins的安装1.下载Jenkins的Docker镜像 docker pull jenkins/jenkins:lts2.在Docker容器中运行Jenkinsdocker run -p 8080:8080 -p 50000:5000 --name jenkins \ -u root \ -v /mydata/jenkins_home:/var/jenkins_home \ -d jenkins/jenkins:lts3.Jenkins的配置①、运行成功后访问该地址登录Jenkins,第一次登录需要输入管理员密码:http://IP地址:8080/,通过docker logs jenkins 查看启动日志获取initialAdminPassword密码docker logs jenkins确保以下插件被正确安装1.根据角色管理权限的插件:Role-based Authorization Strategy2.远程使用ssh的插件:SSH②、通过系统管理->全局工具配置来进行全局工具的配置,比如maven的配置新增maven的安装配置:③、在系统管理->系统配置中添加全局ssh的配置,这样Jenkins使用ssh就可以执行远程的linux脚本了:④、角色权限管理我们可以使用Jenkins的角色管理插件来管理Jenkins的用户,比如我们可以给管理员赋予所有权限,运维人员赋予执行任务的相关权限,其他人员只赋予查看权限。在系统管理->全局安全配置中启用基于角色的权限管理:⑤、进入系统管理->Manage and Assign Roles界面:⑥、添加角色与权限的关系:二、Docker安装Gitlab (https://www.cnblogs.com/diaomina/p/12830449.html)# 1、查找GitLab镜像 docker search gitlab # 2、拉取gitlab docker镜像 docker pull gitlab/gitlab-ce:latest # 3、运行GitLab并运行容器 docker run \ -itd \ -p 9980:80 \ -p 9922:22 \ -v /usr/local/gitlab/etc:/etc/gitlab \ -v /usr/local/gitlab/log:/var/log/gitlab \ -v /usr/local/gitlab/opt:/var/opt/gitlab \ --restart always \ --privileged=true \ --name gitlab \ gitlab/gitlab-ce # 4进入容器内 docker exec -it gitlab /bin/bash # 5、修改gitlab.rb (先查看下一个步骤再决定是否进行本步骤,本步骤是可以跳过的) # 打开文件 vi /etc/gitlab/gitlab.rb # 这个文件是全注释掉了的,所以直接在首行添加如下配置 # gitlab访问地址,可以写域名。如果端口不写的话默认为80端口 (图片上拼写错误,正确的是external_url) external_url 'http://172.16.107.194:9980' # ssh主机ip gitlab_rails['gitlab_ssh_host'] = '172.16.107.194' # ssh连接端口 gitlab_rails['gitlab_shell_ssh_port'] = 9922 # 6、修改gitlab.yml (这一步原本不是必须的,因为gitlab.rb内配置会覆盖这个,为了防止没有成功覆盖所以我在这里进行配置,当然你也可以选择不修改gitlab.rb直接修改这里) # 打开文件 vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml # 配置一:找到gitlab标签,将其子标签如下修改 hotst:172.16.107.194 port: 9980 https: false ssh_host:172.16.107.194 # 配置二:找到gitlab_shell标签下的ssh_port,将其修改为9922 # 7、让修改后的配置生效 gitlab-ctl reconfigure # 8、重启gitlab gitlab-ctl restart命令解释:-i 以交互模式运行容器,通常与 -t 同时使用命令解释:-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用-d 后台运行容器,并返回容器ID-p 9980:80 将容器内80端口映射至宿主机9980端口,这是访问gitlab的端口-p 9922:22 将容器内22端口映射至宿主机9922端口,这是访问ssh的端口-v /usr/local/gitlab-test/etc:/etc/gitlab 将容器/etc/gitlab目录挂载到宿主机/usr/local/gitlab-test/etc目录下,若宿主机内此目录不存在将会自动创建,其他两个挂载同这个一样--restart always 容器自启动--privileged=true 让容器获取宿主机root权限--name gitlab-test 设置容器名称为gitlab-testgitlab/gitlab-ce 镜像的名称,这里也可以写镜像ID将代码上传到Git仓库执行脚本准备
2021年03月04日
53 阅读
0 评论
0 点赞
2021-03-04
Centos 7 下 Docker安装及常用指令
1.删除服务器中原本安装的dockeryum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine2.安装yum-utilsyum install -y yum-utils device-mapper-persistent-data lvm23.为yum源添加docker仓库位置yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo4.yum安装dockeryum install -y docker-ce docker-ce-cli containerd.io5.设置docker开机自启systemctl start docker systemctl enable docker6.常用命令# 1.查看容器状态 docker ps docker ps -a # 2.进入容器 docker exec -it mysql(名字或者ID) /bin/bash # 3.镜像自启动 docker update redis --restart=always docker update mysql --restart=always # 4.搜索镜像 docker search java # 5.下载镜像 docker pull java:8 # 6.列出镜像 docker images # 7.删除镜像 - 指定名称删除镜像:docker rmi java:8 - 指定名称删除镜像(强制):docker rmi -f java:8 - 删除所有没有引用的镜像:docker rmi `docker images | grep none | awk '{print $3}'` - 强制删除所有镜像:docker rmi -f $(docker images) # 8.打包镜像 - -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile文件 docker build -t mall/mall-admin:1.0-SNAPSHOT . # 9.推送镜像 - 登录Docker Hub docker login - 给本地镜像打标签为远程仓库名称 docker tag mall/mall-admin:1.0-SNAPSHOT macrodocker/mall-admin:1.0-SNAPSHOT - 推送到远程仓库 docker push macrodocker/mall-admin:1.0-SNAPSHOT # 10.停止容器 docker stop nginx # 11.启动容器 docker start nginx # 12.删除指定容器 docker rm nginx # 13.查看容器全部日志 docker logs nginx # 14.动态查看容器日志 docker logs -f nginx # 15.查看容器的IP地址 docker inspect --format '{{ .NetworkSettings.IPAddress }}' nginx # 16.修改容器的启动方式,将容器启动方式改为always docker container update --restart=always nginx # 17.同步宿主机时间到容器 docker cp /etc/localtime nginx:/etc/ # 18.指定容器时区 docker run -p 80:80 --name nginx \ -e TZ="Asia/Shanghai" \ -d nginx:1.17.0 # 19.查看容器资源占用状况, - 查看指定容器资源占用状况,比如cpu、内存、网络、io状态:docker stats nginx - 查看所有容器资源占用情况:docker stats -a - 查看所有容器 docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS # 20.查看容器磁盘使用情况 docker system df # 21.使用root账号进入容器内部 docker exec -it --user root $ContainerName /bin/bash # 22.查看所有网络 docker network ls # 23.创建外部网络 docker network create -d bridge my-bridge-network 查看网络 docker network inspect my-bridge-network # 24.指定容器网络 docker run -p 80:80 --name nginx \ --network my-bridge-network \ -d nginx:1.17.0 # 25.查看Docker镜像的存放位置: docker info | grep "Docker Root Dir" # 26.查看Docker占用的磁盘空间情况: docker system df # 27.删除所有关闭的容器: docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm # 28.删除所有dangling镜像(没有Tag的镜像): docker rmi $(docker images | grep "^<none>" | awk "{print $3}") # 29.删除所有dangling数据卷(即无用的 volume): docker volume rm $(docker volume ls -qf dangling=true) # 30.停用并删除所有运行中容器 docker stop $(docker ps -q) & docker rm $(docker ps -aq) # 31.删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache docker system prune # 32.按照条件删除镜像 docker rmi --force `docker images | grep 条件值 | awk '{print $3}'` 7.配置镜像加速器针对Docker客户端版本大于 1.10.0 的用户您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://n6gjvesl.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker8.Docker创建镜像一些指令指令举例:docker run \ --detach \ -p 8443:443 \ -p 8090:80 \ -p 9922:22 \ -v /mydata/gitlab/etc:/etc/gitlab \ -v /mydata/gitlab/log:/var/log/gitlab \ -v /mydata/gitlab/data:/var/opt/gitlab \ --privileged=true \ --name gitlab \ gitlab/gitlab-ce-v:将宿主机上的文件挂载到宿主机上,格式为:宿主机文件目录:容器文件目录;-i: 以交互模式运行容器,通常与 -t 同时使用命令解释:-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用-d: 后台运行容器,并返回容器ID-e: 指定参数,比如给myql设置密码-p: 8090:80 将容器内80端口映射至宿主机9980端口,这是访问gitlab的端口-p: 9922:22 将容器内22端口映射至宿主机9922端口,这是访问ssh的端口--restart always 容器自启动--privileged=true 让容器获取宿主机root权限--name gitlab设置容器名称为gitlabgitlab/gitlab-ce 镜像的名称,这里也可以写镜像ID9.安装补全工具yum install -y bash-completion一、Docker ComposeCompose 简介Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。Compose 使用的三个步骤:使用 Dockerfile 定义应用程序的环境。使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。最后,执行 docker-compose up 命令来启动并运行整个应用程序。docker-compose.yml 的配置案例如下(配置参数参考下文):实例:# yaml 配置实例 version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {}Compose 安装LinuxLinux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。运行以下命令以下载 Docker Compose 的当前稳定版本:$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose{message type="info"}要安装其他版本的 Compose,请替换 1.24.1。{/message}将可执行权限应用于二进制文件:$ sudo chmod +x /usr/local/bin/docker-compose创建软链:$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose测试是否安装成功:$ docker-compose --version{message type="info"}注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。{/message}二、Docker Compose使用2.1.准备工作2.1.1 创建一个测试目录:$ mkdir composetest $ cd composetest2.1.2 在测试目录中创建一个名为 app.py 的文件,并复制粘贴以下内容:import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times.\n'.format(count){message type="info"}在此示例中,redis 是应用程序网络上的 redis 容器的主机名,该主机使用的端口为 6379。{/message}2.1.3在 composetest 目录中创建另一个名为 requirements.txt 的文件,内容如下:flask redis2.2 创建 Dockerfile 文件2.2.1 在 composetest 目录中,创建一个名为的文件 Dockerfile,内容如下:FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["flask", "run"]2.2.2 Dockerfile 内容解释:①:FROM python:3.7-alpine: 从 Python 3.7 映像开始构建镜像。②:WORKDIR /code: 将工作目录设置为 /code。③:ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 设置 flask 命令使用的环境变量。④:RUN apk add --no-cache gcc musl-dev linux-headers: 安装 gcc,以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速。⑤:COPY requirements.txt requirements.txt RUN pip install -r requirements.txt 复制 requirements.txt 并安装 Python 依赖项。⑥:COPY . .: 将 . 项目中的当前目录复制到 . 镜像中的工作目录。⑦:CMD ["flask", "run"]: 容器提供默认的执行命令为:flask run。2.3 创建 docker-compose.yml2.3.1 在测试目录中创建一个名为 docker-compose.yml 的文件,然后粘贴以下内容:# yaml 配置 version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"该 Compose 文件定义了两个服务:web 和 redis。①:web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 。②:redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像。2.4 使用 Compose 命令构建和运行您的应用2.4.1 在测试目录中,执行以下命令来启动应用程序:docker-compose up2.4.2 如果你想在后台执行该服务可以加上 -d 参数:docker-compose up -d
2021年03月04日
103 阅读
0 评论
0 点赞