什么是docker

  Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metalOpenStack 集群和其他的基础应用平台。

Docket通常用于如下场景:

  • web应用的自动化打包和发布
  • 自动化测试和持续集成、发布
  • 在服务型环境中部署和调整数据库或其他后台应用
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境

安装

  Docker有很多种安装的选择,我们推荐您在Ubuntu下面安装,因为docker是在Ubuntu下面开发的,安装包测试比较充分,可以保证软件包的可用性。

  1. 使用管理员账号登录系统,或者确保有root权限。
  2. 检查curl包有没有安装:

    1
    $ which curl

    如果没有安装,更新apt源后安装curl

    1
    2
    $ sudo apt update
    $ sudo apt install curl
  3. 获得最新的docker安装包

    1
    $ curl -sSL https://get.docker.com/ | sh

    shell会提示你输入sudo密码,然后开始执行安装过程

  4. 确认Docker是否安装成功

    1
    $ sudo docker run hello-world

    这个命令会下载一个测试用的镜像并启动一个容器运行它

入门

Docker系统有两个程序:docker服务端和docker客户端。其中docker服务端是一个服务进程,管理着所有的容器。docker客户端则扮演者docker服务器的远程控制其,可以用来控制docker的服务端进程。大部分情况下,docker服务端和客户端运行在一台机器上。

搜索可用docker镜像

Docker官方网站专门有一个页面来存储所有可用的镜像,网址是:Docker镜像。你可以通过浏览这个网页来查找你想要使用的镜像,或者使用命令行工具来检索。

命令为:

1
2
3
4
5
$ docker search tutorial
mistacker@mistacker-Mai-II:~$ docker search tutorial
NAME                                         DESCRIPTION                                     STARS               OFFICIAL           AUTOMATED
learn/tutorial                                                                                40                                      
...

下载容器镜像

通过docker命令下载tutorial镜像

1
$ docker pull learn/tutorial

在docker容器中运行hello world

1
$ docker run learn/tutorial echo "hello world"

在容器中安装新的程序

learn/tutorial镜像里面安装ping程序。值得注意的是在执行apt命令时,要带上-y参数。如果不指定该参数,apt命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。

1
$ docker run learn/tutorial apt-get install -y ping

保存对容器的修改

当你对某一容器做了修改后,可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。docker中保存状态的过程称之为committing,它保存的新旧状态之间的区别,从而产生一个新的版本。

首先使用docker ps -l 命令获得安装完Ping命令之后容器的id。然后把这个镜像保存为learn/ping

提示:

  • 运行docker commit,可以查看命令的参数列表
  • 你需要指定提交保存容器的ID。(通过dicker ps -l命令获得)
  • 无需拷贝完整的id,通常来讲最开始的三至四个字幕即可区分
    1
    2
    3
    4
    5
    $ docker ps -l
    CONTAINER ID       IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
    c85d7e24a6b3       hello-world         "/hello"            39 minutes ago     Exited (0) 39 minutes ago                       boring_goldberg
    $ docker commit c85d learn/ping
    effb66b31edb

执行完docker commit命令之后,会返回新版本镜像的ID号。

运行新的镜像

到目前为止,你已经建立一个完整的。自成体系的docker环境,并且安装了Ping命令在里面。它可以在任何支持docker环境的系统中运行啦。

提示:一定要使用新的镜像名learn/ping来运行ping命令

1
2
$ docker run learn/ping ping www.baidu.com
...

检查运行中的镜像

现在已经运行了一个Docker容器,让我们来看看正在运行的容器。
使用docker ps命令可以查看所有正在运行中的容器列表,使用docker inspect命令我们可以查看更详细的关于某一个容器的信息

提示:可以使用镜像id的前面部分,不需要完整的id

1
2
3
$ docker ps
...
$ docker inspect id...

如果要查看所有容器,包括停止的容器可以使用-a参数如:

1
2
3
4
5
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d5ae2f937b8b nginx "nginx -g 'daemon of…" 59 seconds ago Exited (0) 6 seconds ago musing_booth
cd54e77506cc nginx "nginx -g 'daemon of…" About a minute ago Exited (0) About a minute ago eager_williams
8aa759f43b59 nginx "nginx -g 'daemon of…" 17 minutes ago Exited (0) 6 minutes ago elegant_bell

删除容器

如果我们考虑删除上面结果显示的8aa759f43b59容器可采用参数rm:

1
$ docker rm 8aa759f43b59

查看本地镜像

我们下载了很多镜像,如果要确定某个镜像本地是否存在就要查看本地所有的镜像,就用到images参数。

1
2
3
4
5
6
7
8
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx-fun latest 0368e194ab9d 13 minutes ago 109MB
nginx latest be1f31be9a87 6 days ago 109MB
hello-world latest 4ab4c602aa5e 4 weeks ago 1.84kB
ubuntu latest cd6d8154f1e1 4 weeks ago 84.1MB
mysql 5.6 1f47fade220d 4 weeks ago 256MB
training/webapp latest 6fae60ef3446 3 years ago 349MB

删除本地镜像

如果我们觉得有些镜像已经不用了,那我们可以考虑删除它,就用到rmi参数:

1
$ docker rmi -f ubuntu

-f参数意思是强制删除。

进入运行中的容器

有时候我们需要进入容器中运行一些脚本,这时我们就用到了-it参数:

1
2
$ docker run -it --name test ubuntu /bin/bash
...

-i:交互式界面,默认是false
-t:伪终端,默认是false
–name:容器别名,默认随机命名

停止容器

我们可以用stop参数来停止镜像容器

1
$ docker stop id

id:容器的id号

保存修改后的容器内容

当我们运行容器,往往会对容器中的内容进行修改,该内容不会保存到镜像中,我们还需要下次使用该容器,那么就可以把该容器制作成镜像,以便保存修改后的内容;

1
$ docker commit id name

id:容器的id号
name:镜像的名字

发布自己的镜像

现在新镜像可以正常工作,我们下一步将其发布到官方的索引网站。一方面可以自己重用,另一方面也可以分享给其他人使用。

提示:

  • docker images命令可以列出所有暗转过得镜像
  • docker push命令可以讲某一个镜像发布到官方网站
  • 你只能将镜像发布到自己的控件下面。这个模拟器登录的是learn账号
    1
    2
    3
    4
    $ docker images
    REPOSITORY         TAG                 IMAGE ID           CREATED             SIZE
    hello-world         latest             4ab4c602aa5e        4 weeks ago         1.84kB
    $ docker push hello-world

以上只是docker的简单使用,更多有关docker的命令请访问Docker命令大全