安装

 
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. 驱动模块 .ko

    模块: 模块机制,作用搞高LINUX操作系统的扩充性. 1. 模块概念: 1.动态可加载内核模块LKM 2.内核空间运行 3.是不是一执行文件,是一个没有经过链接,不能独立运行的一个目标文件(.c-& ...

  2. leetcode 【 Subsets II 】python 实现

    题目: Given a collection of integers that might contain duplicates, S, return all possible subsets. No ...

  3. [oldboy-django][2深入django]django目录说明 + 路由系统

    django project目录说明 project - app01 -- admin.py #django自带后台管理 -- apps.py #app01配置文件 -- models.py #编写类 ...

  4. java基础-流

    大致列一下这个周末需要学习的内容 1 容器 2 线程 3 流 (本节内容) 一. 流 按方向-------------输入流输出流 按处理数据单位-----字节流字符流 按功能------------ ...

  5. ActionContext源码

    /* * Copyright 2002-2006,2009 The Apache Software Foundation. * * Licensed under the Apache License, ...

  6. 【转】DontDestroyOnLoad(Unity3D开发之五)

    原文  http://blog.csdn.net/cocos2der/article/details/38320773 主题 Unity3D Unity中我们从A场景切换到B场景的时候,A场景所有对象 ...

  7. iOS设备唯一标识(可以用版)

    由于UDID和OpenUDID被禁用,系统自带的的识别唯一标识有两种 广告标示符(IDFA-identifierForIdentifier) 这是iOS 6中另外一个新的方法,advertisingI ...

  8. 深入理解 Flutter 的编译原理与优化

    阿里妹导读:对于开发者而言,Flutter工程和我们的Android/iOS工程有何差别?Flutter的渲染和事件传递机制如何工作?构建缓慢或出错又如何去定位,修改和生效呢?凡此种种,都需要对Flu ...

  9. [canvas入坑1]canvas 画布拖拽效果

    查看效果请到 http://philippica.github.io/  点击drag 和上一篇画图很像,所以有些部分做了省略 当鼠标按下时保存当前画布上的内容到ppImgData中,并且记录下初始点 ...

  10. tomcat 启动慢解决(/dev/random)

    JRE默认使用 /dev/random作为随机数来源,当熵池大小不够的时候,random会很慢,造成随机数生成调用阻塞. 解决方案: 改用 /dev/urandom (1) tomcat的启动选项增加 ...