DevOps系列——Docker基础知识总结

docker教程html

1. Docker简介

1.1. Docker更名字

1.2. 文档

1.2.1. 必看文档

1.2.2. 社区技术类博客

1.2.3. 其余文档

1.3. 基础概念

1.3.1. 名词那些

2. Docker基础知识点

2.1. Docker命令说明

2.2. Docker信息查询

  • docker help:查看帮助信息
    • docker run —help:能够查看某条命令的具体用法
  • docker info:查看docker的安装信息
  • which docker:查看docker的执行路径

2.3. 镜像管理

  • docker pull <镜像名:tag>:从官网拉取镜像
  • docker search <镜像名>:搜索在线可用镜像名
  • docker images:查询全部的镜像,默认是最近建立的排在最上
  • docker rmi <镜像名:tag>:删除镜像
  • docker rmi $(docker images -q -f dangling=true):批量删除无用镜像前端

2.4. 容器管理

  • docker ps:查看全部运行中容器
  • docker ps -a:查看全部容器
  • docker ps -l: 查看最后启动的容器的信息
    • -l:最后的那个
  • docker top {容器ID|容器名称}:显示容器内运行的进程
  • docker run <镜像名1> <镜像名2> <镜像名3>:同时运行几个
  • docker run <镜像名> apt-get install -y ping:在容器中安装新程序
    • 必定要加-y,为何不太记得了
  • docker run -it ubuntu /bin/bash:运行一个可交互的容器
    • -i:-i表示容许咱们对容器内的 (STDIN) 进行交互
    • -t:表示在新容器内指定一个伪终端或终端
    • 咱们在容器内还指定了一个新的命令:/bin/bash 。这将在容器内启动 bash shell
  • docker run -e <名称>=<参数> node:设置容器环境
  • docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done:执行后台任务
  • docker run --name web training/webapp:为容器起名字
  • docker run —rm <镜像名> 用完就删除,不能与-d一块儿使用
  • docker exec -it sso-server-dev /bin/bash:docker启动后执行一些命令操做
  • docker run —restart always node:挂了重启
  • docker tag {容器ID|容器名称} <镜像名:tag>:给镜像加tag
  • docker stop {容器ID|容器名称}:中止容器
  • docker start {容器ID|容器名称}:启动容器
  • docker cp 7bb0e258aefe:/etc/debian_version .:从container中拷贝文件,当container已经关闭后,在里面的文件还能够拷贝出来。把容器中的/etc/debian_version拷贝到当前目录下。

2.5. 容器日志

  • docker inspect {容器ID|容器名称}:docker容器的配置和状态信息
  • docker inspect -f '{{ .NetworkSettings.IPAddress }}' {容器ID|容器名称}:过滤信息
  • docker logs {容器ID|容器名称}:查询某个容器的全部操做记录,标准输出流
  • docker logs -f {容器ID|容器名称}: 实时查看容易的操做记录

2.6. 网络端口映射

  • docker run -P <镜像名>
    • -P:它将会把容器内部的5000端口映射到本地Docker主机的高位端口上(这个端口的一般范围是 32768 至 61000)。
  • docker run -p <主机端口号>:<容器端口号> mongo:
    • 1:1 映射方式可以保证映射到本地主机端口的惟一性
  • docker run -p 127.0.0.1:5001:5002 mongo:指定绑定的网络地址
  • docker run -p 80:5000 training/webapp python app.py:指定主机和容器端口号
  • docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py:绑定udp端口
  • docker port mongo 5000:查询容器内的端口号映射到哪一个本地地址,127.0.0.1:49155
  • docker port -p 1111:1111 -p 2222:2222 -p 3333:3333 mongo: -p可使用屡次

2.7. 容器连接

  • docker run -d -P --name web --link <容器名称>:<别名> <镜像名>
    • 以后你的项目中须要使用ip地址的地方均可以用别名代替了
// 实例
sudo docker run -d --name mongo mongo
sudo docker run -d -P --name web --link mongo:db node

$ docker ps
CONTAINER ID  IMAGE                     COMMAND               CREATED             STATUS             PORTS                    NAMES
349169744e49  training/postgres:latest  su postgres -c '/usr  About a minute ago  Up About a minute  5432/tcp                 db
aed84ee21bde  training/webapp:latest    python app.py         16 hours ago        Up 2 minutes       0.0.0.0:49154->5000/tcp  db/web,web

咱们链接容器作什么?咱们发现链接的两个容器是父子关系。这里的父容器是db能够访问子容器web。为此docker在容器之间打开一个安全链接隧道不须要暴露任何端口在容器外部。
你会注意到当你启动db容器的时候咱们没有使用-P或者-p标识。咱们链接容器的时候咱们不须要经过网络给PostgreSQL数据库开放端口。

2.8. 容器网络

2.9. 管理容器数据

  • 整理的很好了:https://yq.aliyun.com/articles/138?spm=5176.100239.blogcont65145.33.iFVPLT
  • 数据卷python

    • 数据卷在容器建立的时候进行初始化。若是容器的镜像在特定的Mount点下有数据,那么已有的数据将被拷贝到指定目录
    • docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
    • docker run --name jupiter-install -v $(pwd):/home -w /home --rm node_tools npm install
      • v是把当前文件夹的代码彻底复制到容器中,-w的做用就是cd进咱们想要进入的目录
  • 数据卷容器nginx

    • 果你但愿在容器间共享卷,那么就可使用数据型容器
  • 数据备份还原和迁移

2.10. 建立镜像

2.10.1. 官方拉取

  • docker pull node:从官网下载node镜像

2.10.2. Dockfile使用

  • docker build -t node-pomelo ./:经过Dockerfile建立镜像
  • docker build -t node-pomelo -f Dockerfile.pomelo.env ./:经过配置文件指定Dockerfile文件

2.10.3. 镜像增量

  • docker commit <容器id> <新镜像名称>
  • docker commit -m="注释信息" -a="user信息" node:v2
  • docker history node:v2:查看镜像提交历史
    • 能够在一些容器里面动态的添加一些东西,而后打包成新的镜像,该镜像是原始镜像与容器的整合
    • 不管容器里作什么操做,写文件,删文件。该容器的基本镜像都不会有任何改变。这是由于Docker从父镜像创建增量镜像,只存储每一个容器的更改。所以,若是你有一个300MB的父镜像,若是你在容器中安装了50MB的额外应用或服务,你的容器只有50MB,父镜像仍是300MB。可是可使用Dockfile或commit命令来,把增量镜像和父镜像一块儿生成一个新的镜像。

2.10.4. 从零开始建立纯镜像

2.10.4.1. 简单介绍

2.10.4.1.1. 术语介绍git

  • 在 Docker 的术语里,一个只读层被称为镜像,一个镜像是永久不会变的。
  • 因为 Docker 使用一个统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的。可是全部的变动都发生顶层的可写层,而下层的原始的只读镜像文件并未变化。因为镜像不可写,因此镜像是无状态的。

2.10.4.1.2. 父镜像web

  • 每个镜像均可能依赖于由一个或多个下层的组成的另外一个镜像。咱们有时说,下层那个镜像是上层镜像的父镜像。

2.10.4.1.3. 基础镜像redis

  • 一个没有任何父镜像的镜像,谓之基础镜像。

2.10.4.1.4. 镜像IDmongodb

  • 全部镜像都是经过一个 64 位十六进制字符串 (内部是一个 256 bit 的值)来标识的。为简化使用,前 12 个字符能够组成一个短ID,能够在命令行中使用。短ID仍是有必定的碰撞机率,因此服务器老是返回长ID。

2.10.4.2. 思路

  • http://www.widuu.com/chinese_docker/articles/baseimages.html
  • http://www.cnblogs.com/alexkn/p/3879540.html
  • 大概的思路就是将整个系统打一个rar,而后用docker把这个压缩包导入,再建立一个image
  • 不过不推荐这么用,应该是一层一层的加东西,若是打包一个纯原始的image,那么不只很大,并且不符合分离的这种思想
  • 网上的一些单独的node,mongodb,nginx都是很是小的,咱们能够找官方推荐的那些比较纯净的,不要找那种集成的,而后把下载的东西记录一下

2.11. 容器迁器

  • docker save debian02 > /root/debian02.tar:debian02:镜像打成压缩包
  • docker load < debian02.tar:在另外的机器上导入镜像
  • docker images:查看存在的镜像
  • docker容器迁移简单方便,能够任意的拷贝部署,之后不再怕新部署环境了,一堆依赖装的想死有木有。
  • save和export的对比参考地址:

2.12. 发布到镜像网站

2.12.1. Docker Hub

docker hub的自动化构建docker

2.12.2. 阿里Docker Hub

  • 网址:https://dev.aliyun.com
  • ``发布到dockerhub
    • docker login
      • 这个命令将提示你输入用户名和密码。你的用户信息将被纪录在~/.docker/config.json文件中。
    • docker push yourname/newimage
    • 发布镜像到dockerhub:docker push shiguoqing/imagename

2.12.3. 镜像加速

2.12.4. 经常使用镜像介绍

  • 同一技术有不少镜像,最好选官方认证的镜像
  • 这些镜像的网址介绍了该镜像的构成和使用说明
  • mongo
  • node
  • redis

2.13. Docker开机自启动

2.13.1. docker的自启动

  • 首先须要了解你所使用的系统用的什么启动管理工具,在ubuntu 15.04及其以上版本使用的是systemd,在14.10及其如下使用的是upstart。在15.04及以上版本须要执行:
  • 启动服务:sudo service docker restart
  • 中止服务:sudo service docker stop
  • 自启动:systemctl enable docker
  • 参考文档:https://yq.aliyun.com/articles/132?spm=5176.100239.blogcont65145.27.SRH5q8

2.13.2. docker中容器的自启动

  • docker run -i -t node /etc/rc.local
    • 在容器中把全部须要开机自的启动命令放在/etc/rc.local中,就能够达到当docker启动的时候多容器自动启动

3. DockerFile文件

3.1. 为何要用DockerFile

  • 配置文件的优势:标准,可知,可复用
  • 你用了配置文件别人才敢用你的镜像,不然别人不放心你的镜像中是否安装了一些不安全的东西

3.2. 文档

4. Docker Compose实现自动化部署

5. Swarm实现集群

6. Docker的监控

7. Docker部署

7.1. 蓝绿部署

7.2. 灰度发布

8. 特别感谢

  •  

9. 免责说明

  • 本文档中的部份内容摘自网上的众多博客,仅做为本身知识的补充和整理,并分享给其余须要的coder,不会用于商用。
  • 由于不少博客的地址看完没有及时作保存,因此不少不会在这里标明出处,很是感谢各位大牛的分享,也但愿你们理解。
  • 若是原文做者感受不适,能够及时联系我shiguoqing999@163.com,我将及时删除争议部份内容

10. 追责声明

  • 若有大段引用超过全文50%的内容,请在文档结尾标明原文出处:龙马行空-石国庆-https://my.oschina.net/u/1416844/blog,不然将视为抄袭,予以法律追究,请各位尊重我的知识产权。

我的公众号

  • 你们能够关注个人公众号,我会举办线下代码操练活动

    

  • 本人提供全部前端知识的付费咨询服务,本咨询可提高企业核心竞争力
  • 价格请邮箱联系:shiguoqing999@163.com,有愿意提供场地的公司也能够联系我,会有优惠
相关文章
相关标签/搜索