【docker】docker初试与填坑

docker是最近很流行的部署方式,最近尝试之前的项目都转移到docker上运行,下面是碰到的一些坑和解决方案。
  • 网络问题 因为国内的原因,docker pull 镜像的时候经常碰到连不上或者速度极慢的情况。 这部分可以使用 国内流行的 ?daocloud 的方案解决?,使用dao pull代替docker pull ,如果是自行构建,可能需要使用代理或者直接在国外主机build,再打包传回来。
  • 时间同步 hub.docker.com上的镜像,包括自己构建的,基本上都是以utc时区作为默认时区,这样于host主机时间往往差8个小时。 最好的解决方案是 ?挂载volumn ? /etc/localtime 到 ?docker环境中,如果是docker命令,docker -v /etc/localtime:/etc/locaitime:ro ... 如果是docker-compose.yml ? 添加volumes
    volumns:
       - /etc/localtime:/etc/localtime:ro
  • entrypoint 与 run
    构建docker镜像时,最后一句往往要写上docker的"入口",使用entrypoint or run?
    这两个最基本的区别就是?entrypoint 包含了命令本身,是应用化的docker镜像,如果 指定 ? ?docker-a 的entrypoint位 ls
    则 docker run ?entrypoint ?-l ?的结果就是ls -l 的结果,而如果指定 ?run 为ls,则 ?docker run ?entrypoint ?ls -l ? 则为ls -l的结果
    所以单次执行不需要后台运行的项目,基本上建议指定为?entrypoint,否则建议run。
    可以在 docker/docker-compose run ?后面使用 --entrypoint覆盖dockerfile里的设置,不过如果想执行bash可能要使用 bash -c 代替。
  • 空间占用
    如果pull了大量的image,可能会导致docker镜像占用了大量的磁盘空间,所以很多人往往希望找小而美的images,但是这往往没有必要:
    docker会复用相同的层(layer) ,所以pull或者build镜像的时候,最好找基于同一个base的镜像,特别是构建的时候,能复用的尽量复用。
  • docker 卡死
    初期试用docker时,如果没有预估好资源使用量,可能会导致docker卡死,可能会导致系统其他服务响应都会变慢。
    建议在多核机器上(>4),对docker使用CPU限制,建议使用cpuset 限制n-1个核心为docker使用,剩下一个响应其他操作,或者使用cpu-shares限制使用量(不超过90%)
  • 端口与IP
    docker默认使用nat作为网络使用方式,使用expose和publish bind暴露内部服务端口。
    如果无需对外提供服务,尽量减少主机端口绑定,使用docker-compose时,对内服务无需是用ports指定端口,除非需要在另外一台机器上使用。
    如果需要绑定静态ip或直接使用外网ip,可以使用iptables,或者?ip netns等方法,这里我也没做太多实践,下次补充。
  • 未完待补充..

文章来源:http://blog.xujif.com/archives/dockers.html

时间: 2024-12-16 16:37:07

【docker】docker初试与填坑的相关文章

Docker基本概念填坑

Docker的基本概念填坑 Docker的基本概念填坑 1. Docker的基本组成 Docker Client客户端 Docker Daemon守护进程 Docker Image镜像 Docker Container容器 Docker Registry仓库 Docker是C/S架构的程序.Docker客户端向Docker的服务器端(也就是守护进程)发出请求,守护进程处理完所有工作并返回结果.Docker客户端对服务器的访问既可以在本地,也可以通过远程. Docker Image镜像是一个层叠的

我在部署docker的时候遇到的坑

以下总结一些我个人在搭建测试环境之中使用docker的坑 1.docker端口的坑 docker 容器在创建的时候,可以通过-p 指令来映射端口,使外部的网络能通过该端口访问容器的服务. 但是如果容器的端口已经设定,且容器已经运行起来的时候,是无法映射或者更改新的端口的. 所以这个坑要有所注意,不然又得从新commit镜像重新run,浪费时间. 2.docker容器IP地址的坑 docker的镜像一般都是原版centos等慢慢扩展的.网络这块是dhcp模式的,所以每次在重启容器的时候,docke

docker centos7 httpd的小坑

我的寄主机是centos6.7  3.10的内核  今天下了个镜像做docker docker容器竟然是centos7  我也是醉了 这里说下在apache简单配置里面的坑  , 由于是验证没有较多的配置 只是想实现echo hello的效果 apache是yum安装的   完事没有发现/etc/init.d/httpd脚本 也是 7都改版了  可是 systemctl start httpd.service也是不好用的 我发现安装了个命令 httpd  在/usr/sbin 下 执行httpd

第一次使用docker for windows 遇到的坑

原文:第一次使用docker for windows 遇到的坑 1. 目前win10安装docker, 不需要安装其他工具,可直接到官网下载 2. 此版本的docker可同时运行Windows container和Linux container.在powershell里运行 & 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchDaemon 可直接进行切换.切换结果可通过docker version查看. 3. 在docker setti

Docker 从入门到掉坑

简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有着很多的优点,关于它的优点,可以总结为以下几项: 安装docker 从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE. Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用. 首先我们需要移除旧的docker版本:

Kubernetes Fluentd+Elasticsearch+Kibana日志搭建的填坑指南

在初步完成Kubernetes集群架构的建立后,通过搭建一些监控组件,我们已经能够实现 图形化的监控每个node,pod的状态信息和资源情况 通过scale进行replicateSet的扩展和伸缩 通过kubectl logs 或dashboard去查看每个Pod的运行日志 但是,在分布式架构中节点的规模往往是很庞大的,一个典型的生产环境可能有几十上百个minion节点,在这种情况下就需要建立一套集中的日志监控和管理系统,在本人前期的思考中,也想通过volumn外挂到存储的方式实现weblogi

minikube windows hyperx填坑记

minikube windows hyperx填坑记 安装了一天半,还是没行,先放弃 开始 minikube start --vm-driver=hyperv --hyperv-virtual-switch=k8svswitch --cpus=4 --memory=4096 --docker-env HTTP_PROXY=http://192.168.31.77:1080 --docker-env HTTPS_PROXY=http://192.168.31.77:1080 --docker-en

一名Android开发者的微信小程序填坑之路(2)

前言 上一篇是九月二十七日写的,而这一篇我动笔的时间是十月十日(特殊的日子),中间相隔十三天--当然是因为国庆节.说老实话,这十三天里面我都没有碰和小程序有关的东西--毕竟学习小程序的开发也只是起于兴趣,而平时的工作并不会涉及与其相关的东西--但是在这十三天里,我能明显的感受到小程序热正在逐渐的消退,或者说大家正在逐渐以一种较为平和的姿态接受它的存在,其实这是一件好事.期待公测的到来. 接下来我就直接进入正题了,另外,文末我想和大家分享一下我的国庆节. PS:这篇文章是接着上一篇文章 一名And

【结果很简单,过程很艰辛】记阿里云Ons消息队列服务填坑过程

Maybe 这个问题很简单,因为解决方法是非常简单,但填坑过程会把人逼疯,在阿里云ONS工作人员.同事和朋友的协助下,经过一天的调试和瞎捣鼓,终于解决了这个坑,把问题记下来,也许更多人在碰到类似问题的时候,会开放思路.当然不得不说,Ons的.NET接口还很不完善,甚至没有独立在Windos 2008/2012服务器测试过,希望官方加把力. 1.阿里云ONS介绍 ONS(Open Notification Service)即开放消息服务,是基于阿里开源消息中间件MetaQ(RocketMQ)打造的