2018年3月22日星期四

docker run之后无法ctrl-c结束

docker run xxx 之后,ctrl-c不起作用。

解决:docker run -t xxx,增加-t参数。

这样ctrl-c之后docker container不会stop

2018年3月21日星期三

配置docker镜像源

参考https://www.jianshu.com/p/84b6fe281b4d

直接在docker pull命令加上镜像地址,临时从该镜像下载相应的docker image
docker pull registry.docker-cn.com/myname/myrepo:mytag

在docker配置文件中(例如/etc/docker/daemon.json)设置默认的镜像地址
{
    "registry-mirrors": ["https://registry.docker-cn.com"]
}

生效配置并重启docker:
systemctl daemon-reload
service docker restart

可选的中国地区docker镜像地址有:
官方镜像:https://registry.docker-cn.com
七牛云镜像:https://reg-mirror.qiniu.com

rules_docker的使用

以python举例。

先写好py_image规则,写法和py_binary几乎一样,需要多加一个main参数指定启动main的文件,通过py_image规则无法指定repo和tag。

如果打包到本地需要自己指定repo和tag的话,只能使用container_bundle,container_bundle中的images参数的key为指定的repo和tag名称,value为对应的py_image或者其他image规则。

container_push用于将镜像推到docker仓库,有两种方式可以指定tag(https://github.com/bazelbuild/rules_docker#varying-image-names)。一种是使用$(tag)变量,然后bazel run --define tag=xxx来指定不同的tag;另一种是使用stamp=True,参考bazel的workspace_status使用:https://docs.bazel.build/versions/master/user-manual.html#workspace_status

2018年3月13日星期二

-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

参考https://segmentfault.com/q/1010000011807350?sort=created

在/etc/environment中增加:
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

一次IT事故的记录

linux系统下用户目录用户自己是必须拥有读、写、可执行权限的,在不知道的情况下用root修改了所有用户目录的权限,去掉了执行权限,导致所有用户都无法登录了。

2018年3月6日星期二

linux中nc命令

参考:10 个例子教你学会 ncat (nc) 命令

nc -l port_number,在指定端口监听入站连接。
nc -l -k port_number,-k 参数保证客户端断开之后服务器仍然保持监听而不退出。

2018年3月5日星期一

docker中--expose、-p参数

EXPOSE或--expose:声明运行时容器提供服务的端口,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

-p ip:hostPort:containerPort 参数可以指定宿主机的ip和端口到容器的端口映射。

docker容器内连接宿主机

参考:https://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-mach

docker run 增加 --net=host 参数,docker容器中使用127.0.0.1或者0.0.0.0地址就指向了宿主机。--net 参数值默认是 brige。

如果设置--net=host,那么-p port:port则不生效。

获取docker container ip地址

参考https://mozillazg.com/2016/01/docker-get-containers-ip-address.html

docker inspect --format '{{.NetworkSettings.IPAddress}}' CONTAINER_ID

2018年3月1日星期四

docker清理命令

参考https://www.fengzifz.com/2017/03/27/clean-docker/

删除所有停止运行的容器
docker rm -v $(docker ps -a -q -f status=exited) 或者 docker container prune

删除所有<none>的镜像
docker rmi $(docker images -q -f dangling=true)

删除所有没用的volume
docker volume rm $(docker volume ls -qf dangling=true) 或者 docker volume prune

docker system prune,清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像

docker save和docker export的区别

参考:https://jingsam.github.io/2017/08/26/docker-save-and-docker-export.html

1. docker save保存的是镜像(image),docker export保存的是容器(container);
2. docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
3. docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。