docker 简版教程

Docker

  • docker简介
  • docker架构
  • docker安装
  • docker使用
    • docker容器使用
    • docker镜像使用
    • docker容器连接
  • docker实例
    • docker安装Nginx
    • docker安装PHP
    • docker安装MYSQL
    • docker安装Tomcat
    • docker安装Python
    • docker安装redis
    • docker安装MongoDB
    • docker安装Apache
  • docker使用参考
    • docker命令大全
    • docker资源汇总

一 、 Docker简介

  1. Docker 是一个开源的应用容器引擎 , 基于GO语言并遵从Apache2.0 协议开源 。 Docker可以让开发者打包他们的应用的以及依赖包到一个轻量级 、 可移植性高的容器中 。 然后发布到任何流行的Linux 机器上 , 可以实现虚拟化 。
  2. 容器完全使用沙箱机制 , 相互之间没有任何接口(类似Iphone的app) , 更重要的是容器性能开销极低 。
  3. 学习前提:
    1. 学习Docketr 之前 , 你需要一定的Linux 基础
  4. Docker 的应用场景
    1. Web应用自动化打包和发布
    2. 自动化测试 、 持续集成 、 发布
    3. 在服务型环境中部署和调整数据库或其他的后台应用
    4. 从头编译后扩展现有的OpenShit 或Cloud Foundry 平台搭建自己的PaaS 环境 。
  5. Docker 的优点:
    1. 简化程序:
      1. Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
    2. 避免选择恐惧症:
      1. 如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
    3. 节省开支:
      1. 一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

二 、 Docker 架构

  1. Docker使用 客户端、服务端(C/S)的架构模式 , 使用远程API来管理和创建Docket 容器
  2. Docker 容器通过Docker镜像来创建
  3. 容器和镜像的关系类似于java中对象和类的关系 。
  4. Docker中的概念:
名词描述
Docker 镜像Docker镜像是用于创建Docker容器的模板
Docker 容器容器是独立运行的一个或一组应用 。
Docker 客户端Docker客户端通过命令行或者其他工具使用Docker API 与 Docker的守护进程进行通信
Docker主机一个物理或者虚拟的机器用于执行Docker守护进程和容器
Docker仓库Docker仓库用来保存镜像 , 可以理解为代码控制中的代码仓库
Docker MachineDocker Machine 是一个简化的Docker安装的命令行工具 , 通过一个简单的命令行即可在相应的平台上安装Docker

三 、 Docker 安装

  1. WIN10专业版以下 Docker安装:
  2. Ubuntu Docker 安装
  3. CentOS Docker 安装:
    1. yum install -y docker-io
    2. sudo service docker start
    3. 测试docker服务
  4. MacOs Docker 安装:

四 、 添加镜像

  1. 鉴于国内网络的原因 , 在拉去镜像的时候会非常缓慢 , 我们可以访问国内的镜像的仓库来拉去镜像 。 , 这里我们使用网易的镜像仓库:http://hub-mirror.c.163.com
  2. 在 /etc/docker/daemon.json文件中添加:

        {
          "registry-mirrors": ["http://hub-mirror.c.163.com"]
        }
    

五 、 docker 使用

  1. Docker hello world
    1. docker 允许你在容器内运行应用程序 , 使用docker run 命令来在容器内运行一个应用程序 并输出hello world。
    2. 参数解析:
      1. docker : docker 的二进制执行文件
      2. run : 与docker 组合 来运行容器内的镜像
      3. /bin/echo : 在镜像内运行的命令
    3. 以上命令的完整解释: 在docker中运行 Ubuntu:15.10 镜像 , 并在镜像内执行 /bin/echo “hello world”
  2. 运行交互式容器:
    1. 我们可以通过-i -t 实现docker对话能力:



2. 可以使用 exit 或Ctrl + D退出会话模式
3. 启动镜像(后台模式)
1. docker run -d ubuntu:15.10 /bin/sh -c “while true ; do echo hello world ; sleep 1 ; done;”
2. 使用ps 查看docker后台进程
3. 在后台启动镜像成功之后 , 返回一串字母+ 数字 , 这是启动的镜像的进程ID
1. 解析:
1. CONTAINER ID : 容器ID
2. NAMES : 自动分配的容器名称
3. 查看进程日志
4. 停止容器
1. docker stop 镜像进程ID| 容器自动为镜像进程分配的Name
2. docker 客户端
1. 输入docker 来查看docker客户端的所有命令:
2. 使用 docker common –help 查看某一命令具体的使用方法
3. 运行一个web 应用:
1. docker pull training/webapp # 拉取training/webapp镜像
2. docker run -d -P training/webapp python app.py
1. 说明: 运行一个 Python Flask 镜像来运行一个web应用。
2. 参数说明:
1. -d : 镜像在后台运行
2. -P : 将容器内部使用的端口映射到我们使用的主机上
3. 查看正在运行的web镜像进程:
1. 可以看到docker 中的Python Flask 框架使用了5000端口 , 并且将5000 端口欧映射到了主句32768端口上 , 可以使用浏览器访问该端口
2. 我们可以使用-p 参数来指定端口
3. 查看网络端口的快捷方式:
1. 除了在docker ps 中可以看到进程对应的端口之外 , 还可以 通过 docker port ID|名字 查看镜像占用的端口以及主机端口的映射情况
2. 查看日志:
1. docker logs -f ID|名字
1. 参数说明:
1. -f : 让docker像 tail -f一样来输出容器内部的标准输出
2. 查看 镜像内部进程
1. docker top ID|名字
2. 检查运行的镜像信息
1. docker inspect ID|名字 他会返回一个json 格式的数据 , 记录着该镜像的配置和状态信息
2. 容器内镜像的停止 、 重启 、 移除
1. docker stop ID|名字 //停止
2. docker start ID|名字 // 重启
3. docker rm ID|名字 // 移除容器内的应用

六 、 docker 镜像的使用

  1. 当运行容器中的应用时 , 需要提前获取该应用的镜像 , 如果本地没有这个镜像, 则会自动的从docker 中央仓库拉取镜像
  2. 列出本地镜像列表
    1. 选项说明
      1. REPOSITORY:表示镜像的仓库源
      2. TAG:镜像的标签
      3. IMAGE ID:镜像ID
      4. CREATED:镜像创建时间
      5. SIZE:镜像大小
    2. 注意: 同一个镜像可以有多个不同的TAG , 代表镜像的不同版本 , 如果有不同版本的镜像 需要在使用时使用 REPOSITORY:TAG 来指定运行的镜像
  3. 当运行一个本地不存在的镜像时, docker 会自动拉取资源, 后运行镜像 。 也可以通过docker pull 提前获取一个镜像
  4. 查找镜像
    1. 我们可以从docker-hub网站搜索镜像 , docker-hub 网址为 https://hub.docker.com/
    2. 我们也可以通过docker search 命令来搜索镜像 。
  5. 创建镜像:
    1. 当我们从docker镜像仓库中下载的镜像不能满足我们的需求时, 我们可以通过以下两种方式 对镜像进行更改 。
      1. 从已经创建的镜像中更新镜像 , 并且提交这个镜像 。
      2. 使用Dokcerfile 指令来创建一个新的镜像
  6. 更新镜像

    1. 在运行的应用内执行 apt-get update
    2. 此时我们对应用进行了更新操作 , 我们可以通过docker commit 提交对应用的更新

      runoob@runoob:~$ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
      sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
      
    3. 参数说明:
      1. -m : 提交的信息
      2. -a : 指定镜像作者
      3. e218edb10161 : 镜像ID
      4. runoob/ubuntu:v2: 指定要创建的镜像名
  7. 构建镜像:

    1. 可以使用docker bulid , 从零开始构建一个新的镜像 , 为此我们需要创建一个Dockerfile 文件 , 其中包含一组指令来告诉Docker 如何构建我们的镜像 。

      runoob@runoob:~$ cat Dockerfile 
      FROM    centos:6.7
      MAINTAINER      Fisher "fisher@sudops.com"
      
      RUN     /bin/echo 'root:123456' |chpasswd
      RUN     useradd runoob
      RUN     /bin/echo 'runoob:123456' |chpasswd
      RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
      EXPOSE  22
      EXPOSE  80
      CMD     /usr/sbin/sshd -D
      每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
      
      第一条FROM,指定使用哪个镜像源
      
      RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
      
      然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
      runoob@runoob:~$ docker build -t runoob/centos:6.7 .
      Sending build context to Docker daemon 17.92 kB
      Step 1 : FROM centos:6.7
       ---> d95b5ca17cc3
      Step 2 : MAINTAINER Fisher "fisher@sudops.com"
       ---> Using cache
       ---> 0c92299c6f03
      Step 3 : RUN /bin/echo 'root:123456' |chpasswd
       ---> Using cache
       ---> 0397ce2fbd0a
      Step 4 : RUN useradd runoob
      参数说明:
      
          -t :指定要创建的目标镜像名
      
          . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
      
      使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec
      ......
      

七、 Docker 实例

  1. docker安装mysql
    1. docker pull mysql
    2. 参数说明:
      1. -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
      2. -v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
      3. -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
      4. -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
      5. -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

八 、 docker命令大全

  1. 容器生命周期管理
    1. run
    2. start /stop /restart
    3. kill
    4. rm
    5. pause /unpause
    6. create
    7. exec
  2. 容器操作
    1. ps
    2. inspect
    3. top
    4. attach
    5. events
    6. logs
    7. wait
    8. wait
    9. export
    10. port
  3. 容器rootfs命令
    1. commit
    2. cp
    3. diff
  4. 镜像仓库
    1. login
    2. pull
    3. search
    4. push
  5. 本地镜像管理
    1. images
    2. rmi
    3. tag
    4. build
    5. history
    6. save
    7. import
  6. info|version
    1. info
    2. version

九、 docker 资源

    docker官网:http://www.docker.com

    Docker windows入门:https://docs.docker.com/windows/

    Docker Linux 入门:https://docs.docker.com/linux/

    Docker mac 入门:https://docs.docker.com/mac/

    Docker 用户指引:https://docs.docker.com/engine/userguide/

    Docker 官方博客:http://blog.docker.com/

    Docker Hub: https://hub.docker.com/

    Docker开源: https://www.docker.com/open-source
    Docker中文资源

    Docker中文网站:https://www.docker-cn.com/

    Docker安装手册:https://docs.docker-cn.com/engine/installation/
    Docker 国内镜像

    网易加速器:http://hub-mirror.c.163.com

    官方中国加速器:https://registry.docker-cn.com

    ustc的镜像:https://docker.mirrors.ustc.edu.cn

    daocloud:https://www.daocloud.io/mirror#accelerator-doc(注册后使用)

遇到的问题及解决

  1. 无法开启docker服务:

    1. 解决:

      1. 进入/etc/docker目录 , 没有则创建
      2. 创建文件daemon.json 并写入内容

        {"storage-driver": "devicemapper",
        "registry-mirrors": ["http://hub-mirror.c.163.com"]}
        
  • 8
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值