docker 查看最近日志
2018-12-24 tech docker 1 mins 128 字
背景
使用容器时常常需要看日志,但是有些日志刷了很多,这时候单纯用 docker logs -f
会刷很多日志,而没办法停止。解决的问题其实使用 tail 标志就可以了:
docker logs -f --tail 20 <container-id>
使用容器时常常需要看日志,但是有些日志刷了很多,这时候单纯用 docker logs -f
会刷很多日志,而没办法停止。解决的问题其实使用 tail 标志就可以了:
docker logs -f --tail 20 <container-id>
在开发机上运行一段时间的容器后,你能看到有很多的无用容器、磁盘、镜像、网络等,其实大部分都是无用的。这篇文章记录下如何删除无用的资源,以节省磁盘空间。
下文转自:https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430
// 参考 https://github.com/chadoe/docker-cleanup-volumes
$ docker volume rm $(docker volume ls -qf dangling=true)
$ docker volume ls -qf dangling=true | xargs -r docker volume rm
$ docker network ls
$ docker network ls | grep "bridge"
$ docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')
// 参考 http://stackoverflow.com/questions/32723111/how-to-remove-old-and-unused-docker-images
$ docker images
$ docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
$ docker images | grep "none"
$ docker rmi $(docker images | grep "none" | awk '/ / { print $3 }')
// 参考 http://stackoverflow.com/questions/32723111/how-to-remove-old-and-unused-docker-images
$ docker ps
$ docker ps -a
$ docker rm $(docker ps -qa --no-trunc --filter "status=exited")
docker system prune -a
个人很喜欢 zsh,社区也有人做了 maximum-awesome 这个专门针对 zsh 的一键安装项目。一开始是只有 Mac OS X 的,后来有人做成了 Debian 系的,无奈没有人做 CentOS 系的,大概是因为 CentOS 都是企业使用,而在企业环境里我们很少安装无用的软件吧。
其实制作起来相对简单的,社区安装使用的是ruby的rake安装,只需要把步骤中的 debian 的语法改成 CentOS 的语法即可。我也做好了发布到 github上: https://github.com/kelvinblood/maximum-awesome-centos
用法也可以参考我另一个Linux安装脚本项目的引用:https://github.com/kelvinblood/KeluLinuxKit
下载后运行
./keluLinuxKit.sh install install_zsh_centos
即可。我在像目录不仅安装了 maximum-awesome,还安装了 tmux-powerline,而且自定义了显示栏内容。
安装的具体命令行脚本如下,想自定义的可以按需修改。
install_zsh_centos() {
yum -y install zsh tmux git
# zsh重启生效引入zsh增强插件,支持git,rails等补全,可选多种外观皮肤
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
echo ''
echo ''
echo ''
echo "-- awesome-tmux -----------------------------------------------------"
# pass the_silver_searcher install
yum install -y install build-essential automake pkg-config libpcre3-dev zlib1g-dev liblzma-dev rake
# awesome-tmux
cd $DOWNLOAD
if [ ! -e maximum-awesome-centos ]; then
git clone https://github.com/kelvinblood/maximum-awesome-centos.git
fi
cd maximum-awesome-centos
rake
# rake install:solarized['dark']
cp $DOWNLOAD/maximum-awesome-centos/tmux.conf $DOWNLOAD/maximum-awesome-centos/tmux.conf_backup
cp $RESOURCE/maximum-awesome-linux/tmux.conf $DOWNLOAD/maximum-awesome-centos/tmux.conf
# cp $RESOURCE/maximum-awesome-centos/tmux.conf $DOWNLOAD/maximum-awesome
# cp $RESOURCE/maximum-awesome-centos/.tmux* $HOME
# cp $RESOURCE/maximum-awesome-centos/.vimrc* $HOME
# cp $RESOURCE/maximum-awesome-centos/vimrc.bundles $DOWNLOAD/maximum-awesome-centos/vimrc.bundles
# git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
# rm -r $HOME/.vim/bundle/vim-snipmate
# tmux-powerline
cd $HOME
touch .tmux.conf.local
cd $DOWNLOAD
if [ ! -e tmux-powerline ]; then
git clone https://github.com/erikw/tmux-powerline.git
fi
cp $DOWNLOAD/tmux-powerline/themes/default.sh $DOWNLOAD/tmux-powerline/themes/default.sh_backup
cp $RESOURCE/tmux-powerline/default.sh $DOWNLOAD/tmux-powerline/themes/default.sh
cat >> $DOWNLOAD/maximum-awesome-linux/tmux.conf<< EOF
# add by Kelu
set-option -g status-left "#($DOWNLOAD/tmux-powerline/powerline.sh left)"
set-option -g status-right "#($DOWNLOAD/tmux-powerline/powerline.sh right)"
source-file ~/.tmux.conf.local
EOF
cat $RESOURCE/Home/.zshrc >> $HOME/.zshrc
}
最近在使用一个云产品,网上看到了相关的api镜像,直接运行容器即可简单操作。如何使用 php 操作呢?于是查了相关的东西,最后完成到自己的项目中。这篇文章记录一下使用过程。官方提供了 golang、python和http的 API调用,社区也做好了各种语言的SDK,有需要的都可以用起来。
Language | Library |
---|---|
C | libdocker |
C# | Docker.DotNet |
C++ | lasote/docker_client |
Dart | bwu_docker |
Erlang | erldocker |
Gradle | gradle-docker-plugin |
Groovy | docker-client |
Haskell | docker-hs |
HTML (Web Components) | docker-elements |
Java | docker-client |
Java | docker-java |
Java | docker-java-api |
NodeJS | dockerode |
NodeJS | harbor-master |
Perl | Eixo::Docker |
PHP | Docker-PHP |
Ruby | docker-api |
Rust | docker-rust |
Rust | shiplift |
Scala | tugboat |
Scala | reactive-docker |
Swift | docker-client-swift |
通过composer添加依赖:
composer require docker-php/docker-php
可以查看社区文档获得更详细的使用方法:https://docker-php.readthedocs.io/en/latest/
按常规的方式,如果不做docker配置,则会将其unix:///var/run/docker.sock
用作默认配置连接docker。
由于本地的程序是运行在容器里的,所以当然没有这个文件,只能通过tcp方式连接,在服务器上可以通过把宿主机的docker.sock文件映射到容器里进行读取.
值得注意的是,代码中我使用了10.0.75.1:2376
这样的地址。IP地址是Windows中源主机的ip,Windows中记得打开docker的访问地址:
你应该也注意到了我使用的不是2375端口,因为这个端口只能是127.0.0.1地址才能访问,所以我做了一个转发,你在Windows下开发的时候也要这么做:
netsh interface portproxy add v4tov4 listenport=2376 connectaddress=127.0.0.1 connectport=2375
实现代码如下:
public static function getClient(){
if (app()->environment('local')) {
$client = DockerClientFactory::create([
'remote_socket' => 'tcp://10.0.75.1:2376',
'ssl' => false,
]);
} else {
$client = null;
}
return $client;
}
public static function dockerTest(){
$cfg = self::getClient();
if($cfg){
$docker = Docker::create($cfg);
}else{
$docker = Docker::create();
}
$containers = $docker->containerList(["all"=>true]);
foreach ($containers as $container) {
echo $container->getNames()[0]. "\n";
if ($container->getState() == 'exited') {
$docker->containerDelete($container->getId());
}
}
}
设置好所需的镜像和环境变量,再运行即可。敏感的变量我使用了xxx进行替代。
public static function setConfig($endPoint, $apiKey, $secretKey, $type)
{
$containerConfig = new ContainersCreatePostBody();
$containerConfig->setImage('xxxx');
$containerConfig->setEnv([
"END_POINT=" . $endPoint,
"API_KEY=" . $apiKey,
"SECRET_KEY=" . $secretKey
]);
$containerConfig->setAttachStdin(true);
$containerConfig->setAttachStdout(true);
$containerConfig->setAttachStderr(true);
switch ($type) {
case "xxxx":
break;
default:
}
return $containerConfig;
}
public static function basic($func,$cmd = "xxx"){
$cfg = self::getClient();
$docker = $cfg ? Docker::create($cfg) : Docker::create();
foreach (Account::$configs as $key => $config) {
foreach (Account::$apis as $api) {
$containerCreateResult = $docker->containerCreate(self::setConfig($api, $config[0], $config[1], $cmd));
echo $containerCreateResult->getId()."\n";
$id = $containerCreateResult->getId();
$attachStream = $docker->containerAttach($id, [
'stream' => true,
'stdin' => true,
'stdout' => true,
'stderr' => true
]);
$docker->containerStart($id);
$output = '';
$attachStream->onStdout(function ($stdout) use (&$output) {
$output .= $stdout;
});
$attachStream->wait();
$result = json_decode($output);
if (!$result) dd("idcf no return value");
self::$func($result);
$docker->containerDelete($id);
}
}
}
本文是根据 Stefan Kojouharov 发表在 Medium 上的文章整理而成的一份人工智能、神经网络、机器学习、深度学习和大数据方面的速查表。为了便于查找与使用,本文对每个主题进行了分类,希望可以对各位的工作有所帮助。
注意!这可能是相关领域最全的的一份速查表,文末还列出了各种算法的复杂度统计。
图 1:神经网络速查表
在开发环境常常批量安装 helm chart 应用,如果普通删除,会留下很多应用的信息,而且无法安装同名应用。
使用下面简单的命令,快速删除状态为 DELETED 的chart应用。
helm list -a | grep DELETED | awk '{print $1}' | xargs helm del --purge