Docker安装与快速入门(Mac)

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 –百度百科

Docker 结构如下

其核心就是利用LXC来实现类似虚拟机的功能从而更高效利用硬件资源。

docker ispect docker_container_id

安装

  1. 安装Docker

    本文主要针对Mac安装,Windows和Linux类似。

    1. 检查系统版本

      要安装Docker Toolbox需要OSX版本>=10.8 “Mountain Lion”, 查看方法是点击左上角苹果图标->About this Mac

      如果系统不符合要求请先更新系统。

    2. 获取安装文件
    3. 双击打开安装镜像,安装向导会显示将要安装的程序列表

      按下’Continue‘之后将会提供自定义安装选项,你可以选择安装哪些程序:

      建议全部安装。

      点击Install并输入密码将会开始安装。

    4. 安装完成

      其中,Docker Quickstart Terminal相当于通过终端进入docker的快捷方式,省去了登录等操作,Kitematic是Docker的图形化界面,可以可视化地从Docker Hub下载镜像并直接使用。下面都以命令行为界面

基本操作

  1. 安装image

    sudo docker pull ubuntu:12.04

    等价于

    sudo docker pull registery.hub.docker.com/ubuntu:12.04

    即从默认仓库下载;但是,有时官方仓库下载较慢,可以使用下面的命令指定仓库:

    sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04

  2. docker run常用参数
  • ‘-i’:Keep STDIN open even if not attached
  • ‘-t’:Allocate a pseudo-tty分配一个控制台同容器交互

对于执行容器内的交互式操作,例如shell脚本。我们必须使用 -i -t来申请一个控制台同容器进行数据交互。但是当通过管道同容器进行交互时,就不能使用-t. 例如下面的命令

echo test | docker run -i busybox cat

  • ‘-d’ 使容器在后台模式(detached mode)运行,当前终端窗口不再被容器监听,可以使用docker attach来重新挂载
  • --rm:容器终止后会立即删除
  • ‘-a=[]’指定容器挂载哪些流(‘STDIN’,’STDOUT’,’STDERR’)不带这个参数时全部挂载
  • ‘–name’:给容器命名

    docker run –name wei -itd busybox

  • docker ps 列出运行中docker容器
    • ’-a’ 列出所有容器
    • ‘-q’列出所有进程的CONTAINER ID,
    • 作用:比如杀死所有进程

      docker kill $(docker ps -q)

  • Docker镜像
    1. 修改已有镜像
    2. 先使用下载的镜像启动容器

      sudo docker run -it training/sinatra /bin/bash

      记住容易id,在容器中添加json和gem两个应用

      [email protected]:/#: gem install json

      使用exit退出后提交更新后的副本

      sudo docker commit -m “Add json gem” -a “Docker Newbee” 0b2616b0e5a8 ouruser/sinatra:test

      ‘-m’参数说明信息,’-a’指定更新的用户信息,之后是用来创建镜像的容器id,最后指定目标镜像仓库名和tag信息,创建后回返回这个镜像的id

    3. 使用Dockerfile创建镜像
    4. 新建目录和Dockerfile

      mkdirsinatra cd sinatra

      $ touch Dockerfile

    5. Dockerfile中每条指定都创建镜像的一层,最多127层

      # This is a comment

      FROM ubuntu:14.04

      MAINTAINER Docker Newbee [email protected]# 作者

      RUN apt-get -qq update

      RUN apt-get -qqy install ruby ruby-dev

      RUN gem intall sinatra

      # put my local web site in myApp folder to /var/www

      ADD myApp /var/WWW

      # expose httpd port

      EXPOSE 80

      # the command to run

      CMD [“/usr/sbin/appachectl”, “-D”, “FOREGROUND”]

    6. build 生成镜像

      sudo docker build -t=”ouruser/sinatra:v2”

      ‘-t’标记添加tag,指定新的镜像的用户信息

    7. 用新的镜像启动容器

      sudo docker run -it ouruser/sinatra:v2 /bin/bash

      docker tag 5db5f8471261 ouruser/sinatra:devel

      更改镜像标签

    8. 上传镜像

      sudo docker push ouruser/sinatra

    9. 存出和载入
    10. 存出

      sudo docker save -o ubuntu_14.04.tar ubuntu:14.04

    11. 载入

      sudo docker load –input ubuntu_14.04.tar

      sudo docker load < ubuntu_14.04.tar

    12. 移除

      docker rmi training/sinatra

      注意:在删除镜像之前应该先docker rm掉依赖于该镜像的所有容器

  • Docker 容器
    1. 新建并启动:docker run

      sudo docker run -it ubuntu:14.04 /bin/bash

      启动一个bash终端,允许用户进行交互

    2. 启动已终止程序:docker start
    3. 守护态运行:’-d’

      获取容器的输出信息:

      sudo docker logs insane_babbage

      进入守护态容器:

      docker attach container_name

    4. 终止容器:

      docker stop container_name

      重新启动容器:

      docker start container_name

      重启容器:

      docker restart container_name

      会将运行态的容器终止再重新启动

    5. 导出和导入容器
      • 导出容器快照到本地:

        docker export container_id > container_name.tar

      • 从本地快照导入容器:

        docker import container_path example/imagerepo

    6. 删除容器

      docker rm container_id

      删除前容器需停止

  • Docker Hub
    1. 登录:

      docker login

      输入用户名和密码后,认证信息保存在本地用户目录的.dockercfg文件中

    2. 基本操作
      • 搜索镜像:

        docker search centos

      • 下载镜像

        docker pull centos

      • 上传镜像

        docker push image_name

      • 自动创建 略
    3. 私有仓库

  • Docker数据管理
    1. 两种方式:
    • 数据卷 (Data Volumes)
    • 数据卷容器(Data volumes container)
  • 数据卷
  • 特性
    • 数据卷可以在容器间共享
    • 对数据卷的修改会立刻生效
    • 对数据卷的更新不会影响镜像
    • 卷会一直存在,直到没有容器使用它
  • 创建数据卷

    在使用docker run命令的时使用 -v 参数创建并挂载数据卷到容器里。在一次run中可以多次使用以挂载多个数据卷

    docker run -d -P –name web -v /webapp training/webapp python app.py

    注意:可以在Dockerfile中使用VOLUME来添加一个或多个新的卷到该镜像创建的容器中。

  • 挂载一个主机目录到容器

    docker run -d -P –name web -v /src/webapp:/opt/webapp python app.py

    将主机的/src/webapp目录挂载到容器中得/opt/wepapp

    最后加上:ro挂载为只读

    Dockerfile不支持这个用法

  • 挂载一个主机文件到容器

  • 数据卷容器

    如果有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器,数据卷容器是用来专门提供数据卷供其他容器使用的容器。

  • 创建:

    docker run -d -v /dbdata –name dbdata training/postgres echo Data-only Container

    #挂载

    docker run -d –volumes-from dbdata –name db1 training/postgres

  • 删除

    如果删除了挂载的容器(dbdata, db1)数据卷不会被自动删除,需要在删除最后一个还挂在着它的容器使用docker rm -v

  • 备份

    docker run –volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar …

  • 恢复

    # 创建带有数据卷的容器dbdata2

    docker run -v /dbdata –name dbdata2 ubuntu /bin/bash

    # 创建另一个容器,挂载dbdata2容器,并使用untar解压备份文件到挂载的容器卷中

    docker run –volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

  • Docker 中网络管理
    1. 外部访问容器

      通过-P或-p参数来指定端口映射

      • -P:随机映射一个49000-49900的端口到内部容器开放的网络端口
      • -p:指定端口,支持格式有ip:hostPort:containerPort|ip::containerPort|hostPort:containerPort还可使用udp标记来指定udp端口-p 127.0.0.1:5000:5000/udp
      • 使用docker port来查看当前映射的端口配置

        docker port nostalgic_morse 5000

        127.0.0.1:49155

    2. 容器互联

      #创建数据库容器

      docker run -d –name db training /postgres

      # 互联

      docker run -d -P –name web –link db:db training/webapp python app.py

      这样容器db和web容器建立互联关系, --link格式:--link name:alias, name是要链接的容器的名称,alias是这个链接的别名,连接的容器可以在docker ps中查看到

      • 查看连接信息
      • 环境变量

        docker run –rm –name web2 –link db:db training /webapp env

        得到环境变量

        DB_NAME=/web2/db

        DB_PORT=tcp://172.17.0.5:5432

        DB_PORT_5000_TCP=tcp://172.17.0.5:5432

        前缀采用大写的连接别名

      • 父容器web2的/etc/hoists文件

        docker run -it –rm –link db:db training/webapp /bin/bash

        # cat /etc/hosts

        172.17.0.7 aed84ee21bde

        172.17.0.5 db

        这里有两个hosts,第一个是web容器,web容器用id作为它的主机名,第二个为db容器的ip和主机名, 可以使用ping db来测试web2和db容器的连接状况

  • 高级网络配置
    1. 网络结构

    2. 配置DNS

      Docker通过向新建容器挂载3个相关配置文件使宿主主机DNS更新后所有容器dns通过/etc/resolv.conf文件立刻得到更新

      • -h HOSTNAME | --hostname=HOSTNAME指定容器的主机名,会被写到容器的/etc/hosts/etc/hostname
      • --link=CONTAINER_NAME:ALIAS:添加一个其他容器的主机名到/etc/hosts中,让新容器的进程可以使用主机名ALIAS连接它
      • dns=IP_ADDRESS:让容器解析不在/etc/hosts中的主机名
      • dns-search=DOMAIN:设定容器的搜索域
    3. 容器访问外部网络

      容器访问外部网络需要本地转发支持,通过

      sysctl net.ipv4.ip_forward(Mac: sysctl net.inet.ip.forwarding)

      查看有没有开启转发,1为开启0为关闭,通过下述命令打开

      sysctl -w net.ipv4.ip_forward=1(Mac:sysctl net.inet.ip.forwarding=1)

  • 时间: 2024-07-30 16:47:11

    Docker安装与快速入门(Mac)的相关文章

    使用NSIS制作Windows安装程序快速入门

    使用NSIS制作Windows安装程序快速入门 这里使用的NSIS版本为3.04,HM NIS Edit版本为2.0.3. 制作安装程序的过程: 确定安装的功能和界面元素 编写 NSIS 脚本 使用 NSIS 提供的 makensis 或者 makensisw 程序,将步骤 2 编写的脚本编译成可执行的安装程序(点击HM NIS Edit编译按钮) 配置使用 NSIS 的环境 安装 NSIS 安装脚本编辑工具 HM NIS Edit 也可以使用VS Code安装NSIS脚本插件 使用HM NIS

    Docker三十分钟快速入门(下)

    一.背景 上篇文章我们进行了Docker的快速入门,基本命令的讲解,以及简单的实战,那么本篇我们就来实战一个真实的项目,看看怎么在产线上来通过容器技术来运行我们的项目,来达到学会容器间通信以及docker-compose学习以及docker网络模型学习的目的. 二.项目描述 创建Todo应用,功能很简单,实现创建Task关联Task分类,以及更新Task的完成状态的功能. 项目运行后的主界面如下: 三.启动项目 因为是使用git管理的maven java项目,所以需要首先在服务器上安装java.

    云计算学习路线图课件:学Docker容器怎样快速入门?

    "云计算"作为未来网络甚至未来计算机行业的发展趋势,得到了广泛重视.越来越多的人想通过学习云计算收获高薪,学习云计算的过程中会接触到Docker容器,这究竟是为什么?如何快速高效的学好Docker容器.进而学好云计算呢? docker就像一个集装箱一样,里面放着自己所需要的应用程序.docker内部使用的是Linux容器技术,并且提供一个完整的文件系统,独立的网络环境. docker 和vm虚拟机的主要区别在于,vm虚拟机启动之前需要制定好资源,例如CPU,内存,硬盘等,这会占用了一些

    几张图帮你理解 docker 基本原理及快速入门

    写的非常好的一篇文章,不知道为什么被删除了.  利用Google快照,做个存档. 快照地址:地址 作者地址:青牛 什么是docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护. Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docke

    ELK系列(1) - Elasticsearch + Logstash + Kibana + Log4j2快速入门与搭建用例

    前言 最近公司分了个ELK相关的任务给我,在一边学习一边工作之余,总结下这些天来的学习历程和踩坑记录. 首先介绍下使用ELK的项目背景:在项目的数据库里有个表用来存储消息队列的消费日志,这些日志用于开发者日后的维护.每当客户端生产一条消息并发送到消息队列后,就会插入一条对应的记录到数据库里.当这条消息被消费之后,又会更新数据库里对应的记录的几个column的值,比如status.updated_on这些常用的column. 由于客户每天生产消费的消息很多,导致数据库里的这个表里的数据很多,长年累

    Mac 下 docker安装

    http://www.th7.cn/system/mac/201405/56653.shtml Mac 下 docker安装 以及 处理错误Cannot connect to the Docker daemon. Is 'docker -d' running on this host? 和 dial unix /var/run/docker.sock: no such file or directory 云主机可以选择系统镜像快速创建主机,这比虚拟机更便捷了,我们本地也可以这么做了,因为有了Do

    Docker快速入门——Docker简介

    Docker快速入门--Docker简介 一.Docker简介 1.Docker简介 Docker是Docker Inc公司开源的一项基于Ubuntu LXC技术构建的应用容器引擎,源代码托管在GitHub上,完全基于go语言开发并遵守Apache2.0协议开源.Docker可以让开发者打包应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux版本机器上,也可以实现虚拟化.Docker容器完全使用沙箱机制,容器相互之间不会有任何接口,并且容器性能开销极低.Docker最初是在

    Node.js【4】简介、安装和配置、快速入门

    笔记来自<Node.js开发指南>BYVoid编著 第1章 Node.js简介 Node.js是一个让JavaScript运行在服务端的开发平台,它让JavaScript成为脚本语言世界的一等公民,在服务端堪与PHP.Python.Perl.Ruby平起平坐. Node.js可以作为服务器向用户提供服务,与PHP.Python.RubyonRails相比,它跳过了Apache.Nginx等HTTP服务器,直接面向前端开发. Node.js还可以调用C/C++的代码,这样可以充分利用已有的诸多函

    Docker快速入门(二)

    上篇文章<Docker快速入门(一)>介绍了docker的基本概念和image的相关操作,本篇将进一步介绍image,容器和Dockerfile. 1 image文件 (1)Docker 把应用程序及其依赖,打包在 image 文件里面.(2)只有通过这个image文件,才能生成 Docker 容器.image 文件可以看作是容器的模板.Docker 根据 image 文件生成容器的实例.(3)同一个 image 文件,可以生成多个同时运行的容器实例.(4)image 是二进制文件.实际开发中