美文网首页
CloudDockerKubernetes

CloudDockerKubernetes

作者: 燕京博士 | 来源:发表于2017-09-04 13:13 被阅读13次
    image.png image.png

    https://segmentfault.com/a/1190000002609286
    删除所有未运行 Docker 容器
    docker rm $(docker ps -a -q)
    删除所有 Docker 镜像
    删除所有未打 tag 的镜像

    docker rmi $(docker images -q | awk '/^<none>/ { print $3 }')
    删除所有镜像

    docker rmi $(docker images -q)
    根据格式删除所有镜像

    docker rm $(docker ps -qf status=exited)
    移除所有的容器和镜像(大扫除)
    用一行命令大扫除:

    docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a)
    注:shell 中的 $() 和 `` 类似,会先执行这里面的内容,上面的脚本会出现如下 docker kill "pids" ; docker kill 在 docker 中用于停止容器,docker rm 删除容器, docker rmi 删除镜像
    当没有运行的容器或者是根本没有容器的时候,这只会提示一个警告信息。当你想尝试的时候,这就是个非常好的单行命令。如果你仅仅想删除所有的容器,你可以运行如下命令:

    docker kill $(docker ps -q) ; docker rm $(docker ps -a -q)
    退出时删除容器
    如果你仅仅想在一个容器中快速的运行一个命令,然后退出,并且不用担心容器状态,把 --rm 参数加入 run 命令后面,这将结束很多你保存了的容器,并且清理它们。

    示例:docker run --rm -i -t busybox /bin/bash
    不在 Shell 上运行命令
    如果你使用需要Shell 的扩展项的 docker run 命令处理某些事情,比如 docker run --rm busybox ls '/var/log/', 这个命令将失败。这个失败的原因我花了工夫才弄明白。这个陷阱在这里:你原来没有 Shell , 而 ``` 是 Shell 的扩展项,因此你需要一个能使用的 Shell 。正确方法为:

    docker run --rm busybox sh -c 'ls /var/log/*'
    Boot2Docker 和 LapTops 处理 DNS 问题的方法
    由于这个原因, Boot2Docker 会占用 DNS 服务器很长一段时间。当你在尝试创建镜像的时候,可能会得到离谱的错误。如果你在 Ubuntu 或者 CentOS 上看到下面的提示:

    cannot lookup archive.ubuntu.com
    聪明的做法是停止,然后启动 boot2docker 。

    boot2docker-cli down && boot2docker-cli up
    这样问题就解决了
    Volumes 解决 docker logs
    和 docker copy
    问题
    如果你想在一个容器中监控另一个容器中的日志文件和文件的使用,你可以看看 volumes ,例如,检查 tomcat 是否启动:
    tomcat_id=$(docker run -d -v /var/log/tomcat6 wouterd/tomcat6)# Give Tomcat some time to wake up...sleep 5while ! docker run --rm --volumes-from ${tomcat_id} busybox /bin/sh -c "grep -i -q 'INFO: Server startup in' /var/log/tomcat6/catalina*.log" ; do echo -n "." sleep 5done

    你还可以在一个 Dockerfile
    中指定 volumes ,这个在我前面的博客文章中结合 Docker 连载了。\

    Docker Inspect 结合 Go Templates 的好处
    命令 docker inspect
    允许使用 Go Templates 来格式化inspect 命令的输出信息如果你擅长这个,你能获取很多 docker 容器命令行的脚本输出信息。这是一个获取正在运行的容器 IP 的示例:
    container_ip=$(docker inspect --format '{{.NetworkSettings.IPAddress}}' ${container_id})

    这里有一个笨的技巧,用于得到匹配所有暴露(exposed)的端口 host:port ,并且把他们输入一个 java properties 文件:
    sut_ip=${BOOT_2_DOCKER_HOST_IP}template='{{ range $key, $value := .NetworkSettings.Ports }}{{ $key }}='"${BOOT_2_DOCKER_HOST_IP}:"'{{ (index $value 0).HostPort }} {{ end }}'tomcat_host_port=$(docker inspect --format="${template}" ${container_id})for line in ${tomcat_host_port} ; do echo "${line}" >> ${work_dir}/docker_container_hosts.propertiesdone

    Docker基础命令
    查看docker版本信息
    $ docker --version

    查看docker安装信息
    $ docker info

    查看本机Docker中存在哪些镜像
    $ docker images

    检索images
    $ docker search images

    下行images
    $ docker pull images

    显示一个镜像的历史操作
    $ docker history images

    列出一个容器里面被改变的文件或者目录
    $ docker diff container

    列出当前所有正在运行的容器
    $ docker ps

    列出所有的容器
    $ docker ps -a

    列出最近一次启动的容器
    $ docker ps -f

    查看容器的相关信息
    $ docker inspect $CONTAINER_ID

    显示容器IP地址和端口号,如果输出是空的说明没有配置IP地址(不同的Docker容器可以通过此IP地址互相访问)
    $ docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID

    通过容器生成新的镜像
    $ docker commit -m "Added ssh from centos" -a "xiaoming" 4a4de4cf223d1 xiaoming/centos:v1

    参数:
    -m参数用来来指定提交的说明信息;
    -a可以指定用户信息的;
    4a4de4cf223d1代表的时容器的id;
    birdben/ubuntu:v1指定目标镜像的用户名、仓库名和 tag 信息。

    构建一个容器
    $ docker build -t="centos:v1" .

    参数:
    -t为构建的镜像制定一个标签,便于记忆/索引等
    . 指定Dockerfile文件在当前目录下,也可以替换为一个具体的 Dockerfile 的路径。

    在docker中运行centos镜像
    $ docker run <相关参数> <镜像 ID> <初始命令>

    守护模式启动
    $ docker run -it centos:v1

    指定端口号启动
    $ docker run -p 80:80 centos:v1

    指定配置启动
    $ sudo docker run -d -p 10.211.55.4:9999:22 birdben/ubuntu:v1 '/usr/sbin/sshd' -D

    参数:
    -d:表示以“守护模式”执行,日志不会出现在输出终端上。
    -i:表示以“交互模式”运行容器,-i 则让容器的标准输入保持打开
    -t:表示容器启动后会进入其命令行,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
    -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>,-v 标记来创建一个数据卷并挂载到容器里。在一次 run 中多次使用可以挂载多个数据卷。
    -p:表示宿主机与容器的端口映射,此时将容器内部的 22 端口映射为宿主机的 9999 端口,这样就向外界暴露了 9999 端口,可通过 Docker 网桥来访问容器内部的 22 端口了。
    注意:这里使用的是宿主机的 IP 地址:10.211.55.4,与对外暴露的端口号 9999,它映射容器内部的端口号 22。ssh外部需要访问:ssh root@10.211.55.4 -p 9999
    不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”

    start 启动容器
    $ docker start 117843ade696117843ade696

    stop 停止正在运行的容器
    $ docker stop 117843ade696117843ade696

    restart 重启容器
    $ docker restart 117843ade696117843ade696

    rm 删除容器
    $ docker rm 117843ade696117843ade696

    rmi 删除镜像
    $ docker rmi ed9c93747fe1Deleted

    登录Docker Hub中心
    $ docker login

    发布上传image(push)
    $ docker push xiaoming/centos:v1

    本文只是一个简单的使用docker来提供一些如数据库,redis等公共服务的搭建过程记录.docker-compose.yml的详细配置可以参考官方文档或这篇文章.由于工作环境是在windows下,docker对windows的支持很不好,如果要在windows下安装docker请确保,系统达到官方要求,这里记录的是使用虚拟机的情况下搭建.
    安装docker
    官方文档中详细说明了不同系统的安装方法,这里以Centos为例.
    确保linux系统满足docker要求( 64-bit version of CentOS 7.3,貌似内核也需要3.x以上的可以通过uname -a
    查看)

    升级/安装 yum-utils $ sudo yum install -y yum-util

    设置仓库$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    将软件包信息缓存 sudo yum makecache fast

    安装docker sudo yum -y install docker-ce

    启动docker sudo systemctl start docker

    测试是否安装成功 sudo docker run hello-world

    开机启动dockersudo chkconfig docker on

    安装docker-compose
    这里使用python-pip的方式来安装
    安装python-pipyum -y install epel-release yum -y install python-pip

    安装docker-composepip install docker-compose

    测试是否安装成功docker-compose version

    编写简单docker-compose.yml例子
    version: "2.0"services: redis: image: redis:3.2 restart: always ports: - "6379:6379" mongo: image: mongo:3.4.1 restart: always ports: - "27017:27017"

    安装启动镜像
    在docker-compose.yml所在根目录下执行docker-compose up

    统计某人的代码提交量,包括增加,删除:
    git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -
    仓库提交者排名前 5(如果看全部,去掉 head 管道即可):
    git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
    仓库提交者(邮箱)排名前 5:这个统计可能不会太准,因为很多人有不同的邮箱,但会使用相同的名字
    git log --pretty=format:%ae | gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }' | sort -u -n -r | head -n 5
    贡献者统计:
    git log --pretty='%aN' | sort -u | wc -l
    提交数统计:
    git log --oneline | wc -l
    添加或修改的代码行数:
    git log --stat|perl -ne 'END { print $c } $c += $1 if /(\d+) insertions/;

    相关文章

      网友评论

          本文标题:CloudDockerKubernetes

          本文链接:https://www.haomeiwen.com/subject/mycejxtx.html