入门

首先强烈建议玩一遍官方的入门教程,Interactive commandline tutorial,下面是答案:

查看版本:docker version

搜索Image:docker search tutorial

下载Image:docker pull learn/tutorial

创建容器并输出"hello world":docker run learn/tutorial echo "hello world"

在容器里安装ping:docker run learn/tutorial apt-get install -y ping

保存刚才的状态:首先用docker ps -l找到安装ping的容器ID,

ID                  IMAGE               COMMAND                CREATED             STATUS              PORTS 6982a9948422        ubuntu:12.04apt-get installping1 minute ago        Exit 0

然后保存为 'learn/ping':docker commit 698 learn/ping (注:id不用全部写出,一般写前面3到4个字符就可以了),此命令会返回一个新的id

运行:docker run learn/ping ping google.com

查看运行的容器:docker ps或者“docker inspect 容器id前3或4个字符”

上传image到Docker Hub Registry:

首先运行“docker images” will show you which images are currently on your host.

然后docker push learn/ping即可。

自己的库:https://hub.docker.com/

https://registry.hub.docker.com/ 网站上有一系列创建好的操作系统和应用程序映像。

[编辑]使用

我们来下载标准的 ubuntu 14.04 镜像:

docker pull ubuntu:14.04

如果报错:dial unix /var/run/docker.sock: no such file or directory

解决:service docker start

使用 docker images 命令列出可用来创建 Docker 容器的本地镜像。

注意结果中的镜像 ID ,我们后面可以通过这个 ID 来创建容器。

下一步是创建容器并做相关操作。创建一个 Docker 容器的方法是使用 docker run 命令

docker run -i-t 6b4e8a7373fe /bin/bash 退出时运行exit即可

注:将6b4e8a7373fe替换成你自己的镜像 ID 报错:Cannot start container 32d57c8b3dbaec42ef7e787b1726b3af01996ae7dc177ec4a8aa5eca00250437: write /cgroup/devices/docker/32d57c8b3dbaec42ef7e787b1726b3af01996ae7dc177ec4a8aa5eca00250437/cgroup.procs: invalid argument

原因: Your kernel is too old. 换成centos7,也可以升级内核,docker要求内核至少到3.8.0,参见使用yum快速升级CentOS 6.x内核到3.10.28

现在你已经通过镜像 6b4e8a7373fe创建了一个 Docker 容器,并在其中运行了 bash 。

通过 docker ps -a 命令查看本地 Docker 环境中存在多少容器(列出所有的container)。

docker run 6b4e8a7373fe /bin/echo hello docker

可以再次执行一遍:docker start container_id

不过这次看不到”hello world”了,只能看到ID,用logs命令才能看得到,

docker logs container_id

可以看到两个”hello world”,因为这个container运行了两次。

daemon方式,让软件作为长时间服务运行,这就是SAAS!

CONTAINER_ID=$(docker run -d 6b4e8a7373fe /bin/sh-c"while true; do echo hello world; sleep 1; done")

在container外面查看它的输出:

docker logs $CONTAINER_ID

或者连接上容器实时查看

docker attach $CONTAINER_ID

终止容器:docker stop $CONTAINER_ID

用sudo docker ps(列出当前所有正在运行的container)要看一下,发现该容器已经没有了。

还有一种方式可以让程序在daemon模式下运行,就是在Dockerfile里设置USER为daemon,见Dockerfile tutorial Level2

[编辑]删除容器

每一行命令都会产生一个新的容器(无论是在sudo docker run -i -t ubuntu /bin/bash 模式下,还是Dockerfile里的RUN命令),玩了一会儿后,sudo docker ps -a 会看到很多容器,很是干扰视线,可以用一行命令删除所有容器:

docker rm`docker ps-a -q`

[编辑]创建image

有两种用方式,

  1. 写一个Dockerfile,然后用docker build创建一个image
  2. 在容器里交互式地(例如docker run -i -t ubuntu /bin/bash)进行一系列操作,然后docker commit固化成一个image。

image相当于编程语言里的类,container相当于实例,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image。

使用dockerfile,创建一个image:

docker build -t yourusername/ubuntu:latest - < test.dockerfile

[编辑]下载image

https://index.docker.io/ 是官方的image仓库,也可以用Docker-Registry创建自己的仓库,这就好比git,https://index.docker.io/ 相当于Github,也可以自己DIY搭建一个git服务器,把自己的代码托管到私有服务器上。

docker pull ubuntu 是从 https://index.docker.io/_/ubuntu/ 下载名为 ubuntu 的repo,里面包含了几个tag,默认使用latest这个tag。这个repo是docker官方的。

[编辑]上传并共享image

首先,要去 https://index.docker.io/ 注册一个账号

build一个image,build命令格式如下:

docker build -t username/repo:tag - < Dockerfile

如果没有tag,则默认为 latest。也可以用commit方式生成images

登陆:docker login

输入自己的用户名和密码。

push 到 Docker index:

docker push username/repo 如:docker push elesos/test(注:生成images时要加elesos,即"docker commit 9576cb8dfbcd  elesos/test",不然push时会报"No such id"错误)

这条命令会把一个repo下面的所有tag都push到https://index.docker.io/

注意repo的名字要小于31个字符,不然会push失败。

[编辑]删除images

停止所有的container,这样才能够删除其中的images:

docker stop $(docker ps-a -q)

删除images,通过image的id(IMAGE ID)来指定删除谁

docker rmi <image id>

要删除全部image的话:docker rmi $(docker images -q)

[编辑]Dockerfile

怎么自己定制一个 image,例如把常用的软件装好后打包 ? 这时候该 Dockfile 登场了。Dockerfile 实质上是一个脚本文件,用于自动化创建image。

我们在后面的系列中介绍Dockfile。

Docker QQ交流群【群名称是Docker从入门到精通】:293948287

我的docker库:https://registry.hub.docker.com/repos/elesos/ ,里面有很多新技术的测试实例。

[编辑]艺搜参考

官方Hello World

Docker 快速入门

利用Docker构建开发环境 | UC技术博客

创建你的首个 Docker 容器

Docker:利用Linux容器实现可移植的应用部署

https://github.com/docker/docker/issues/6670

http://www.linuxidc.com/Linux/2014-09/106322.htm

Docker入门系列3:使用的更多相关文章

  1. Docker入门系列(一):目标和安排

    Docker入门系列(一) 这个系列的教程来源于docker的官方文档,此文档的目的在于一步一步学习docker的使用方法. 这一系列的教程有如下几篇文档: docker安装启动 构建第一个docke ...

  2. Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上

    这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...

  3. Docker入门系列1:简介

    可以实现快速部署. 比如一台 16 核 32G 内存的虚拟机上,需要跑 500+ 个用户的应用(每个应用的功能可以认为是一个网站 + 一系列的 RESTful API),有两个事情很重要: 资源隔离: ...

  4. Docker入门系列之五:15个 Docker 命令

    在这篇文章中,我们将学习15个Dockers CLI命令.如果你还不了解Docker,请查看这个系列的其他部分进行学习,Docker概念,生态系统,Dockerfile,Docker镜像. Docke ...

  5. Docker入门系列之二:使用dockerfile制作包含指定web应用的镜像

    实现题目描述的这个需求有很多种办法,作为入门,让我们从最简单的办法开始. 首先使用命令docker ps确保当前没有正在运行的Docker实例. 运行命令docker run -it nginx: 然 ...

  6. Docker入门系列之一:在一个Docker容器里运行指定的web应用

    实现题目描述的这个需求有很多种办法,作为入门,让我们从最简单的办法开始. 首先使用命令docker ps确保当前没有正在运行的Docker实例. 运行命令docker run -it nginx: 然 ...

  7. Docker入门系列2 安装

    可以从 Docker 社区直接下载可用的模版或镜像. Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多. 其次,Docker对系统资源的利用率很高,一台主机上可以同时运行数千个Do ...

  8. Docker入门系列之二:Docker术语

    原文作者:Jeff Hale 原文地址:https://towardsdatascience.com/learn-enough-docker-to-be-useful-1c40ea269fa8 翻译: ...

  9. Docker入门系列之一:什么是Docker?

    原文作者:Jeff Hale 原文地址:https://towardsdatascience.com/learn-enough-docker-to-be-useful-b7ba70caeb4b 翻译: ...

随机推荐

  1. Codeforces 920E Connected Components? 补图连通块个数

    题目链接 题意 对给定的一张图,求其补图的联通块个数及大小. 思路 参考 ww140142. 维护一个链表,里面存放未归入到任何一个连通块中的点,即有必要从其开始进行拓展的点. 对于每个这样的点,从它 ...

  2. 知乎上的一些文章---leetcode【笔记1】

    张土汪 http://github.com/shawnfan Java{script}代码仔 42 人赞同 [1.19.2017] 更新: 2017年1月17日, 陪我征战多年的 2014 MackB ...

  3. Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法

    Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法跟Ubuntu 12.04 - 13.10 以及jellybean编译环境配置没多大区别, 顺便记录下而已: Ub ...

  4. hdu 2674(余数性质)

    N!Again Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  5. 10.1综合强化刷题 Day3 morning

    竞赛时间:????年??月??日??:??-??:?? 题目名称 a b c 名称 a b c 输入 a.in b.in c.in 输出 a.out b.out c.out 每个测试点时限 1s 1s ...

  6. Spring中使用集成MongoDB Client启动时报错:rc: 48

    一定是所在的服务器也装了MongoDB导致端口冲突,解决方法:kill掉全部MongoDB的进程. ps aux | grep mongod PID 参考: http://blog.csdn.net/ ...

  7. 【2019】问题记录一:后端获取URL参数的值内加号“+”变成空格“ ”

    问题:URL参数中加号“+”变成空格“ ” 一.现象     URL如:http://example.****.com/controller/action?param=rice+cook+panda ...

  8. selenium遇到不可编辑input和隐藏input如何赋值

    js = 'document.getElementsByName("m:csr_mt_gnccspjclfbxd:bmshldID")[0].type="text&quo ...

  9. 关于Web应用和容器的指纹收集以及自动化软件的制作

    一次对Web应用的渗透,九成都是从信息收集开始,所以信息收集就显得尤为重要.关键信息的收集可以使你在后期渗透的时候更加的得心应手,把渗透比喻成走黑暗迷宫的话,那信息收集可以帮你点亮迷宫的大部分地图. ...

  10. java8新特性学习笔记(二) 使用流(各种API)

    筛选和切片 用谓词筛选,筛选出各个不相同的元素,忽略流中的头几个元素,或将流截断至指定长度 用谓词筛选 Stream接口支持filter方法,该操作接受一个谓词(返回一个boolean的函数) 作为参 ...