docker学习教程

  镜像与容器类似于类与对象。Docker image用于创建 Docker Container;Container是独立运行的一个或一组应用;Docker Registry用来保存镜像。大部分情况下,docker服务端和客户端运行在一台机器上。
在这里插入图片描述

docker容器和虚拟机的区别

(1)根本的区别在于是否有 物理硬件资源虚拟化
  公司生产环境大多也是虚拟机,虚拟机将物理硬件资源虚拟化,按需分配和使用,虚拟机使用起来和真实操作系统一模一样。但由于虚拟机非常庞大,同时对硬件资源的消耗也大。宿主机操作系统之上运行着虚拟机,虚拟机上运行着客户操作系统,客户操作系统之上运行着用户的应用程序,一台服务器 80% 的资源开销都花费在了硬件虚拟化和客户机操作系统本身。openstack能够以10台/min的速度创建虚拟机。
  如果采用 docker 容器技术,宿主机操作系统之上运行着docker引擎,docker引擎中就能运行用户的应用程序。
  如果说虚拟机是操作系统级别的隔离,那么容器就是进程级别的隔离。 可以想象这种级别隔离的优点,无疑是快速的,节省资源的。
  CPU:docker和宿主机操作系统使用同一内核。
  文件系统:docker的文件系统使用物理服务器的文件系统,但做了隔离,看上去每个docker容器都有自己独立的文件系统;
  网络:docker建立了虚拟网桥设备,每个docker容器通过虚拟网桥设备连接网络。
  docker直接使用物理服务器的CPU、内存、硬盘,并不对硬件进行虚拟化,因此没有硬件虚拟化和客户机操作系统占用的资源消耗,每一台虚拟服务器的性能接近于物理服务器性能。
(2)表现出来的差异有
  1 节省系统硬件资源,因为不需要硬件虚拟化和客户操作系统。
  2 应用启动快速,部署环境快速,因为容器里面的应用,直接就是宿主机系统上的一个进程,而不是虚拟机内部的进程。
  3 容器体积小,因为容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包。

  比如:(1)通过lscpu查看系统资源,宿主机的lscpu命令的输出和docker container中的输出是相同的,但在guest OS中输出的资源就会变少。(2)guest OS reboot重启后,持久化的资源还在,但是docker中不能使用reboot,并且docker中写入的数据,不会被持久化(除非加入数据卷,但是对于系统配置等参数就不能自动备份了),只有docker image中存放着真正持久化的数据(其中包括了运行具体应用的相关依赖库)。
在这里插入图片描述
在这里插入图片描述
镜像image、容器container、仓库repository
docker image help
docker container help

【container使用】
(1)docker run container command 运行一个应用程序:
  docker run ubuntu:15.10 /bin/echo “Hello world”
  docker run -i -t ubuntu:15.10 /bin/bash
    -t:在新容器内指定一个伪终端或终端
    -i:允许你对容器内的标准输入 (STDIN) 进行交互
  docker run -d ubuntu:15.10 /bin/sh -c “while true; do echo hello world; sleep 1; done”
    -d:让容器在后台运行
  docker run -v $PWD/myapp:/usr/src/myapp -w /usr/src/myapp python:3.5 python helloworld.py
    -v $PWD/myapp:/usr/src/myapp:将主机中当前目录下的myapp挂载到容器的/usr/src/myapp
    -w /usr/src/myapp :指定容器的/usr/src/myapp目录为工作目录
    python helloworld.py :使用容器的python命令来执行工作目录中的helloworld.py文件
(2)运行Web应用:
  docker run -d -P training/webapp python app.py
    -P:将容器内部使用的网络端口随机映射到主机端口上
  docker run -d -p 5000:5000 training/webapp python app.py
    -p:将容器内部使用的网络端口绑定到主机指定的端口上,前为主机,后为容器
  docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
     -p:指定容器绑定的网络地址
  docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
    -p:默认都是绑定 tcp 端口,可绑定udp端口
  docker run -d -P - -name runoob training/webapp python app.py
    - -name:为容器指定名称

  端口转发:https://www.jianshu.com/p/b92d4b845ed6
    -p 8000:80 # 将容器的80端口映射到宿主机的8000端口
  CPU Binding:–cpuset-cpus=“48-71,144-167”
  地址映射:-v $PWD/result:/root/result # host内$PWD/result 映射到容器中的/root/result

【container查看】
(1)docker ps 查看正在运行的容器:
    -a:查看过去所有的容器
(2)docker top 查看指定容器内部运行的进程:
    docker top determined_swanson
(3)docker logs 查看指定容器内的标准输出:
    docker logs -f amazing_cori
(4) docker inspect 查看指定容器的底层信息:
    docker inspect determined_swanson
(5)docker port 查看指定容器的某个确定端口映射到宿主机的端口号:
    docker port determined_swanson
    docker port determined_swanson 5002
(6)docker stats –help 查看指令具体使用方法
(7)docker info 显示 docker 系统信息,包括镜像和容器数
(8)docker version 显示 docker 版本信息

【container操作】
(1)docker attach 连接到正在运行中的容器:
    docker attach --sig-proxy=false mynginx
(2)docker events 从服务器获取实时事件:
    docker events -f “image”=“mysql:5.6” --since=“1467302400”
(3)docker wait 阻塞运行直到容器停止,然后打印出它的退出代码:
    docker wait CONTAINER
(4)将一个容器从一个系统迁移到另一个系统:
   docker export 用于持久化容器(不是镜像),将容器导出到一个tar归档文件内:
    docker export -o mysql-date +%Y%m%d.tar a404c6c174a2
   docker import 将一个tar归档文件导入变成镜像:
    docker import test.tar - test/ubuntu:v1.0
(5)docker cp 拷贝容器与主机之间的数据:源 -> 目标
    docker cp /www/runoob 96f7f14e99ab:/www/ #目录到目录
    docker cp /www/runoob 96f7f14e99ab:/www #目录到容器后目录重命名
    docker cp 96f7f14e99ab:/www /tmp/
(6)docker diff 检查容器里文件结构的更改
(7)docker stop / start / restart / rm停止、启动、重启、删除指定容器:
    docker stop amazing_cori
    docker start amazing_cori
    docker restart amazing_cori
    docker rm amazing_cori # 删除不需要的容器,容器必须是停止状态
(8)docker pause / unpause 暂停、恢复容器:
    docker pause db01
    docker unpause db01
(9)docker kill 杀掉运行中的容器:
    docker kill -s KILL mynginx
(10)docker create / exec 创建、执行容器
    docker create --name myrunoob nginx:latest # 创建新容器,但不启动
    docker exec -it mynginx /bin/sh /root/runoob.sh
(11)docker update 更新容器的一些运行时配置,用于资源限制
    docker update --cpu-period 100000 test

【image创建】
(1)docker images 查看本地主机的镜像。
(2)docker pull 下载本地主机不存在,但仓库存在的镜像:
    docker pull ubuntu:13.10
(3)docker search 查找https://hub.docker.com/上的镜像:
    docker search httpd
    docker pull httpd
(4)docker commit 从已创建的容器中更新镜像,已得到新镜像
    docker run -t -i ubuntu:15.10 /bin/bash
    sudo apt-get update #等自定义操作
    docker commit -m=“has update” -a=“runoob” e218edb10161 runoob/ubuntu:v2
      -m:提交的描述信息
      -a: 指定镜像作者
      e218edb10161: 容器ID
      runoob/ubuntu:v2: 指定要创建的目标镜像名
(5)docker build 创建新的镜像:
    编写或修改Dockerfile文件
    docker build -t runoob/centos:6.7 .
      -t:指定要创建的目标镜像名
      . : Dockerfile 文件所在目录

【image管理】
(6)docker tag 为镜像添加一个新的标签:
    docker tag 860c279d2fec runoob/centos:dev
      860c279d2fec:镜像ID
      runoob/centos:镜像源名
      dev:新的标签名
(7)docker push 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
(8)docker login / logout 登陆、登出Docker镜像仓库,默认为官方仓库 Docker Hub:
    docker login -u 用户名 -p 密码
(9)docker rmi 删除本地镜像:
    docker rmi -f runoob/ubuntu:v4
      -f:强制删除
      --no-prune:不移除该镜像的过程镜像,默认移除
(10)docker history 查看指定镜像的创建历史
(11)docker save 用于持久化镜像(不是容器),将指定镜像保存成 tar 归档文件:
    docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
(12)docker load 将 tar 归档文件导入到本地镜像库:
    docker load -i my_ubuntu_v3.tar
(13)docker import 从归档文件中创建镜像:
    docker import my_ubuntu_v3.tar runoob/ubuntu:v4
(14)删除远程image
    curl --header “Accept: application/vnd.docker.distribution.manifest.v2+json” -I -X HEAD http://192.168.1.40:5000/v2/hello/manifests/latest
    curl -v -X DELETE http://192.168.1.40:5000/v2/hello/manifests/sha256:8072a54ebb3bc136150e2f2860f00a7bf45f13eeb917cca2430fcd0054c8e51b
(15)获取仓库类的镜像及某个镜像的标签列表
    curl -X GET http://10.239.85.153:5000/v2/_catalog
    {“repositories”:[“nginx”]}
    curl -X GET http://10.239.85.153:5000/v2/nginx/tags/list
    {“name”:“nginx”,“tags”:[“latest”]}

区别:save/load vs export/import
    export 命令用于持久化容器(不是镜像);Save 命令用于持久化镜像(不是容器);使用export比使用save保存的文件要小一些。
    load 和 import 都用于导入压缩包生成镜像,但 import 可以重新指定镜像的名字。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

reference:
教程文档:https://download.csdn.net/download/qccz123456/10546233
教程文档PDF:https://download.csdn.net/download/qccz123456/10546239
很全很好的文档:https://download.csdn.net/download/qccz123456/10546259
https://legacy.gitbook.com/book/yeasy/docker_practice/details
参考资料:http://www.runoob.com/docker/docker-tutorial.html
http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
https://legacy.gitbook.com/book/yeasy/docker_practice/details
https://hub.docker.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值