Docker学习(三) Docker镜像和容器的常用操作

列出镜像
cbc ~ # docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              7                   fd44297e2ddb        8 days ago          229.6 MB
centos              centos7             fd44297e2ddb        8 days ago          229.6 MB
centos              latest              fd44297e2ddb        8 days ago          229.6 MB
<none>              <none>              ae0c2d0bdc10        5 months ago        224 MB

#REPOSITORY 镜像来源仓库
#TAG 镜像标记
#IMAGE ID 镜像唯一 ID
#CREATED 镜像创建时间
#VIRTUAL SIZE 镜像大小

Docker学习(二) 安装与配置

Docker 的安装与配置

Docker 支持 CentOS 6 及后续版本。

CentOS 6 下安装Docker服务

#禁用SELINUX
vim /etc/selinux/config
SELINUX=disabled

#配置Fedora EPEL 源
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
yum -y install yum-priorities

Docker学习(一) Docker基础

使用 Docker 的目的

交付和部署更快速,一次创建,随处运行,创建容器的全过程可见,对所有人都是透明的;

虚拟化更高效,少了一层虚拟化当然更高效,接近于物理机的性能;我的理解是 Docker 对物理资源做了隔离,所以更轻量。

迁移和扩展更轻松,可以从私有仓库,共有仓库拉取image, 用过 maven 的同学应该会有类似的体验;

常用概念

image,镜像,用户可以通过相关命令轻松创建一个image,也可以通过命令轻松仓库里下载一个 image。image 是只读的、静止的。我们通过命令可以启动一个image,从而创建一个 Docker 容器。

Linux开机获取IP发送到指定邮箱

之所以有这样的需求,是因为平日主力是用自己的笔记本,公司给配的台式机(主机、显示器)扔工位下面,装了 Centos 玩儿,公司是DHCP 分配IP,每次重启开机都得到台式机登录一下,才能获取最新IP,有点小麻烦,重启后给自己邮箱发个邮件,这样省事儿,看看邮件里的IP,远程 SSH 登录就可以了~

我的台式机系统是 CENTOS,邮箱是163的,安装配置如下:

1、安装mailx

yum install mailx

在 github 放一个spring-boot-jpa DEMO

在 github 放一个spring-boot-jpa DEMO。

Spring Boot 的出现极大提高了生产效率, 尤其是做一些规模不太大的项目,它非常好用了,你不必再为繁杂的配置文件而烦恼,只需在 pom 里增加想依赖的组件就可以了,然后定义 Entity,声明 Dao,在 Service 层包装一下业务, controller 里去做 WEB 页面展示的准备工作就好了。

这个DEMO主要演示基于 spring boot 的项目开发,如何使用 jpa 对数据库 CRUD 操作,如何用 freemarker 展示页面。

项目地址:spring-boot-jpa DEMO

Java : Unsupported major.minor version 51.0解决方法

在使用 intellij idea 插件 QAPlug - FindBugs 时报错:

======Cannot Load Project======
Cannot load project:
com.intellij.ide.plugins.PluginMananger:$StartupAboortedException:
com.intellij.diagnostic.PluginException:
com/soldevelo/findbugs/FindBugsComponent:Unsupported major.minor version 51.0[Plugin:QAPlug - FindBugs][Plugin:QAPlug - FindBugs]

经过一番搜索,找到如下 JDK 版本对应关系 :
J2SE 8 = 52 (0x34 hex)
J2SE 7 = 51 (0x33 hex)
J2SE 6.0 = 50 (0x32 hex)
J2SE 5.0 = 49 (0x31 hex)
JDK 1.4 = 48 (0x30 hex)
JDK 1.3 = 47 (0x2F hex)
JDK 1.2 = 46 (0x2E hex)
JDK 1.1 = 45 (0x2D hex)

oh-my-zsh替代品prezto

每次启动terminal都很慢,实在无法忍受oh-my-zsh的龟速,发现一个替代品prezto,建议使用,oh-my-zsh 有的功能他都有了,最重要的是启动速度快!

废话不多说,prezto项目地址:https://github.com/sorin-ionescu/prezto

安装:

1、启动zsh

zsh


2、克隆项目到本地

git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"

MacOS网络诊断命令

ifconfig

显示网络接口(interface)信息。如接口名称,接口类型,接口的IP地址,硬件的MAC地址等。

#查看活动网卡信息,仅限活动网卡
ifconfig

#查看所有网卡信息,包括活动、非活动网卡
ifconfig -a

#查看某个网卡的信息
ifconfig eth0

#配置某个网卡的ip地址 格式:ifconfig  ethx IP/MASK
ifconfig eth0 192.168.1.20/16

路由

#显示路由表
netstat -nr

#追踪到达IP目的地的全程路由
traceroute nis.nsf.net

网络监听 - tcpdump

sudo tcpdump -i en0

监听en0接口的所有通信

sudo tcpdump -A -i en0 

用ASCII显示en0接口的通信内容
sudo tcpdump -i en0 'port 8080'

显示en0接口的8080端口的通信

sudo tcpdump -i eth1 src 192.168.1.200

显示eth1接口,来自192.168.1.200的通信

sudo tcpdump -i eth1 dst 192.168.1.101 and port 80

显示eth1接口80端口,目的地为192.168.1.101的通信

sudo tcpdump -w record.pcap -i lo0

将lo0接口的通信存入文件record.pcap

Mac OS管理多个JDK版本

作为一个Java程序员,同一台工作机上可能会安装多个Java版本,工作时可能是用1.6版本,而工作之余1.7或1.8版本用于学习一下,版本间的手动切换也是麻烦事儿。有次同事问在Mac下是如何管理多个版本的JDK, 当时没有答案,直到偶然见发现jEnv。jEnv的安装、使用都很简单。

什么是jEnv?
jEnv 是一个帮助你管理 $JAVA_HOME 环境变量的命令行工具。
安装
brew install jenv
 echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
 echo 'eval "$(jenv init -)"' >> ~/.zshrc

50道Java线程面试题

1) 什么是线程?

线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点。了解更多详细信息

2) 线程和进程有什么区别?

线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。更多详细信息

3) 如何在Java中实现线程?

在语言层面有两种方式。java.lang.Thread 类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行,由于线程类本身就是调用的Runnable接口所以你可以继承java.lang.Thread 类或者直接调用Runnable接口来重写run()方法实现线程。更多详细信息.