docker 清理 /var/lib/docker/aufs 目录

内网服务器上一直用 Docker 来 build 镜像,来进行持续发布,使用一段时间之后,会生成很多文件,如果不及时清理,会占据大量的 inode,虽然磁盘没满,但是无法分配 inode,也会导致一些命令不可用。

查看 inode 数量命令

df -i

如何锁定目录

如果是 / 根目录占满了,怎么确认是哪个子目录呢?使用这条命令依次深入目录执行,查看计算结果,最终就会确认下是哪个目录。

for i in *; do echo $i; find $i | wc -l; done

最后发现是 /var/lib/docker/aufs/diff 这个目录,直接删除 aufs 目录下所有文件,删除 base 镜像,然后重启 docker 服务,清理结束。

cd /var/lib/docker/aufs
rm -r *
docker rmi [你的基础镜像 ID]
service docker restart

不用担心,重启之后会自动重建 diff 目录。
再次执行 df -i 的时候,inode 的百分比已经降下来了。

附加一些批量操作命令:

批量删除镜像

docker images | awk '{print $3}' | xargs docker rmi

批量删除容器

docker ps -a | awk '{print $1}' | xargs docker rm

参考链接:
https://segmentfault.com/q/1010000003106521

以 docker 方式安装 Jenkins 的笔记

  准备工作:docker 环境要装好,docker version 能显示出版本信息。
  Docker 安装: https://www.w3cschool.cn/docker/ubuntu-docker-install.html

  1. 首先将镜像 pull 到本地,pull 的过程很慢,有可能卡死,我重试了好几次,成功之后本地大小 809 MB。

    sudo docker pull jenkins
  2. 给 Jenkins 创建一个工作目录,目录名称随意,下面会将这个目录映射到容器。

    mkdir /var/jenkins_home
  3. 为工作目录设置归属用户Id

    sudo chown -R 1000:1000 /var/jenkins_home

    为什么是 1000,可以看看 Dockerfile 就明白了。 https://hub.docker.com/_/jenkins/

  4. 运行容器,8081 可以替换成你自己的端口,8080 不要改动,这是 Jenkins 的容器端口号。

    docker run --name myjenkins -p 8081:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -d jenkins
  5. 输入 ip 加 端口号就可以访问 Jenkins 了
    第一次访问需要解锁密码:
    cat /var/jenkins_home/secrets/initialAdminPassword

    卡白屏或一直显示请稍后问题:

    vim /var/jenkins_home/updates/default.json
    替换为百度的网址  "connectionCheckUrl":"http://www.baidu.com/"

    被墙了,所以一直卡住。

接下来安装好推荐插件,设置一个管理员账号,就可以用了。

附一张安装好的截图:

Linux 多条命令同时执行的一些姿势

命令之间用 ; 隔开

说明:各命令的执行结果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。

root@ubuntu:/# echo $HOME; echo $LANG
/root
en_US.UTF-8

命令之间用 && 隔开

说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。

root@ubuntu:~# cd Cloud && mkdir test
root@ubuntu:~/Cloud# ls
test
root@ubuntu:~/Cloud# cd Cloudaaa && mkdir test
-bash: cd: Cloudaaa: No such file or directory

命令之间用 || 隔开

说明:|| 是或的意思,只有前面的命令执行失败后才去执行下一条命令

/* && 不会输出 123 */
root@ubuntu:~/Cloud# cd Cloudaaa && echo '123'
-bash: cd: Cloudaaa: No such file or directory
/* 用 || 可以输出 123,因为 cd Cloudaaa 失败了 */
root@ubuntu:~/Cloud# cd Cloudaaa || echo '123'
-bash: cd: Cloudaaa: No such file or directory
123

命令之间用 | 隔开

说明:在命令行中,| 表示管道,管道可以将一个命令的输出导向另一个命令的输入,从而让两个(或者更多命令)像流水线一样连续工作,不断地处理文本流。

root@ubuntu:~/Cloud# env | grep LANG
LANG=en_US.UTF-8
LANGUAGE=en_US:

env 获取所有环境变量将结果传给下一个命令,所以用 grep 搜索 LANG 就会有结果显示。

Mysql开启慢查询记录耗时SQL语句

简述

  网站数据达到一定的数量级,就会有页面卡,出现50x等各种问题,mysql服务器CPU居高不下等症状。因为sql缓慢导致php缓慢,导致超时。这个时候应该先从mysql入手。就像看病一样,要先找病根,记录慢查询日志,就是观察期,观察到迹象我们就可以对症下药了。

配置参数说明

  主要靠三个参数来配置,我们用通俗的话来解释。

  1. 开关(不多说,关闭就不记录了)
    slow_query_log
  2. log存储位置(记录下来,我得知道你在哪吧,一般将它存放到mysql数据目录,也就是和你创建的数据库在同级目录)
    slow_query_log_file
  3. 超时时间 (我得让你知道多慢我忍不了)
    long_query_time

设置方法

方法一:全局变量设置

  1. 将 slow_query_log 全局变量设置为“ON”状态
    mysql> set global slow_query_log='ON'; 
  2. 设置慢查询日志存放的位置(默认在 mysql data 目录下)
    mysql> set global slow_query_log_file='slow.log';
  3. 记录超时1秒的sql语句
    mysql> set global long_query_time=1;

    注意:无需重启即可生效,但重启会失效。set global 改的参数是暂时的,想重启不变请配合修改mysql配置文件。

- 阅读全文 -

本地 Git 项目推送至码云或GitHub

使用场景:本地有版本库,云端还没有,正打算push到云端。

  1. 命令 git init 初始化git仓库
  2. 命令 git add . (保存到缓存区)
  3. 命令 git commit -m "注释" (推送到本地库中)
  4. 在码云上新建版本仓库;
  5. 命令 git remote add origin + 仓库地址 (码云上新建项目点进去克隆或复制的链接)
  6. 命令 git pull origin master (把分支上的文件拉下来)
    可能遇到的问题:git pull 失败 ,提示:fatal: refusing to merge unrelated histories
    git pull origin master --allow-unrelated-histories
  7. 命令 git push origin master (推送到远端仓库也就是码云上)
    git push --set-upstream origin master 设置默认的云端仓库,以后只用 git push 即可!