首页 文章 精选 留言 我的

精选列表

搜索[密码管理],共10000篇文章
优秀的个人博客,低调大师

Android RingtoneManager铃声管理

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 package com.Aina.Android; import java.io.File; import android.app.Activity; import android.content.Intent; import android.media.RingtoneManager; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.Button; public class Test extends Activity { /** Called when the activity is first created. */ private Button btn1 = null ; private Button btn2 = null ; private Button btn3 = null ; private static final int Ringtone = 0 ; private static final int Alarm = 1 ; private static final int Notification = 2 ; private static final String FileRingtone = Environment .getExternalStorageDirectory() + "/music/ringtones" ; private static final String FileAlarm = Environment .getExternalStorageDirectory() + "/music/alarms" ; private static final String FileNotification = Environment .getExternalStorageDirectory() + "/music/notifications" ; @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); btn1 = (Button) this .findViewById(R.id.Button01); btn2 = (Button) this .findViewById(R.id.Button02); btn3 = (Button) this .findViewById(R.id.Button03); btn1.setOnClickListener( new Button.OnClickListener() { public void onClick(View arg0) { // TODO Auto-generated method stub if (isFile(FileRingtone)) { // 打开系统铃声设置 Intent intent = new Intent( RingtoneManager.ACTION_RINGTONE_PICKER); // 设置类型为来电 intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE); // 设置显示的标题 intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "设置来电铃声" ); startActivityForResult(intent, Ringtone); } } }); btn2.setOnClickListener( new Button.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub if (isFile(FileAlarm)) { Intent intent = new Intent( RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "设置闹钟铃声" ); startActivityForResult(intent, Alarm); } } }); btn3.setOnClickListener( new Button.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub if (isFile(FileNotification)) { Intent intent = new Intent( RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "设置通知铃声" ); startActivityForResult(intent, Notification); } } }); } /** * 设置铃声之后的回调函数 */ @Override protected void onActivityResult( int requestCode, int resultCode, Intent data) { super .onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK) { return ; } else { // 得到我们选择的铃声 Uri uri = data .getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); if (uri != null ) { switch (requestCode) { case Ringtone: RingtoneManager.setActualDefaultRingtoneUri( this , RingtoneManager.TYPE_RINGTONE, uri); break ; case Alarm: RingtoneManager.setActualDefaultRingtoneUri( this , RingtoneManager.TYPE_ALARM, uri); break ; case Notification: RingtoneManager.setActualDefaultRingtoneUri( this , RingtoneManager.TYPE_NOTIFICATION, uri); break ; default : break ; } } } } /** * 判断文件是否存在,不存在则创建. * * @param path * @return */ private boolean isFile(String path) { boolean b = false ; File f = new File(path); if (f.exists()) { b = true ; } else { if (f.mkdirs()) { b = true ; } else { b = false ; } } return b; } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <? xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> < TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> < Button android:text="设置来电铃声" android:id="@+id/Button01" android:layout_width="fill_parent" android:layout_height="wrap_content"> </ Button > < Button android:text="设置闹钟铃声" android:id="@+id/Button02" android:layout_width="fill_parent" android:layout_height="wrap_content"> </ Button > < Button android:text="设置通知铃声" android:id="@+id/Button03" android:layout_width="fill_parent" android:layout_height="wrap_content"> </ Button > </ LinearLayout > 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <? xml version="1.0" encoding="utf-8"?> < manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.Aina.Android" android:versionCode="1" android:versionName="1.0"> < application android:icon="@drawable/icon" android:label="@string/app_name"> < activity android:name=".Test" android:label="@string/app_name"> < intent-filter > < action android:name="android.intent.action.MAIN" /> < category android:name="android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > </ application > < uses-permission android:name="android.permission.INTERNET" /> < uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> </ manifest > 本文转自java豆子博客园博客,原文链接:http://www.cnblogs.com/error404/archive/2011/08/04/2127233.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Docker数据管理

Docker的数据卷是可以绕过文件系统的,而且数据卷是可以共享,可重用的 查看数据卷: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@docker~] #dockerinspect-f``.`Volumes`volume-test1 map[ /data : /var/lib/docker/volumes/9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5/_data ] [root@docker~] #cd/var/lib/docker/ [root@dockerdocker] #ls containersdevicemappergraphinitlinkgraph.dbrepositories-devicemappertmptrustvolumes [root@dockerdocker] #cdvolumes/ [root@dockervolumes] #ls-lrt total8 drwxr-xr-x3rootroot4096Feb2409:2963ccf5d524567c835c6d542cfc74d1a28d28fdf48a0bca0c517cb8dedf46b632 drwxr-xr-x3rootroot4096Feb2409:309f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5 [root@dockervolumes] #cd9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5/ [root@docker9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5] # [root@docker~] #dockerrun-it--namevolume-test1-hnginx-v/datacentos [root@nginx/] #ls/data 测试: 1、系统随机生成的目录,进行挂载 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 容器的宿主机: [root@docker9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5] #ls _data [root@docker9f36c1a9b7728974566268a2beebb0b917226952280c96107388469659bfcfe5] #cd_data/ [root@docker_data] #ls passwd [root@docker_data] #ddif=/dev/zeroof=test.isobs=1Mcount=10 10+0records in 10+0recordsout 10485760bytes(10MB)copied,0.00956288s,1.1GB /s [root@docker_data] #ls passwd test .iso 容器内: [root@nginx/] #cd/data/ [root@nginxdata] #ls [root@nginxdata] #cp/etc/passwd. [root@nginxdata] #ls passwd [root@nginxdata] #ls passwd test .iso 说明:容器的宿主机的目录已共享给容器使用(删除容器后,原有的数据卷目录中的文件仍旧是存在的) 2、系统指定的目录,进行挂载 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 宿主机的操作: [root@docker~] #mkdir-p/volume-test2-data [root@docker~] #dockerrun-it-d--namevolume-test2-hcentos7--restart=always-v/volume-test2-data:/centos-datacentos 29e9a41e563d514c8b9f14d14a0426af955651b28109c4851cfec40a186244d0 [root@docker~] #dockerps-l CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 29e9a41e563dcentos "/bin/bash" 7secondsagoUp5secondsvolume-test2 [root@docker~] #cp-r/usr/share/doc/abrt-2.0.8//volume-test2-data/ [root@docker~] #ls-l/volume-test2-data/ total4 drwxr-xr-x2rootroot4096Feb2409:58abrt-2.0.8 容器内的操作: [root@docker~] #./in.sh29e9a41e563d [root@centos7/] #df-h FilesystemSizeUsedAvailUse%Mountedon /dev/mapper/docker-8 :3-8388750-29e9a41e563d514c8b9f14d14a0426af955651b28109c4851cfec40a186244d09.8G230M9.0G3%/ tmpfs1.9G01.9G0% /dev shm64M064M0% /dev/shm /dev/sda3 193G11G173G6% /etc/hosts [root@centos7/] #cd/centos-data/ [root@centos7centos-data] #ls abrt-2.0.8 [root@centos7centos-data] #cp/etc/passwd. [root@centos7centos-data] #ls abrt-2.0.8 passwd [root@docker_data] #ls/volume-test2-data/ abrt-2.0.8 passwd 3、系统指定的目录,进行挂载(可挂载多个,并设置权限,默认为rw权限) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 宿主机的操作: 先删除原有的容器 [root@docker~] #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 29e9a41e563dcentos "/bin/bash" 11minutesagoUp11minutesvolume-test2 8884fc392971nginx"nginx-g'daemonof13hoursagoUp51minutes80 /tcp ,443 /tcp nginxdocker 14caa9ab03a9dockerui /dockerui "/dockerui" 46hoursagoUp51minutes0.0.0.0:9000->9000 /tcp dockerui_qinwen e278cabec91ecentos "/bin/bash" 47hoursagoUp51minutescentos_aways 删除正在允许的容器时,会有报错信息: [root@docker~] #dockerrm29e9a41e563d-f Errorresponsefromdaemon:Cannotdestroycontainer29e9a41e563d:Conflict,Youcannotremovearunningcontainer.Stopthecontainerbeforeattemptingremovaloruse-f Errorresponsefromdaemon:nosuch id :-f Error:failedtoremovecontainers:[29e9a41e563d-f] [root@docker~] #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 29e9a41e563dcentos "/bin/bash" 11minutesagoUp11minutesvolume-test2 8884fc392971nginx"nginx-g'daemonof13hoursagoUp52minutes80 /tcp ,443 /tcp nginxdocker 14caa9ab03a9dockerui /dockerui "/dockerui" 46hoursagoUp52minutes0.0.0.0:9000->9000 /tcp dockerui_qinwen e278cabec91ecentos "/bin/bash" 47hoursagoUp52minutescentos_aways 先停止容器,然后再进行删除: [root@docker~] #dockerstop29e9a41e563d 29e9a41e563d [root@docker~] #dockerrm29e9a41e563d 29e9a41e563d [root@docker~] #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 8884fc392971nginx"nginx-g'daemonof13hoursagoUp52minutes80 /tcp ,443 /tcp nginxdocker 14caa9ab03a9dockerui /dockerui "/dockerui" 46hoursagoUp52minutes0.0.0.0:9000->9000 /tcp dockerui_qinwen e278cabec91ecentos "/bin/bash" 47hoursagoUp52minutescentos_aways 运行一个基于centos镜像的容器,容器名称为volume-test2,并设置容器中的主机名为centos7(仅对容器有效),挂载本地的 /volume-test2-data 以及 /opt 目录,并且指定 /opt 目录对容器是只读的 [root@docker~] #dockerrun-it-d--namevolume-test2-hcentos7--restart=always-v/volume-test2-data:/centos-data-v/opt:/opt:rocentos 37652d4601948fe8421c0371278e9bee8c5cbb35f16c7bf755764d56ddafa304 [root@docker~] #dockerps-l CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 37652d460194centos "/bin/bash" 16secondsagoUp15secondsvolume-test2 [root@docker~] #./in.sh37652d460194 容器内的操作: [root@centos7/] #cd/opt/ [root@centos7opt] #ls rh [root@centos7opt] #ls opt.isorh [root@centos7opt] #touch123.txt touch :cannot touch ‘123.txt’:Read-only file system --volume-from: 继承容器数据卷的操作: [root@docker~] #dockerrun-it-d--restart=always--namevolume-test04--volumes-fromvolume-test2centos 94ea720a2c418286d26068d126df35523742e2f910685863f876c3ba9c09638c [root@docker~] #dockerps-l CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 94ea720a2c41centos "/bin/bash" 6secondsagoUp4secondsvolume-test04 [root@docker~] #./in.sh94ea720a2c41 [root@94ea720a2c41/] #ls/ anaconda-post.logcentos-dataetcliblost+foundmntprocrunsrvtmpvar bindevhomelib64mediaoptrootsbinsysusr [root@94ea720a2c41/] #cd/opt/ [root@94ea720a2c41opt] #ls opt.isorh [root@94ea720a2c41opt] #cd/centos-data/ [root@94ea720a2c41centos-data] #ls abrt-2.0.8 passwd [root@94ea720a2c41centos-data] #touch12345.txt [root@94ea720a2c41centos-data] #cd/opt [root@94ea720a2c41opt] #ls opt.isorh [root@94ea720a2c41opt] #touch111 touch :cannot touch ‘111’:Read-only file system 拥有volume-test2的容器的操作: [root@docker~] #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 94ea720a2c41centos "/bin/bash" 45secondsagoUp43secondsvolume-test04 37652d460194centos "/bin/bash" AboutanhouragoUpAboutanhourvolume-test2 8884fc392971nginx"nginx-g'daemonof14hoursagoUpAboutanhour80 /tcp ,443 /tcp nginxdocker 14caa9ab03a9dockerui /dockerui "/dockerui" 47hoursagoUpAboutanhour0.0.0.0:9000->9000 /tcp dockerui_qinwen e278cabec91ecentos "/bin/bash" 2daysagoUpAboutanhourcentos_aways [root@docker~] #./in.sh37652d460194 [root@centos7/] #ls anaconda-post.logcentos-dataetcliblost+foundmntprocrunsrvtmpvar bindevhomelib64mediaoptrootsbinsysusr [root@centos7/] #cd/centos-data/ [root@centos7centos-data] #ls abrt-2.0.8 passwd [root@centos7centos-data] #ls 12345.txtabrt-2.0.8 passwd 进一步进行测试: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [root@docker~] #dockerrun-it-d--restart=always--namevolume-test04--volumes-fromvolume-test2centos 94ea720a2c418286d26068d126df35523742e2f910685863f876c3ba9c09638c 宿主机上的操作: [root@docker~] #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 94ea720a2c41centos "/bin/bash" 14minutesagoUp14minutesvolume-test04 37652d460194centos "/bin/bash" AboutanhouragoUpAboutanhourvolume-test2 8884fc392971nginx"nginx-g'daemonof14hoursagoUp2hours80 /tcp ,443 /tcp nginxdocker 14caa9ab03a9dockerui /dockerui "/dockerui" 47hoursagoUp2hours0.0.0.0:9000->9000 /tcp dockerui_qinwen e278cabec91ecentos "/bin/bash" 2daysagoUp2hours [root@docker~] #dockerstop37652d460194 37652d460194 [root@docker~] #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 94ea720a2c41centos "/bin/bash" 14minutesagoUp14minutesvolume-test04 8884fc392971nginx"nginx-g'daemonof14hoursagoUp2hours80 /tcp ,443 /tcp nginxdocker 14caa9ab03a9dockerui /dockerui "/dockerui" 47hoursagoUp2hours0.0.0.0:9000->9000 /tcp dockerui_qinwen e278cabec91ecentos "/bin/bash" 2daysagoUp2hourscentos_aways [root@docker_data] #cd/volume-test2-data [root@dockervolume-test2-data] #ls 12345.txtabrt-2.0.8 passwd [root@dockervolume-test2-data] #ls-lrt total8 drwxr-xr-x2rootroot4096Feb2409:58abrt-2.0.8 -rw-r--r--1rootroot692Feb2410:01 passwd -rw-r--r--1rootroot0Feb2411:1612345.txt 容器内的操作: [root@94ea720a2c41opt] #cd/centos-data/ [root@94ea720a2c41centos-data] #ls-lrt total8 drwxr-xr-x2rootroot4096Feb2401:58abrt-2.0.8 -rw-r--r--1rootroot692Feb2402:01 passwd -rw-r--r--1rootroot0Feb2403:1612345.txt [root@94ea720a2c41centos-data] # 说明: 1、验证后可以发现,ro权限是正常的 2、这种映射在Dockerfile里面是没法使用的 3、这里我们不管volume-test2 所属的容器是否正在允许,在新主机中均能够继承 本文转自 冰冻vs西瓜 51CTO博客,原文链接:http://blog.51cto.com/molewan/1744570,如需转载请自行联系原作者

优秀的个人博客,低调大师

Swarm Mode服务管理

环境准备 [root@swarm-manager ~]# cat > ./sources.list <<END > deb http://mirrors.aliyun.com/debian stretch main contrib non-free > deb http://mirrors.aliyun.com/debian stretch-proposed-updates main contrib non-free > deb http://mirrors.aliyun.com/debian stretch-updates main contrib non-free > deb http://mirrors.aliyun.com/debian-security/ stretch/updates main non-free contrib > END [root@swarm-manager ~]# cat Dockerfile FROM nginx:latest ADD sources.list /etc/apt/sources.list RUN apt-get update && apt-get install -y dnsutils iproute2 net-tools curl && apt-get clean ADD index.html /usr/share/nginx/html/index.html [root@swarm-manager ~]# echo "nginx:v1" > index.html [root@swarm-manager ~]# docker build -t registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 . [root@swarm-manager ~]# echo "nginx:v2" > index.html [root@swarm-manager ~]# docker build -t registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 . [root@swarm-manager ~]# docker push registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 [root@swarm-manager ~]# docker push registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 create [root@swarm-manager ~]# docker service create --name nginx registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 [root@swarm-manager ~]# docker service ls ID NAME MODE REPLICAS IMAGE PORTS 63c04khgjl03 nginx replicated 1/1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 [root@swarm-manager ~]# docker service ps nginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS zo87xl8e3in9 nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Running Running 4 minutes ago update [root@swarm-manager ~]# docker service update --network-add my-network --publish-add 80:80 nginx [root@swarm-manager ~]# docker service ls ID NAME MODE REPLICAS IMAGE PORTS 63c04khgjl03 nginx replicated 1/1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 *:80->80/tcp [root@swarm-manager ~]# docker service ps nginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS lppql3gw8phx nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Running Running 3 minutes ago zo87xl8e3in9 \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Shutdown Shutdown 3 minutes ago Scale [root@swarm-manager ~]# docker service scale nginx=2 [root@swarm-manager ~]# docker service ps nginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS lppql3gw8phx nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Running Running 4 minutes ago zo87xl8e3in9 \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Shutdown Shutdown 4 minutes ago qqptr8htux76 nginx.2 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node2 Running Running 2 minutes ago update & rollback 查看当前版本 [root@swarm-manager ~]# curl 127.0.0.1 nginx:v1 进行rolling update [root@swarm-manager ~]# docker service update --image registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 nginx [root@swarm-manager ~]# docker service ps nginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS iwpnzn3ss6uo nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 swarm-node1 Running Running 4 minutes ago lppql3gw8phx \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Shutdown Shutdown 4 minutes ago zo87xl8e3in9 \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Shutdown Shutdown 5 minutes ago 1c47y3e14dc0 nginx.2 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 swarm-node2 Running Running 3 minutes ago qqptr8htux76 \_ nginx.2 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node2 Shutdown Shutdown 3 minutes ago [root@swarm-manager ~]# curl 127.0.0.1 nginx:v2 进行rollback [root@swarm-manager ~]# docker service update --rollback nginx nginx [root@swarm-manager ~]# docker service ps nginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS xign4i5kxc0m nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Running Running 3 minutes ago iwpnzn3ss6uo \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 swarm-node1 Shutdown Shutdown 3 minutes ago lppql3gw8phx \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Shutdown Shutdown 5 minutes ago zo87xl8e3in9 \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Shutdown Shutdown 6 minutes ago em9hv301ga5f nginx.2 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node2 Running Running 3 minutes ago 1c47y3e14dc0 \_ nginx.2 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 swarm-node2 Shutdown Shutdown 3 minutes ago qqptr8htux76 \_ nginx.2 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node2 Shutdown Shutdown 4 minutes ago [root@swarm-manager ~]# curl 127.0.0.1 nginx:v1 healthcheck 增加健康检查 [root@swarm-manager ~]# docker service update --health-cmd "curl -f http://localhost/ || exit 1" nginx [root@swarm-node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f7e1935f1c22 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 "nginx -g 'daemon ..." 17 seconds ago Up 12 seconds (health: starting) 80/tcp nginx.1.9dz6g3bizl4kwh8lctr552c6a [root@swarm-node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f7e1935f1c22 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 "nginx -g 'daemon ..." 44 seconds ago Up 38 seconds (healthy) 80/tcp nginx.1.9dz6g3bizl4kwh8lctr552c6a 故障测试 可见当健康状态异常时,将会停止并移除掉异常的容器并重新启动一个新的容器。 [root@swarm-node1 ~]# docker exec -it f7e1935f1c22 rm -f /usr/share/nginx/html/index.html [root@swarm-node1 ~]# date Wed Aug 16 16:48:41 CST 2017 [root@swarm-node1 ~]# docker events --since "2017-08-16T16:48:35" 2017-08-16T16:48:40.063995281+08:00 container exec_create: rm -f /usr/share/nginx/html/index.html f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=lkb6ags10aprqvzii5aht3pjf, com.docker.swarm.task.name=nginx.1.lkb6ags10aprqvzii5aht3pjf, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.lkb6ags10aprqvzii5aht3pjf) ... 2017-08-16T16:49:57.889494869+08:00 container health_status: unhealthy f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=lkb6ags10aprqvzii5aht3pjf, com.docker.swarm.task.name=nginx.1.lkb6ags10aprqvzii5aht3pjf, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.lkb6ags10aprqvzii5aht3pjf) 2017-08-16T16:49:59.891503804+08:00 container kill f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=lkb6ags10aprqvzii5aht3pjf, com.docker.swarm.task.name=nginx.1.lkb6ags10aprqvzii5aht3pjf, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.lkb6ags10aprqvzii5aht3pjf, signal=15) 2017-08-16T16:49:59.964124883+08:00 container die f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=lkb6ags10aprqvzii5aht3pjf, com.docker.swarm.task.name=nginx.1.lkb6ags10aprqvzii5aht3pjf, exitCode=0, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.lkb6ags10aprqvzii5aht3pjf) 2017-08-16T16:50:00.289350308+08:00 network disconnect i6xug49nwdsxauqqpli3apvym (container=f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a, name=ingress, type=overlay) 2017-08-16T16:50:00.289489879+08:00 network disconnect vxe1cwk14avlfp2xjgymhkhdl (container=f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a, name=my-network, type=overlay) 2017-08-16T16:50:00.345105732+08:00 container stop f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=lkb6ags10aprqvzii5aht3pjf, com.docker.swarm.task.name=nginx.1.lkb6ags10aprqvzii5aht3pjf, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.lkb6ags10aprqvzii5aht3pjf) 2017-08-16T16:50:00.922761678+08:00 container create 2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934 (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=y00kqcu26sq75js3fvpqx4kt5, com.docker.swarm.task.name=nginx.1.y00kqcu26sq75js3fvpqx4kt5, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.y00kqcu26sq75js3fvpqx4kt5) 2017-08-16T16:50:03.006063329+08:00 network destroy vxe1cwk14avlfp2xjgymhkhdl (name=my-network, type=overlay) 2017-08-16T16:50:03.376037876+08:00 container destroy 965a0ce53c2c0f2d5a740cb87c39ea51d164f1a6cf5bea0cf0679883dd99cb5c (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=xign4i5kxc0mfp1pji7zzkoo1, com.docker.swarm.task.name=nginx.1.xign4i5kxc0mfp1pji7zzkoo1, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.xign4i5kxc0mfp1pji7zzkoo1) 2017-08-16T16:50:05.720425867+08:00 network connect i6xug49nwdsxauqqpli3apvym (container=2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934, name=ingress, type=overlay) 2017-08-16T16:50:05.808884815+08:00 network disconnect i6xug49nwdsxauqqpli3apvym (container=2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934, name=ingress, type=overlay) 2017-08-16T16:50:05.919636688+08:00 network create vxe1cwk14avlfp2xjgymhkhdl (name=my-network, type=overlay) 2017-08-16T16:50:06.102359133+08:00 network connect i6xug49nwdsxauqqpli3apvym (container=2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934, name=ingress, type=overlay) 2017-08-16T16:50:06.453151382+08:00 network connect vxe1cwk14avlfp2xjgymhkhdl (container=2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934, name=my-network, type=overlay) 2017-08-16T16:50:07.062684099+08:00 container start 2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934 (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=y00kqcu26sq75js3fvpqx4kt5, com.docker.swarm.task.name=nginx.1.y00kqcu26sq75js3fvpqx4kt5, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.y00kqcu26sq75js3fvpqx4kt5) 2017-08-16T16:51:07.221879814+08:00 container exec_create: /bin/sh -c curl -f http://localhost/ || exit 1 2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934 (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=y00kqcu26sq75js3fvpqx4kt5, com.docker.swarm.task.name=nginx.1.y00kqcu26sq75js3fvpqx4kt5, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.y00kqcu26sq75js3fvpqx4kt5) [root@swarm-node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2132a1bd9287 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 "nginx -g 'daemon ..." 31 minutes ago Up 30 minutes (healthy) 80/tcp nginx.1.y00kqcu26sq75js3fvpqx4kt5 constraint & placement lable [root@swarm-manager ~]# docker node update --label-add project=nginx swarm-node2 [root@swarm-manager ~]# docker node update --label-add "datacenter=xiamen" swarm-node1 [root@swarm-manager ~]# docker node update --label-add "datacenter=fuzhou" swarm-node2 [root@swarm-manager ~]# docker node inspect -f {{.Spec.Labels}} swarm-node1 map[datacenter:xiamen] [root@swarm-manager ~]# docker node inspect -f {{.Spec.Labels}} swarm-node2 map[datacenter:fuzhou project:nginx] constraint [root@swarm-manager ~]# docker service create --replicas=4 --constraint 'node.hostname == swarm-node1' --name nginx-c1 nginx [root@swarm-manager ~]# docker service create --replicas=4 --constraint 'node.labels.project == nginx' --name nginx-c2 nginx [root@swarm-manager ~]# docker service ps nginx-c1 ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS sqcyg8wm8gdt nginx-c1.1 nginx:latest swarm-node1 Running Running 5 minutes ago ttst5umkpt6g nginx-c1.2 nginx:latest swarm-node1 Running Running 5 minutes ago lpiz1vsaj6p3 nginx-c1.3 nginx:latest swarm-node1 Running Running 5 minutes ago ykvrdyty4qie nginx-c1.4 nginx:latest swarm-node1 Running Running 5 minutes ago [root@swarm-manager ~]# docker service ps nginx-c2 ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS x322u16dfnyt nginx-c2.1 nginx:latest swarm-node2 Running Running 5 minutes ago zjp93whpf4ah nginx-c2.2 nginx:latest swarm-node2 Running Running 5 minutes ago ff3usxkpo5ae nginx-c2.3 nginx:latest swarm-node2 Running Running 5 minutes ago p3g0haaqg6yu nginx-c2.4 nginx:latest swarm-node2 Running Running 5 minutes ago placement [root@swarm-manager ~]# docker service create --replicas=6 --placement-pref 'spread=node.labels.datacenter' --name nginx-c3 nginx [root@swarm-manager ~]# docker service ps nginx-c3 ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS p3y7774kpu0w nginx-c3.1 nginx:latest swarm-node2 Running Running 3 minutes ago 081l22wh87ok nginx-c3.2 nginx:latest swarm-node1 Running Running 3 minutes ago lj1t30mok3te nginx-c3.3 nginx:latest swarm-node1 Running Running 3 minutes ago fhb90j6brwuv nginx-c3.4 nginx:latest swarm-node2 Running Running 3 minutes ago ein699law198 nginx-c3.5 nginx:latest swarm-node2 Running Running 3 minutes ago vo91976o481m nginx-c3.6 nginx:latest swarm-node1 Running Running 3 minutes ago deploy Docker1.13推出了一个新版本的Docker Compose(V3)。该版本的主要特征是,允许Swarm Mode使用Docker Compose文件定义直接部署服务。 定义compose-file [root@swarm-manager ~]# cat docker-compose.yml version: '3' services: mysql: image: mysql environment: - MYSQL_ROOT_PASSWORD=password wordpress: image: wordpress ports: - 80:80 links: - mysql:mysql environment: - WORDPRESS_DB_PASSWORD=password 在Swarm Mode下,需要使用docker stack deploy命令进行部署,如果直接使用docker-compose up则将会出现如下警告: [root@swarm-manager ~]# docker-compose up WARNING: The Docker Engine you're using is running in swarm mode. Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node. To deploy your application across the swarm, use `docker stack deploy`. 通过compose-file部署多个Service # docker stack deploy --compose-file=docker-compose.yml demo# docker stack ps demo5.1366.14# docker stack services demo11808011,如需转载请自行联系原作者

优秀的个人博客,低调大师

Hadoop的管理目录

HDFS文件结构 1、NameNode的文件结构,NameNode会创建VERSION、edits、fsimage、fstime文件目录。其中dfs.name.dir属性是一个目录列表,是每个目录的镜像文件。VERSION文件是JAVA属性文件,其中包含运行HDFS的版本信息。包含内容: 其中,namespaceID是文件系统的唯一标识符,当文件系统第一次格式化时,便会被创建,这个标识符是必须跟各DataNode及诶单和NameNode保持一致。NameNode会使用它识别新的DataNode,DataNode只有在向NameNode注册后才会获得此namespaceID。cTime属性标记了NameNode存储空间创建的时间。对于新格式化的,这里时间为0,只要文件系统被更新,就会更新到一个新的时间戳上。StorageType指出此存储目录包含一个NameNode的数据结构,在DataNode中它的属性值为DATA_NODE. LayoutVersion是一个负的整数,定义了HDFS持久数据结构的版本。各节点的版本号要一致。 在NameNode的存储目录中还包含edits、fsimage、fstime三个文件,它们都是二进制的文件,可以通过HadoopWritable对象进行序列化。 2、编辑日志(edit log)及文件系统映像(filesystem image) (1)当客户执行写操作时,首先NameNode会在编辑日志中写下记录,并在内存中保存一个文件系统元数据,这个描述符在编辑日志有了改动后更新,内存中的元数据用来提供读数据请求服务。 (2)编辑日志会在每次成功操作之后,且成功代码尚未返回给客户端之前进行刷新和同步。对于要写入多个目录的操作,写入流要刷新和同步到所有的副本上,保证操作不会因为故障而丢失数据。 (3)fsimage文件是文件系统元数据的持久性检查点,和编辑日志不同,它不会在每个文件系统写操作后进行更新,因为如果NameNode失败,那么元数据的最新状态可以通过从磁盘中读取fsimage文件加载到内存中来进行重建恢复,然后进行编辑日志中的操作(NameNode启动时也做的事情)。一个fsimage文件中包含以序列化格式存储的文件系统目录和文件inodes.每个inodes表征一个文件或目录的元数据信息,以及文件的副本数、修改和访问时间等信息。 Hadoop在NameNode之外的节点上运行了一个Secondary NameNode进程,它的任务是为原NameNode内存中的文件系统元数据产生检查点。是一个辅助NameNode处理fsimage和编辑日志的节点,它从NameNode中拷贝fsimage和编辑日志到零食目录合并成一个新的fsimage,随后会将新的fsimage上传到NameNode,这样NameNode便可更新fsimage并删除原来的编辑日志了。 NameNode在安全模式下,可通过以下命令运行这个过程: hadoop dfsadmin -saveNamespace

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册