美文网首页
docker学习

docker学习

作者: guanguans | 来源:发表于2018-01-25 14:44 被阅读27次

    1. 前言

    “相见恨晚”用来形容我对docker的热爱再合适不过了,自从用了docker,开发环境也不安装了,系统想换就换了,部署更是一键部署,再也不用担心在这台机器上跑的好好的,其它机器有问题了...

    写这篇文章,也是为docker的发展尽自己一点绵薄之力。

    适合人群:您使用docker不久;正打算使用docker;还没有使用过docker。

    2. docker是什么

    docker是容器(引擎)。

    容器用来做什么? 装东西

    装什么?装你的应用,例如你的博客网站就是一个应用。

    3. 为什么要用docker

    3.1 对开发者来说

    1 启动速度快,传统虚拟机需要数分钟的启动时间,docker秒秒钟启动。
    2 一致的运行环境,用了docker,再也不会出现,为什么在我的电脑运行的好好的,在你的电脑上却有问题!!
    

    3.2 对运维人员来说

    1 持续交付和部署。开发者只需要push代码到版本管理(git)即可,接下来的自动测试,自动构建,自动部署都交给docker吧
    2 更轻松的扩展。什么?需要增加机器满足日益增长的pv需求,有docker-compose 一键部署就够了。
    

    3.3 与传统虚拟机的比较

    2321996144-5a66b4b5973f1_articlex.png

    4. 如何学习(使用)docker

    从现在开始,删除掉你本机上的所有开发环境,包括虚拟机, Vagrant

    官方文档 当然是不二之选
    当然,也照顾习惯看中文的朋友:
    Docker — 从入门到实践

    5. docker常用命令

    1 service docker start |stop |restart 启动 停止 重启

    2 docker run 镜像名称:标签 运行容器 docker -i 交互式操作 docker -t terminal操作
    --rm 退出就删除容器
    --name 指定容器名称

    举例:docker run -it --rm ubuntu:14.04 bash

    3 docker images 列出已经下载下来的镜像portcommit

    -f dangling= true 显示 虚悬镜像(dangling image)
    根据仓库名列出镜像 docker images  '仓库名'
    列出特定的某个镜像,也就是说指定仓库名和标签 docker images  '仓库名:标签名'
    -f在..之前  docker images -f since=mongo:3.2
    -f参数  docker images -f label=com.example.version=0.1
    只显示id docker images -q
    自定义表格格式 docker images --format "{{.ID}}: {{.Repository}}" 或者 docker images --format "table {{.ID}}\t{{.Repository}}\t{{.T-pag}}"
    
    

    4 docker pull 获取镜像

    docker pull ubuntu:14.04
    
    

    5 docker exec 进入容器

    docker exec -it webserver bash
    
    

    6 docker build [选项] 生成的文件名 上下文(context) 构建镜像

    例如 : docker build -t nginx:v3 .
    
    

    7 -p <宿主端口>:<容器端口>

    8 docker rmi [选项] <镜像1> [<镜像2> ...]

    注意 docker rm 命令是删除容器,不要混淆。
    
    

    9 docker rm 删除容器

    docker rm $(docker ps -a -q) 删除所有容器
    

    6. docker常见问题

    1 由于墙的问题导致docker安装失败或者各种问题
    Docker CE 镜像源站
    2 pull镜像太慢
    Docker 镜像加速器
    3 docker mysql设置初始密码(docker mysql启动马上就自动退出)

    docker run 加上环境变量参数 -e MYSQL_ROOT_PASSWORD=password1
    

    4 docker redis 设置初始密码

    Dockerfile CMD: 'redis-server --requirepass "password1"'
    

    5 docker cron没有执行

    Dockerfile CMD: service cron start
    

    6 docker cron 执行的时候时区不对

    RUN echo "Asia/Shanghai" > /etc/timezone
    或者
    同步主机时区
    docker run -v /etc/localtime:/etc/localtime <IMAGE:TAG>
    以上两种是网上搜索到的,我都没有成功,我目前的解决方案是将crontab -e配置中的时区都往前推8个小时。例如:你本来是要1,9点运行的,设置为1,17
    

    7 docker corn 获取不了环境变量

    原因:corn的bash环境变量和docker容器的环境变量不是同一个。
    解决:
    printenv |grep -v "==" | grep -v " " | sed 's/^\(.*\)$/export \1/g' > /project_env.sh \
    && chmod +x /project_env.sh \
    && service cron start \
    && bash
    
    两个grep -v 是为了反正docker-compose link的时候变量变量污染
    
    

    原文:https://segmentfault.com/a/1190000012952756

    相关文章

      网友评论

          本文标题:docker学习

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