安装

 
docker 目前只支持64位系统
1.下载并安装,简直太方便了
$ curl -fsSL https://get.docker.com/ | sh
用例

 
.docker run hello-world
$ docker run hello-world
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
需要创建一个用户到docker 组中。
$ sudo usermod -aG docker $(whoami)
$ sudo reboot

注意:需要reboot之后才能使用

 
成功运行
zane@zane-V:~$ sudo docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
 
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
 
Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com
 
For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

 
Docker完成hello-world做的动作
  1. Docker客户端联系Docker用例
  2. Docker用例从Docker Hub 中将“hello-world”image 拉下来。
  3. Docker 用例从“hello-world” image 创建一个新的容器。而这个image运行着产生你现在读到的信息的 可执行性文件。
  4. Docker用例再讲这些输出传送到Docker客户端,然后Docker客户端在将这些信息传送到你的屏幕
 
2.docker ps -a 显示系统中所有的容器
zane@zane-V:~$  docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
767a0a0f0bae hello-world "/hello" minutes ago Exited () minutes ago silly_mcnulty
9e6a3cb1e18b hello-world "/hello" minutes ago Exited () minutes ago tender_kare zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  • docker ps 仅显示当前正在运行的容器

    • hello-world已经退出因此不会显示
 
Images and Containers

 
Docker 引擎提供的核心技术就是启用images和containers。
 
比如:docker run hello-world命令有以下三个部分:

  • docker

    • 告诉操作系统正在使用docker程序
  • hello-world
    • 告诉docker将hello-world这个image加载到容器
  • run
    • 一个创建运行docker容器的子命令
 
 
Image
  • 是一个文件系统和参数集合,用在运行时。
  • 没有状态也不可以改变
 
Contaniers
  • 一个正运行的image实例
 
 
当执行docker run hello-world,Docker引擎:
  • 检查你是否有hello-world 这个镜像
  • 从Docker Hub下载这个image
  • 加载这个image到container然后运行
 
取决于image的创建,可能是运行简单,单个命令然后退出,就像 hello-world image一样。
当然也可以是像数据库一样复杂的软件,等待存数据,等待下一位使用者等等。
 
Docker引擎可以通过Docker image创建和分享软件
 
寻找运行image

 
可以在Docker Hub中找到全世界所有人创建的image,当然是在Docker Hub中创建的拉。
 
假设找到一个感兴趣的image docker/whalesay,然后直接用就可以啦。
 
第一次运行image时,docker在本地寻找,如果本地没有则到Docker Hub中找。
zane@zane-V:~$  docker run docker/whalesay cowsay boo
Unable to find image 'docker/whalesay:latest' locally
latest: Pulling from docker/whalesay e190868d63f8: Pull complete
909cd34c6fd7: Pull complete
0b9bfabab7c1: Pull complete
a3ed95caeb02: Pull complete
00bf65475aba: Pull complete
c57b6bcc83e3: Pull complete
8978f6879e2f: Pull complete
8eed3712d2cf: Pull complete
Digest: sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b
Status: Downloaded newer image for docker/whalesay:latest
_____
< boo >
-----
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
 
创建image

 
通过创建"talks on its own"这样一个新的版本,来提升改进whalesay image。
 
步骤一:编写Dockerfile
Dockerfile 是在创建image时,描述 文件,环境,命令的。
 
1.创建新目录:用与创建image所需的所有文件
 
创建目录并进入目录
$ mkdir mydockerbuild
 
$ cd mydockerbuild
 
 
2.编写Dockerfile
 
编写并增加内容
$ vim Dockerfile
 
a.指定基础image
增加:
FROM docker/whalesay:latest
FROM这个关键字告诉Docker,你是以哪个image作为基础的。
 
b.安装fortunes程序到image中
RUN apt-get -y update && apt-get install -y fortunes
fortunes程序会打印一些聪明的话语来自whale。
 
c.增加CMD行
CMD /usr/games/fortune -a | cowsay
CMD 行告诉image在环境安装好后最后运行的命令。
这里是fortune -a 发送它的输出到 cowsay.
 
3.保存,并检查Dockerfile是这样子的
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
 
 
步骤二: 从Dockerfile创建image
使用docker build 创建image。
-t 参数给image一个标签,在之后更容易的运行它。
不要忘记 . 命令,它告诉docker build 在本目录寻找调用Dockerfile。
 
zane@zane-V:~/mydockerbuild$ docker build -t docker-whale .
步骤三:学习创建image的过程
docker build -t docker-whale . 命令从Dockerfile一步步读取说明,然后再本地机器中创建docker-whale这个image。
创建过程中输出信息的说明: 
1.Docker 检查并确认创建所需的所有东西都已经有了,会产生以下信息:
Sending build context to Docker daemon 2.048 kB
 
2.Docker 检查并且确定 whalesay image 是否在本地已经存在,如果不存在则从Docker hub 上拉下来。
   在Dockerfile中对应的行,以及产生的信息:
Step 1 : FROM docker/whalesay:latest
---> 6b362a9f73eb
在每一步的最后,ID会被打印出来。这是此步骤创建的ID图层。在Dockerfile的每一行在image中对应图层,你的ID是不一样的。
 
3.Docker启动零时容器运行whalesay image。在这个零时容器中,Docker运行Dockerfile文件中下一个命令,RUN。
   当RUN命令结束,一个新层被创建,零时容器被删除。
 
zane@zane-V:~/mydockerbuild$ docker build -t docker-whale .
Sending build context to Docker daemon 14.85 kB
Step : FROM docker/whalesay:latest
---> 6b362a9f73eb
Step : RUN apt-get -y update && apt-get install -y fortunes
---> Running in e9dbb3ff0ba2
Ign http://archive.ubuntu.com trusty InRelease
Get: http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]
.......
.......
.......
Setting up fortunes-min (:1.99.-) ...
Setting up fortunes (:1.99.-) ...
Processing triggers for libc-bin (2.19-0ubuntu6.) ...
---> 4c9a56721bad
Removing intermediate container e9dbb3ff0ba2
4.创建一个新中间容器,为CMD行增加另一个层。然后删除中间容器
Step  : CMD /usr/games/fortune -a | cowsay
---> Running in b1aa7efec08e
---> d09756981eeb
Removing intermediate container b1aa7efec08e
Successfully built d09756981eeb
现在已经创建了一个叫做docker-whale的image。
步骤四: 运行你的docker-whale
 
1.查看image是否已经建立
zane@zane-V:~/mydockerbuild$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-whale latest d09756981eeb minutes ago 275.1 MB
hello-world latest c54a2cc56cbb months ago 1.848 kB
docker/whalesay latest 6b362a9f73eb months ago MB
2.运行
zane@zane-V:~/mydockerbuild$ docker run docker-whale
____________________________________
/ This is National Non-Dairy Creamer \
\ Week. /
------------------------------------
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/ zane@zane-V:~/mydockerbuild$ docker run docker-whale
_______________________________________
/ People who take cold baths never have \
\ rheumatism, but they have cold baths. /
---------------------------------------
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
 
看上去,whale可以根据自己的想法说点什么了。
 
创建Docker Hub 账号和存储库

 
 
2.在页面中选择 Create Repository
 
步骤一:  选择本地image,并推送到刚刚建立的 Repository
a.查看本地image并选择id号
zane@zane-V:~/mydockerbuild$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-whale latest d09756981eeb minutes ago 275.1 MB
hello-world latest c54a2cc56cbb months ago 1.848 kB
docker/whalesay latest 6b362a9f73eb months ago MB
b.使用IMAGE ID 和 docker tag 命令,标记你自己的docker-whale image.

zane@zane-V:~/mydockerbuild$ docker tag d09756981eeb zane0306/docker-whale:latest
c.查看你刚刚标记过的image
zane@zane-V:~/mydockerbuild$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-whale latest d09756981eeb minutes ago 275.1 MB
zane0306/docker-whale latest d09756981eeb minutes ago 275.1 MB
hello-world latest c54a2cc56cbb months ago 1.848 kB
docker/whalesay latest 6b362a9f73eb months ago MB
d.命令行登录Dcoker Hub。
zane@zane-V:~/mydockerbuild$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: zane0306
Password:
Login Succeeded e.docker push 命令推送自己image到存储库
zane@zane-V:~/mydockerbuild$ docker push zane0306/docker-whale
The push refers to a repository [docker.io/zane0306/docker-whale]
9748ff4991ff: Pushed
5f70bf18a086: Mounted from docker/whalesay
d061ee1340ec: Mounted from docker/whalesay
d511ed9e12e1: Mounted from docker/whalesay
091abc5148e4: Mounted from docker/whalesay
b26122d57afa: Mounted from docker/whalesay
37ee47034d9b: Mounted from docker/whalesay
528c8710fd95: Mounted from docker/whalesay
1154ba695078: Mounted from docker/whalesay
latest: digest: sha256:62b528c43afd3a2771a167a21ce005a5ee49514109d2af870336f6880ec4eca7 size:
步骤二:  从远程库中拉下image
 
a.从本地删除原有的image
zane@zane-V:~/mydockerbuild$ docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-whale latest d09756981eeb minutes ago 275.1 MB
zane0306/docker-whale latest d09756981eeb minutes ago 275.1 MB
hello-world latest c54a2cc56cbb months ago 1.848 kB
docker/whalesay latest 6b362a9f73eb months ago MB zane@zane-V:~/mydockerbuild$ docker rmi -f d09756981eeb
Untagged: docker-whale:latest
Untagged: zane0306/docker-whale:latest
Untagged: zane0306/docker-whale@sha256:62b528c43afd3a2771a167a21ce005a5ee49514109d2af870336f6880ec4eca7
Deleted: sha256:d09756981eebc2a3fa7d200e57be74e89147465969aa92dcbd34b3f541a90219
Deleted: sha256:4c9a56721bad2895ec49a1683737d132f13f2ca99627c5ae3b4368f1b2583919 zane@zane-V:~/mydockerbuild$ docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest c54a2cc56cbb months ago 1.848 kB
docker/whalesay latest 6b362a9f73eb months ago MB
b.从远程拉取,并加载image
 
zane@zane-V:~/mydockerbuild$ docker run zane0306/docker-whale
Unable to find image 'zane0306/docker-whale:latest' locally
latest: Pulling from zane0306/docker-whale e190868d63f8: Already exists
909cd34c6fd7: Already exists
0b9bfabab7c1: Already exists
a3ed95caeb02: Already exists
00bf65475aba: Already exists
c57b6bcc83e3: Already exists
8978f6879e2f: Already exists
8eed3712d2cf: Already exists
c7b22951dde1: Already exists
Digest: sha256:62b528c43afd3a2771a167a21ce005a5ee49514109d2af870336f6880ec4eca7
Status: Downloaded newer image for zane0306/docker-whale:latest
_________________________________________
/ As usual, this being a 1.3.x release, I \
| haven't even compiled this kernel yet. |
| So if it works, you should be doubly |
| impressed. (Linus Torvalds, announcing |
| kernel 1.3. on the linux-kernel |
\ mailing list.) /
-----------------------------------------
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
zane@zane-V:~/mydockerbuild$ docker run zane0306/docker-whale
 _______________________________________
/ Klingon function calls do not have    \
| 'parameters' -- they have 'arguments' |
|                                       |
\ -- and they ALWAYS WIN THEM.          /
 ---------------------------------------
    \
     \
      \     
                    ##        .           
              ## ## ##       ==           
           ## ## ## ##      ===           
       /""""""""""""""""___/ ===       
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~   
       \______ o          __/           
        \    \        __/             
          \____\______/  
 
 
总结

    1. Docker Hub 与本地image的push,pull

      • 在Docker Hub上寻找自己感兴趣的image
    2. image 和 contaniers
      • image

        • image 是一个文件系统+参数集合。
        • 没有状态也不可以改变
      • contaniers
        • 一个正在运行的image实例
    3. 利用Dockerfile 创建自己的image
      • 编写Dockerfile

        • a.指定基础image

          • FROM docker/whalesay:latest
        • b.安装fortunes程序到image中
          • RUN apt-get -y update && apt-get install -y fortunes
        • c.增加CMD行
          • CMD /usr/games/fortune -a | cowsay
      • build image
        • zane@zane-V:~/mydockerbuild$ docker build -t docker-whale .
        • -t 参数给image一个标签,在之后更容易的运行它。

开始docker的更多相关文章

  1. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  2. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  3. Docker 第一篇--初识docker

    已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...

  4. 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)

    环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...

  5. docker for mac 学习记录

    docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...

  6. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  7. [原][Docker]特性与原理解析

    Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...

  8. 开发者的利器:Docker 理解与使用

    困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...

  9. 使用python自动生成docker nginx反向代理配置

    由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...

  10. 微服务与Docker介绍

    什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...

随机推荐

  1. ajax跨域请求的处理

    跨域的情形有很多种,网上有人给出了一份表格, 表格中标识为”不允许”通信的情况都属于跨域.实际网络服务中需要跨域的情况确实存在,于是开发者们提供了一种解决方案,就是使用jsonp格式进行数据交互,它不 ...

  2. leetcode 【 Search Insert Position 】python 实现

    题目: Given a sorted array and a target value, return the index if the target is found. If not, return ...

  3. 图说不为人知的IT传奇故事-1-计算机新生

    此系列文章为“图说不为人知的IT传奇故事”,各位大忙人可以在一分钟甚至几秒内了解把握整个内容,真可谓“大忙人的福利”呀!!希望各位IT界的朋友在钻研技术的同时,也能在文学.历史上有所把握.了解这些故事 ...

  4. Python学习-day11 RabbitMQ Redis

    这次文章包含两个内容: 1.RabbitMQ使用 2.Redis基础操作 代码部分为练习笔记和作业 概念部分转自Alex老师 RabbitMQ 安装 http://www.rabbitmq.com/i ...

  5. 二分法 Binary Search

    二分法还是比较常见和简单的,之前也遇到过一些二分的相关题目,虽然不难,但是每次都需要在边界问题上诸多考虑,今天听了九章算法的课程,学习到一种方法使得边界问题简单化. 二分法的几个注意点: 1. mid ...

  6. Leetcode 654.最大二叉树

    最大二叉树 给定一个不含重复元素的整数数组.一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素. 左子树是通过数组中最大值左边部分构造出的最大二叉树. 右子树是通过数组中最大值右边部 ...

  7. 安装配置apache sentry服务

    环境 系统环境:Centos6.7 Hadoop版本:CDH5.10 jdk版本:jdk7 注:本文并未集成kerberos组件 安装Sentry Server 选择安装hive的节点进行安装测试: ...

  8. 【bzoj1520】[POI2006]Szk-Schools 费用流

    题目描述 输入 输出 如果有可行解, 输出最小代价,否则输出NIE. 样例输入 5 1 1 2 3 1 1 5 1 3 2 5 5 4 1 5 10 3 3 3 1 样例输出 9 题解 费用流 设xi ...

  9. 【Begin】

    迫于无奈,我想提高写博速度.我要尽量压缩每道题的题解思路.最终我选择背叛大米兔,但是我支持它.因为它的每一篇博客耗时巨大,精贵的竞赛集训时间经不起它花:可同时精致的博客会带给来浏览的Oier们更多东西 ...

  10. Python之数据结构:字符串

    一.字符串类型 1.普通字符串 s1='abef\neiwo' print s1 print type(s1) 结果: abef eiwo <type 'str'> 2.原始字符串 s2= ...