乱码三千 – 分享实用IT技术

乱码三千 – 码出一个新世界


  • 首页

  • 归档

  • 搜索

Android 图片实现阴影效果的若干种方法

发表于 2020-04-10

第一种 使用 layer-list

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<!--底层的左边距离上层左边3dp, 底层的顶部,距离上层的顶部6dp,如果不做这个控制,底层和上层的左侧和上侧会重合在一起-->
<item android:left="3dp"
android:top="6dp">
<shape>
<solid android:color="#b4b5b6"/>
</shape>
</item>

<!--上层的右边距离底层的右边3dp, 上层的底部距离底层的底部6dp-->
<item android:bottom="6dp"
android:right="3dp">
<shape>
<solid android:color="#fff"/>
</shape>
</item>

</layer-list>

第二种 使用 shadow属性

shadowDX、shadowDy、shadowRadius,分别指的是阴影的横、纵坐标偏移,以及阴影的半径,

如果是TextView可以直接在布局中设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
<TextView 
android:id="@+id/test_shadow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="60sp"
android:textColor="#cc000000"
android:text="Test Shadow"
android:layout_gravity="center"
android:shadowColor="#aa22ff22"
android:shadowRadius="10"
android:shadowDx="0"
android:shadowDy="0"
/>

第三种 使用android:elevation属性

<TextView
android:id="@+id/btn_test_performance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="5dp"
android:text="@string/hello"
android:background="@drawable/shape_round_white"
android:padding="20dp"
android:layout_marginTop="10dp"
android:layout_gravity="center"/>

这种方式有个局限性, 那就是api25以上才能显示出来

第四种 使用第三方控件

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
148
149
150
151
152
153
/**
* ShadowLayout.java
* <p>
* Created by lijiankun on 17/8/11.
*/

public class ShadowLayout extends RelativeLayout {

public static final int ALL = 0x1111;

public static final int LEFT = 0x0001;

public static final int TOP = 0x0010;

public static final int RIGHT = 0x0100;

public static final int BOTTOM = 0x1000;

private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

private RectF mRectF = new RectF();

/**
* 阴影的颜色
*/
private int mShadowColor = Color.TRANSPARENT;

/**
* 阴影的大小范围
*/
private float mShadowRadius = 0;

/**
* 阴影 x 轴的偏移量
*/
private float mShadowDx = 0;

/**
* 阴影 y 轴的偏移量
*/
private float mShadowDy = 0;

/**
* 阴影显示的边界
*/
private int mShadowSide = ALL;

public ShadowLayout(Context context) {
this(context, null);
}

public ShadowLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public ShadowLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(attrs);
}

/**
* 获取绘制阴影的位置,并为 ShadowLayout 设置 Padding 以为显示阴影留出空间
*/
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);

float effect = mShadowRadius + dip2px(5);
float rectLeft = 0;
float rectTop = 0;
float rectRight = this.getWidth();
float rectBottom = this.getHeight();
int paddingLeft = 0;
int paddingTop = 0;
int paddingRight = 0;
int paddingBottom = 0;

if (((mShadowSide & LEFT) == LEFT)) {
rectLeft = effect;
paddingLeft = (int) effect;
}
if (((mShadowSide & TOP) == TOP)) {
rectTop = effect;
paddingTop = (int) effect;
}
if (((mShadowSide & RIGHT) == RIGHT)) {
rectRight = this.getWidth() - effect;
paddingRight = (int) effect;
}
if (((mShadowSide & BOTTOM) == BOTTOM)) {
rectBottom = this.getHeight() - effect;
paddingBottom = (int) effect;
}
if (mShadowDy != 0.0f) {
rectBottom = rectBottom - mShadowDy;
paddingBottom = paddingBottom + (int) mShadowDy;
}
if (mShadowDx != 0.0f) {
rectRight = rectRight - mShadowDx;
paddingRight = paddingRight + (int) mShadowDx;
}
mRectF.left = rectLeft;
mRectF.top = rectTop;
mRectF.right = rectRight;
mRectF.bottom = rectBottom;
this.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
}

/**
* 真正绘制阴影的方法
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRect(mRectF, mPaint);
}

/**
* 读取设置的阴影的属性
*
* @param attrs 从其中获取设置的值
*/
private void init(AttributeSet attrs) {
setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 关闭硬件加速
this.setWillNotDraw(false); // 调用此方法后,才会执行 onDraw(Canvas) 方法

TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.ShadowLayout);
if (typedArray != null) {
mShadowColor = typedArray.getColor(R.styleable.ShadowLayout_shadowColor,
ContextCompat.getColor(getContext(), android.R.color.black));
mShadowRadius = typedArray.getDimension(R.styleable.ShadowLayout_shadowRadius, dip2px(0));
mShadowDx = typedArray.getDimension(R.styleable.ShadowLayout_shadowDx, dip2px(0));
mShadowDy = typedArray.getDimension(R.styleable.ShadowLayout_shadowDy, dip2px(0));
mShadowSide = typedArray.getInt(R.styleable.ShadowLayout_shadowSide, ALL);
typedArray.recycle();
}
mPaint.setAntiAlias(true);
mPaint.setColor(Color.TRANSPARENT);
mPaint.setShadowLayer(mShadowRadius, mShadowDx, mShadowDy, mShadowColor);
}

/**
* dip2px dp 值转 px 值
*
* @param dpValue dp 值
* @return px 值
*/
private float dip2px(float dpValue) {
DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
float scale = dm.density;
return (dpValue * scale + 0.5F);
}
}

属性文件:

1
2
3
4
5
6
7
<declare-styleable name="ShadowLayout">
<attr name="shadowColor" format="color"/>
<attr name="shadowRadius" format="dimension"/>
<attr name="shadowDx" format="dimension"/>
<attr name="shadowDy" format="dimension"/>
<attr name="shadowSide" format="integer"/>
</declare-styleable>

第五种 使用9patch图片(强烈推荐)

该种方式定制性强, 兼容性好, 需要注意的是避免将9patch宽高设置过大 小图可以拉大 大图不方便缩小

链接地址:http://inloop.github.io/shadow4android/

本帖附件

点击下载

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

同一个局域网内远程控制电脑桌面的若干种方法

发表于 2020-02-11

本文持续更新中

  • 第三方软件
  • 局域网ip+3389端口

本帖附件

点击下载

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

外网电脑远程控制内网电脑桌面的若干种方法

发表于 2020-02-10

本文持续更新中

  • 第三方软件(如:QQ、TeamViewer、向日葵、anydesk、Splashtop….)
  • 路由器端口映射
  • frp

咱们接下来挨个介绍, 首先

第三方软件

如果你是小白, 追求实用性, 并且想快速上手远程控制, 那么第三方软件无疑是最好的选择, 如果你想用, 那么TeamViewer绝对是首选,个人版免费, 而且可设置无人值守, 只需一个ID和密码就能立马控制远程主机, 速度非常可观

官网地址: https://www.teamviewer.cn/cn/

路由器端口映射

如果你不情愿在电脑上装一堆软件, 或者想设置备用控制方案, 那么我建议你使用端口映射的方案, 将公网ip转发到内网需要控制的电脑ip上

frp

如果你有IT技术功底, 喜欢折腾, 并且有一颗耐操的脑袋, 同时不差钱, 那么我会建议你采用frp方案

详见《使用内网云进行内网穿透实现外网访问局域网中的服务器》

VNC桌面共享

linux可参考:https://www.jianshu.com/p/3488968c81cb

本帖附件

点击下载

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Linux环境下docker常用指令集合

发表于 2020-01-21

使用前提

需要先安装docker, 可参考《ubuntu安装docker详细步骤》

Docker容器基础指令

  1. 启动docker

    1
    sudo systemctl start docker
  2. 停止docker

    1
    sudo systemctl stop docker
  3. 查看docker状态

    1
    sudo systemctl status docker
  4. 重启docker

    1
    sudo systemctl restart docker
  5. 设置开启启动docker

    1
    sudo systemctl enable docker

常用Docker镜像指令

  1. 查看本地镜像

    1
    sudo docker images
  2. 拉取最新镜像

    1
    sudo docker pull [镜像名]:latest
  3. 创建并后台运行容器

    1
    sudo docker run -itd --name=[名称] [镜像名]:版本名
  4. 查看当前所有运行的容器信息

    1
    2
    3
    sudo docker ps
    另外
    sudo docker ps -a //查看所有容器
  5. 运行容器 并设置在后台一直运行

    1
    sudo docker run -itd --name [名称]  -d [镜像名]
  6. 查看镜像可用版本

    1
    sudo docker search [镜像名]
  7. 进入指定容器

    1
    sudo docker exec -it [镜像名] /bin/bash
  8. 创建容器 并将本地 8080 端口映射到容器内部的 80 端口

    1
    sudo docker run --name [镜像名] -p 8080:80
  9. 创建容器 并将主机中当前目录下的 test 挂载到容器的指定目录

    1
    sudo docker run --name [镜像名]  -v $PWD/test:[容器目录]
  10. 创建容器 并指定工作目录

    1
    sudo docker run --name [镜像名]  -w [工作目录]
  11. 停止运行容器

    1
    docker stop [容器id]

    或者

    1
    docker stop [容器名]
  12. 创建容器 并设置需要密码才能访问容器服务

    1
    sudo docker run --name [镜像名]  --auth
  13. 查看容器内的标准输出

    1
    2
    3
    sudo docker logs [容器名]
    另外
    sudo docker logs -f [容器名] //停留在尾部
  14. 删除容器

    1
    sudo docker rm -f [容器id] [容器id2] //多个容器以空格隔开-f表示强制删除
  15. 重启容器

    1
    sudo docker restart [容器id]
  16. 导出容器

    1
    sudo docker export [容器id] > [目标文件]
  17. 查看容器内部运行的进程

    1
    sudo docker top [容器名]
  18. 查看容器的配置和状态信息

    1
    sudo docker inspect  [容器名]
  19. 查询最后一次创建的容器

    1
    sudo docker ps -l
  20. 为镜像添加一个新的标签

    1
    sudo docker tag [镜像名]
  21. 查询镜像在什么位置

    1
    which [镜像名]
  22. 查看容器资源占用情况

    1
    sudo docker stats
  23. 删除所有容器

    1
    sudo docker rm $(docker ps -aq)
  24. 暂停指定容器

    1
    sudo docker pause [容器名]
  25. 查看具体指令的使用方法

    1
    sudo docker help [具体指令]
  26. 查看当前已有的网络

    1
    sudo docker network ls
  27. 创建自定义网络

    1
    docker network create [网络名]
  28. 后台运行容器 并指定容器想要连接的网络

    1
    docker run -dit --name [容器名] --network [网络名] alpine
  29. 将指定容器连接到指定网络上

    1
    docker network connect [网络名] [容器名]
  30. 删除指定网络

    1
    docker network rm [网络名]
  31. 查看某时间段日志

    1
    docker logs -t --since="2019-10-24T13:23:37" --until "2019-10-25T12:23:37" [容器名]
  32. 查看某时间之后的日志

    1
    docker logs -t --since="2019-10-24T13:23:37" [容器名]
  33. 查看最近30分钟的日志

    1
    docker logs --since 30m [容器名]
  34. 只打印最后50行日志

    1
    docker logs --tail=50 [容器名]
  35. 查看指定时间后的日志,只显示最后100行

    1
    docker logs -f -t --since="2019-10-24" --tail=100 CONTAINER_ID
  36. 设置开机自动启动docker服务

    1
    sudo systemctl enable docker
  37. 禁止自启

    1
    sudo systemctl disable docker
  38. 查看docker版本

    1
    docker version
  39. 创建数据卷容器

    1
    docker run -it --name=data -v /volume ubuntu:latest /bin/bash
  40. 其他容器挂载数据卷容器

    1
    docker run -it --name=c1 --volumes-from data ubuntu:latest /bin/bash
  41. 启动已经停止的容器

    1
    docker start [容器名]
  42. 强制停止正在运行的容器

    1
    docker kill [容器名]
  43. 查看所有容器id, 包括已经停止的容器

    1
    docker ps -aq
  44. 查看所有已启动容器id

    1
    docker ps -q
  45. 查看容器内部的进程

    1
    docker top 容器名
  46. 容器配置更新

    1
    docker update xxx

    比如 更新是否自启动:

    1
    docker update --restart=always

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

markdown导出带目录PDF的三种方法

发表于 2020-01-21

将文档导出PDF, 内容一旦比较多, 如果没有目录跳转的话找起来特别费劲, 以下是解决方案

第一种 使用CSDN

1. 编辑好文章后 点击导出, 选择导出为HTML

2. 选择导出的模板

3. 使用HTML转PDF工具进行格式转换

软件下载链接:https://wkhtmltopdf.org/downloads.html
使用方法:
wkhtmltopdf --disable-smart-shrinking html文件路径 导出的pdf文件路径 //html路径可使用网络路径

4. 如果嫌下载软件麻烦, 也可以直接使用浏览器导出

第二种 使用i5ting_toc工具

此法需要nodejs环境

使用方法:

第一步.安装i5ting_toc

npm install i5ting_toc -g

第二步 使用转换指令 先将md转成html

i5ting_toc -f [需要转换文件名].md

第三步 预览转换后的文件

i5ting_toc -o //默认在同级目录生成preview文件夹

第四步 用浏览器或者将HTML转成PDF即可
效果如下:

第三种 使用vscode插件 Markdown Preview Enhanced

使用方法:

第一步: 安装插件

第二步:打开需要转换的.md文件,右键选择打开同步预览

第三步 将光标放置想要生成目录的输出位置 右键打开命令面板 并输入Markdown Preview Enhanced: Create Toc

​

第四步 点击保存 文档将自动生成目录

第五步 导出你需要的格式 建议导出HTML 然后进行相应的转换即可

最终效果如下:

本帖附件

点击下载

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

新型冠状病毒肺炎安全防范手册健康宝典口罩选购佩戴正确洗手方式

发表于 2020-01-21

基本知识

对于新型冠状病毒肺炎你需要了解一些基本知识:

  一、病毒对外界环境耐受情况:对热敏感,56℃ 30分钟、75%酒精、含氯消毒剂(比如84消毒液)、过氧化氢消毒液(家庭很少用),氯仿等脂溶剂均可有效灭活病毒

  二、传播途径:飞沫传播—打喷嚏;近距离面对面;接触传播。

  三、感染后初期症状:发热(不一定高热,很多病例最初是低热),乏力,呼吸道症状以干咳为主,并逐渐出现呼吸困难,严重者急性呼吸窘迫综合征、脓毒症休克、难以纠正的代谢性酸中毒和出凝血功能障碍。部分患者起病症状轻微,可无发热。

  四、化验检查:发病早期白细胞总数正常或减低,淋巴细胞计数减少。

  多数患者C反应蛋白和血沉升高,降钙素原正常。

  五、痊愈标准:体温恢复正常3天以上、呼吸道症状明显好转,连续两次呼吸道病原核酸检测阴性(间隔至少1天),可解除隔离出院或根据病情转至相应科室治疗其他疾病

  提醒广大职工、研究生及离退休同志:

  一、减少外出,减少接触他人的机会

  二、有接触疑似或者确诊病人史,或者接触过来自疫区人员,从疫区返回人员,应自行居家隔离14天

  三、减少去生鲜市场,避免传染风险

  四、外出戴好口罩,最好N95口罩,压好密封条

  五、勤洗手

  六、饮食清淡,穿衣适中,增强自身免疫力

​ 七、避免在未加防护的情况下接触野生或养殖动物

​ 八、少吃野味

  九、假如出现类似症状,请您戴好口罩及时到发热门诊排查。

口罩分类与选购

药店里五花八门的口罩该如何选择?出门是不是一定要佩戴“网红”N95口罩?

市面上常见的口罩可以分为三类:

1.医用外科口罩

2.医用防护口罩(N95口罩)

3.普通棉纱口罩

其中医用外科口罩可以阻挡70%的细菌,N95口罩可以阻挡95%的细菌,而棉纱口罩只能阻挡36%的细菌,因此我们应该选择前两种口罩。

口罩正确佩戴方法

1.医用外科口罩

医用外科口罩有三层,从外到内分别是防水层、过滤层、舒适层,舒适层是一层纱布,佩戴时白色的纱布朝内,蓝色的防水层朝外,有金属片的一边朝上,不要戴反,橡皮筋挂上双耳后捏紧金属片和鼻子贴合,抚平两颊,使口罩和面部之间尽量不留缝隙。

具体佩戴步骤

第一步 将口罩罩住鼻、口及下巴,橡皮筋系在双耳后

*第二步. 将双手指尖放在鼻夹上,从中间位置开始,用手指向内按压,并逐步向两侧移动,根据鼻梁形状塑造鼻夹, 调整系带的松紧度 *

img

2. 医用防护口罩(N95口罩)

常用的N95口罩实际上分为两种,

  • 一种是防生物口罩(蓝绿色),型号1860或9132;

  • 一种是防尘口罩(白色),型号8210。

市民在购买时应选择防生物的医用防护口罩。佩戴防生物医用防护口罩时,将口罩罩在面部,先将下面的一根橡皮筋固定在脖子上,再将上面一根橡皮筋固定在头上,捏紧金属片,让口罩和面部贴合,不留缝隙。

具体佩戴步骤

第一步. 一手托住防护口罩,有鼻夹的一面背向外

第二步. 将防护口罩罩住鼻、口及下巴,鼻夹部位向上紧贴面部

img

第三步. 用另一只手将下方系带拉过头顶,放在颈后双耳下

img

第四步. 再将上方系带拉至头顶中部

img

第五步. 将双手指尖放在金属鼻夹上,从中间位置开始,用手指向内按鼻夹,并分别向两侧移动和按压,根据鼻梁的形状塑造鼻夹

img

如果还是不太明白怎么佩戴口罩 以下有相关视频 点击即可跳转播放

正确洗手法

洗手应该在流动水下进行,取适量洗手液(肥皂),均匀涂抹至整个手掌,认真搓揉双手至少15秒,清洗所有皮肤和指缝,具体步骤有七步:

1. 掌心相对,手指并拢相互揉搓

2. 手心对手背沿指缝互相揉搓,交替进行

3. 掌心相对,双手交叉指缝相互揉搓

4.双手指相扣互搓

5. 弯曲各手指关节在另一只手掌心旋转揉搓,交换进行

6. 一手握另一手大拇指旋转揉搓,交换进行

7. 将五个手指尖并拢放在另一手掌心旋转揉搓,交换进行

最后,在流动水下冲净双手,擦干,擦干宜使用纸巾。

家庭预防图解

本帖附件

点击下载

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

ubuntu安装docker详细步骤

发表于 2020-01-20

这里建议大家使用阿里云的镜像源

第一步 安装所需的工具包

1
2
3
4
5
6
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

第二步 修改源文件权限

1
sudo chmod 777 /etc/apt/sources.list //设置文件可读可写可执行

第三步 将以下内容添加至源文件中 替换成阿里源 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

第四步 添加阿里公钥 以便于访问仓库

1
2
3
4
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -


curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

第五步 添加Docker软件源

1
2
3
4
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"

第六步 更新软件包缓存

1
sudo apt-get update

第七步 安装docker

1
sudo apt-get install docker-engine

第八部 启动docker

1
2
sudo systemctl enable docker
sudo systemctl start docker

第9步 测试经典的hello world

1
sudo docker run hello-world

执行 sudo docker run hello-world 的时候,如果你没有构建过这个hello-world镜像,或从其它地方拉取过这个镜像,docker自动去docker上拉取最新的hello-world 镜像

至此 docker安装完成

附带Docker国内镜像源

创建或修改 /etc/docker/daemon.json 文件

1
2
3
4
# vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://cr.console.aliyun.com/"]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Docker中国区官方镜像
https://registry.docker-cn.com

网易
http://hub-mirror.c.163.com

ustc
https://docker.mirrors.ustc.edu.cn

中国科技大学
https://docker.mirrors.ustc.edu.cn

阿里云容器 服务
https://cr.console.aliyun.com/

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Linux各大镜像源连接集合

发表于 2020-01-20

官方源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
deb http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse

deb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse

deb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse

deb http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse

deb-src http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse

deb-src http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse

deb-src http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse

deb-src http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb-src http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse

deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse

阿里:

1
2
#阿里公钥
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

网易 Ubuntu 源(速度很快):

1
2
3
4
5
6
7
8
9
10
deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted

中国科技大学 (教育网用户推荐):

1
2
#中科大公钥
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
1
2
3
4
5
6
7
8
9
10
deb http://debian.ustc.edu.cn/ubuntu/ precise main restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ precise-backports restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ precise-security main restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ precise-updates main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ precise main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ precise-security main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ precise-updates main restricted universe multiverse

北京理工大学:

deb http://mirror.bjtu.edu.cn/ubuntu/ precise main multiverse restricted universe
deb http://mirror.bjtu.edu.cn/ubuntu/ precise-backports main multiverse restricted universe
deb http://mirror.bjtu.edu.cn/ubuntu/ precise-proposed main multiverse restricted universe
deb http://mirror.bjtu.edu.cn/ubuntu/ precise-security main multiverse restricted universe
deb http://mirror.bjtu.edu.cn/ubuntu/ precise-updates main multiverse restricted universe
deb-src http://mirror.bjtu.edu.cn/ubuntu/ precise main multiverse restricted universe
deb-src http://mirror.bjtu.edu.cn/ubuntu/ precise-backports main multiverse restricted universe
deb-src http://mirror.bjtu.edu.cn/ubuntu/ precise-proposed main multiverse restricted universe
deb-src http://mirror.bjtu.edu.cn/ubuntu/ precise-security main multiverse restricted universe
deb-src http://mirror.bjtu.edu.cn/ubuntu/ precise-updates main multiverse restricted universe

兰州大学:

deb ftp://mirror.lzu.edu.cn/ubuntu/ precise main multiverse restricted universe
deb ftp://mirror.lzu.edu.cn/ubuntu/ precise-backports main multiverse restricted universe
deb ftp://mirror.lzu.edu.cn/ubuntu/ precise-proposed main multiverse restricted universe
deb ftp://mirror.lzu.edu.cn/ubuntu/ precise-security main multiverse restricted universe
deb ftp://mirror.lzu.edu.cn/ubuntu/ precise-updates main multiverse restricted universe
deb ftp://mirror.lzu.edu.cn/ubuntu-cn/ precise main multiverse restricted universe

上海交通大学:

deb http://ftp.sjtu.edu.cn/ubuntu/ precise main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ precise-backports main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ precise-proposed main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ precise-security main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ precise-updates main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu-cn/ precise main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ precise main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ precise-backports main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ precise-proposed main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ precise-security main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ precise-updates main multiverse restricted universe

centos源(放心使用):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
deb http://centos.bitcomm.cn/ubuntu trusty main restricted universe multiverse

deb http://centos.bitcomm.cn/ubuntu trusty-security main restricted universe multiverse

deb http://centos.bitcomm.cn/ubuntu trusty-updates main restricted universe multiverse

deb http://centos.bitcomm.cn/ubuntu trusty-backports main restricted universe multiverse

deb http://centos.bitcomm.cn/ubuntu trusty-proposed main restricted universe multiverse

deb-src http://centos.bitcomm.cn/ubuntu trusty main restricted universe multiverse

deb-src http://centos.bitcomm.cn/ubuntu trusty-security main restricted universe multiverse

deb-src http://centos.bitcomm.cn/ubuntu trusty-updates main restricted universe multiverse

deb-src http://centos.bitcomm.cn/ubuntu trusty-backports main restricted universe multiverse

deb-src http://centos.bitcomm.cn/ubuntu trusty-proposed main restricted universe multiverse

搜狐源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse

deb http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse

deb http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse

deb http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse

本帖附件

点击下载

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Linux常用指令集

发表于 2020-01-20

常用指令集介绍如下:

  1. 访问源列表中的每个网址,并读取软件列表,然后保存在我们的电脑上
1
sudo apt-get update
  1. 安装可以更新的软件
1
sudo apt-get upgrade
  1. 编辑sources文件
1
sudo edit /etc/apt/sources.list
  1. 拷贝文件
1
sudo cp /etc/apt/sources.list  /etc/apt/sources.list_save
  1. 安装指定软件
1
sudo apt-get install [软件名称]
  1. 将sources.list文件中的archive.ubuntu.com全部替换成mirrors.ustc.edu.cn
1
sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
  1. 只查看文件的第100行到第200行
1
sed -n ‘100,200p’+文件
  1. 删除第二到第五行
1
sed '2,5d'+文件
  1. 删除包含”My”的行到包含”You”的行之间的行
1
sed 'My/,/You/d'+文件
  1. 删除包含”My”的行到第十行的内容
1
sed '/My/,10d'+文件
  1. 设置文件可读可写可执行
1
sudo chmod 777 /etc/apt/sources.list
  1. 查看当前系统版本
1
cat /proc/version
  1. 查看当前ip地址
1
ifconfig

或者

1
ip addr
  1. 连续创建目录
1
mkdir -p ~/python ~/python/myapp
  1. 查看端口是否开启
1
netstat -na |grep [端口号]
  1. 查看当前用户
1
whoami

本帖附件

点击下载

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

可能是把Docker的概念讲的最清楚的一篇文章

发表于 2020-01-20

【编者的话】本文只是对Docker的概念做了较为详细的介绍,并不涉及一些像Docker环境的安装以及Docker的一些常见操作和命令。

Docker是世界领先的软件容器平台,所以想要搞懂Docker的概念我们必须先从容器开始说起。如果你想和更多Docker技术专家交流,可以加我微信liyingjiese,备注『加群』。群里每周都有全球各大公司的最佳实践以及行业最新动态。

先从认识容器开始

什么是容器?

先来看看容器较为官方的解释:

一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。

  • 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
  • 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。
  • 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

再来看看容器较为通俗的解释:

如果需要通俗的描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。

图解物理机、虚拟机与容器

关于虚拟机与容器的对比在后面会详细介绍到,这里只是通过网上的图片加深大家对于物理机、虚拟机与容器这三者的理解。

物理机:

虚拟机:

容器:

通过上面这三张抽象图,我们大概可以通过类比概括出: 容器虚拟化的是操作系统而不是硬件,容器之间是共享同一套操作系统资源的。虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统。因此容器的隔离级别会稍低一些。

相信通过上面的解释大家对于容器这个既陌生又熟悉的概念有了一个初步的认识,下面我们就来谈谈Docker的一些概念。

再来谈谈Docker的一些概念

什么是Docker

说实话关于Docker是什么并太好说,下面我通过四点向你说明Docker到底是个什么东西。

  • Docker是世界领先的软件容器平台。
  • Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docke最初实现是基于LXC。
  • Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。
  • 用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker思想

  • 集装箱
  • 标准化: ①运输方式、②存储方式、 ③API接口
  • 隔离

Docker容器的特点

  • 轻量,在一台机器上运行的多个Docker容器可以共享这台机器的操作系统内核;它们能够迅速启动,只需占用很少的计算和内存资源。镜像是通过文件系统层进行构造的,并共享一些公共文件。这样就能尽量降低磁盘用量,并能更快地下载镜像。
  • 标准,Docker容器基于开放式标准,能够在所有主流Linux版本、Microsoft Windows以及包括VM、裸机服务器和云在内的任何基础设施上运行。
  • 安全,Docker赋予应用的隔离性不仅限于彼此隔离,还独立于底层的基础设施。Docker默认提供最强的隔离,因此应用出现问题,也只是单个容器的问题,而不会波及到整台机器。

为什么要用Docker

  • Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题;——一致的运行环境
  • 可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。——更快速的启动时间
  • 避免公用的服务器,资源会容易受到其他用户的影响。——隔离性
  • 善于处理集中爆发的服务器使用压力;——弹性伸缩,快速扩展
  • 可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。——迁移方便
  • 使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。——持续交付和部署

每当说起容器,我们不得不将其与虚拟机做一个比较。

容器 VS 虚拟机

简单来说: 容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高。

两者对比图

传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

容器与虚拟机 (VM) 总结

  • 容器是一个应用层抽象,用于将代码和依赖资源打包在一起。 多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行 。与虚拟机相比, 容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动 。
  • 虚拟机(VM)是一个物理硬件层抽象,用于将一台服务器变成多台服务器。 管理程序允许多个VM在一台机器上运行。每个VM都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此占用大量空间。而且VM启动也十分缓慢 。

通过Docker官网,我们知道了这么多Docker的优势,但是大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用 ,例如前端,后端以及数据库。

容器与虚拟机(VM)两者是可以共存的

就我而言,对于两者无所谓谁会取代谁,而是两者可以和谐共存。

Docker中非常重要的三个基本概念,理解了这三个概念,就理解了 Docker 的整个生命周期。

Docker基本概念

Docker包括三个基本概念:

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

镜像(Image)——一个特殊的文件系统

操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是一个root文件系统。

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。

Docker设计时,就充分利用Union FS的技术,将其设计为分层存储的架构。 镜像实际是由多层文件系统联合组成。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

容器(Container)——镜像运行时的实体

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。前面讲过镜像使用的是分层存储,容器也是如此。

容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。

按照Docker最佳实践的要求,容器不应该向其存储层内写入任何数据 ,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, 使用数据卷后,容器可以随意删除、重新run,数据却不会丢失。

仓库(Repository)——集中存放镜像文件的地方

镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。

一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。所以说:镜像仓库是Docker用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。

这里补充一下Docker Registry公开服务和私有Docker Registry的概念:

Docker Registry公开服务是开放给用户使用、允许用户管理镜像的Registry服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

最常使用的Registry公开服务是官方的Docker Hub ,这也是默认的Registry,并拥有大量的高质量的官方镜像,网址为:hub.docker.com/ 。在国内访问Docker Hub可能会比较慢国内也有一些云服务商提供类似于Docker Hub的公开服务。

除了使用公开服务外,用户还可以在本地搭建私有Docker Registry 。Docker官方提供了Docker Registry镜像,可以直接使用做为私有Registry服务。开源的Docker Registry镜像只提供了Docker Registry API的服务端实现,足以支持Docker命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。

最后谈谈:Build,Ship,and Run

如果你搜索Docker官网,会发现如下的字样:“Docker - Build, Ship, and Run Any App, Anywhere”。那么Build,Ship,and Run到底是在干什么呢?

  • Build(构建镜像):镜像就像是集装箱包括文件以及运行环境等等资源。
  • Ship(运输镜像):主机和仓库间运输,这里的仓库就像是超级码头一样。
  • Run (运行镜像):运行的镜像就是一个容器,容器就是运行程序的地方。

Docker运行过程也就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器。所以,我们也常常将Docker称为码头工人或码头装卸工,这和Docker的中文翻译搬运工人如出一辙。

总结

本文主要把Docker中的一些常见概念做了详细的阐述,但是并不涉及Docker的安装、镜像的使用、容器的操作等内容。这部分东西,希望读者自己可以通过阅读书籍与官方文档的形式掌握。

本文转载自:https://mp.weixin.qq.com/s/xSbYTJmLuqsyYEDEIsndZw

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

1…414243…48

乱码三千

android程序员一枚,擅长java,kotlin,python,金融投资,欢迎交流~

479 日志
139 标签
RSS
© 2024 乱码三千
本站总访问量次
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4
0%