Docker 快速入门

2017 年 10 月 6 日 Linux中国 作者:Locez
Docker 是一个开源的容器引擎,而一个容器其实是一个虚拟化的独立的环境,因此开发者可以将应用打包到这样的一个 docker 容器中,然后发布到任何可以运行 docker 容器的机器中,实现一次打包多处部署,解决了因为环境问题而导致的部署难题。
-- Locez


本文导航
转载自 | http://locez.com/linux/docker/docker-qucikly-start/
 作者 | Locez

1 Docker 是什么?

Docker 是一个开源的容器引擎,而一个容器其实是一个虚拟化的独立的环境,因此开发者可以将应用打包到这样的一个 docker 容器中,然后发布到任何可以运行 docker 容器的机器中,实现一次打包多处部署,解决了因为环境问题而导致的部署难题。

1.1 容器是什么?

与 容器 对应的一个概念就是 镜像,镜像可以看做我们平时装系统的镜像,里面就是一个运行环境。当然我比较喜欢将镜像比作一个我们面向对象编程中的 类,而一个容器就是一个类的 实例,因此可以根据一个镜像,创建出很多个容器。每一个容器都是具体的,我们可以在容器上面做出更改,然后再把这个容器打包成一个新的镜像,从而以后可以根据改动后的镜像创建出新的容器。而容器本身可以简单理解为是一个虚拟独立的运行环境,我们要做的是中这个环境中打包我们的应用,以便于再次部署。

2 安装 Docker

Gentoo

   
     
     
     
  1. # emerge --ask docker

CentOS

   
     
     
     
  1. # yum install docker-ce

Ubuntu

   
     
     
     
  1. # apt-get install docker-ce

Arch

   
     
     
     
  1. # pacman -S docker

2.1 启动 docker 守护进程

   
     
     
     
  1. # systemctl start docker

3 docker 命令介绍

   
     
     
     
  1. # docker --help

  2. 管理命令:

  3.  container   管理容器

  4.  image       管理镜像

  5.  network     管理网络

  6. 命令:

  7.  attach      介入到一个正在运行的容器

  8.  build       根据 Dockerfile 构建一个镜像

  9.  commit      根据容器的更改创建一个新的镜像

  10.  cp          在本地文件系统与容器中复制 文件/文件夹

  11.  create      创建一个新容器

  12.  exec        在容器中执行一条命令

  13.  images      列出镜像

  14.  kill        杀死一个或多个正在运行的容器    

  15.  logs        取得容器的日志

  16.  pause       暂停一个或多个容器的所有进程

  17.  ps          列出所有容器

  18.  pull        拉取一个镜像或仓库到 registry

  19.  push        推送一个镜像或仓库到 registry

  20.  rename      重命名一个容器

  21.  restart     重新启动一个或多个容器

  22.  rm          删除一个或多个容器

  23.  rmi         删除一个或多个镜像

  24.  run         在一个新的容器中执行一条命令

  25.  search       Docker Hub 中搜索镜像

  26.  start       启动一个或多个已经停止运行的容器

  27.  stats       显示一个容器的实时资源占用

  28.  stop        停止一个或多个正在运行的容器

  29.  tag         为镜像创建一个新的标签

  30.  top         显示一个容器内的所有进程

  31.  unpause     恢复一个或多个容器内所有被暂停的进程

在子命令中还有更多丰富的选项,可以使用 docker COMMAND --help 查看。例如:

   
     
     
     
  1. # docker run --help

4 docker 使用实战

接下来,我将利用 docker 部署一个 Nginx 服务器,作为讲解的例子。 要创建一个容器,那么我们必须先要有一个用于创建容器的镜像。 在 docker hub 中查找 nginx 相关镜像。

   
     
     
     
  1. # docker search nginx

  2. NAME                                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

  3. nginx                                                  Official build of Nginx.                        6959      [OK]

  4. jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker c...   1134                 [OK]

  5. richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable ...   452                  [OK]

  6. ...

  7. ...

拉取官方镜像,其中上面的非官方镜像是用户们根据自己的需要制作的镜像,方便大家的使用。

   
     
     
     
  1. # docker pull nginx

  2. Using default tag: latest

  3. latest: Pulling from library/nginx

  4. afeb2bfd31c0: Pull complete

  5. 7ff5d10493db: Downloading [===============>                                   ] 6.651 MB/21.87 MB

  6. d2562f1ae1d0: Download complete

在这里顺便说一下,docker 镜像是分层存储的,所以上面的 nginx 镜像有 3 层,另外每根据新的容器制作一个新的镜像以后会给这个镜像加上一层。

接下来直接利用这个镜像启动一个新的容器:

   
     
     
     
  1. # docker run --name my-nginx -d -p 8080:80 nginx

此时中浏览器中输入:http://localhost:8080/ 即可访问 nginx。 参数解释:

◈  --name 为容器取一个名字
◈  -p 参数语法为  -p host port:container port-p 8080:80 将主机上的8080端口绑定到容器上的80端口,因此在主机中访问8080端口时其实就是访问 nginx 容器的80端口
◈  -d 后台运行容器

然后我们来看一个更复杂的例子:

   
     
     
     
  1. # docker run --name my-nginx \

  2.    -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro \

  3.    -v /some/html:/usr/share/nginx/html:ro \

  4.    -p 8080:80 \

  5.    -d nginx

这个例子多了一个参数 -v,这个参数的作用是把本地的文件或者文件夹挂载到容器中,其中最后面的 ro 或者 rw 控制这个挂载是否可写。

◈  -v 参数语法为  -v host dir:container dir[:ro|rw]

上面的命令将本地文件中的 nginx.conf 配置文件挂载到容器,并且将要展示的静态页面也挂载到容器。 注意:在容器执行一条命令以后,当这个命令结束运行,容器也会结束运行。

接下来让我们看看 docker 别的命令。

查看所有运行中的容器:

   
     
     
     
  1. # docker ps

  2. CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

  3. 1fe91b5a4cd4        nginx               "nginx -g 'daemon ..."   39 minutes ago      Up 39 minutes       0.0.0.0:8080->80/tcp   my-nginx

  4. # docker ps -a ### 列出包括未运行的容器

查看容器运行日志:

   
     
     
     
  1. # docker logs my-nginx

  2. 172.17.0.1 - - [05/Oct/2017:07:31:11 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" "-"

  3. 2017/10/05 07:31:11 [error] 7#7: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost:8080"

重启容器:

   
     
     
     
  1. # docker restart my-nginx

  2. my-nginx

停止运行一个容器:

   
     
     
     
  1. # docker stop my-nginx

  2. my-nginx

  3. # docker ps

  4. CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

启动一个已经存在的容器:

   
     
     
     
  1. # docker start my-nginx

  2. my-nginx

  3. # docker ps

  4. CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

  5. 1fe91b5a4cd4        nginx               "nginx -g 'daemon ..."   50 minutes ago      Up 3 seconds        0.0.0.0:8080->80/tcp   my-nginx

直接杀死一个运行中的容器:

   
     
     
     
  1. # docker kill my-nginx

重命名容器:

   
     
     
     
  1. # docker rename my-nginx new-nginx

删除容器:

   
     
     
     
  1. # docker rm new-nginx

查看本机所有镜像:

   
     
     
     
  1. # docker imags

使用已经存在的容器创建一个镜像:

   
     
     
     
  1. # docker commit -m "nothing changed" my-nginx my-nginx-image

  2. sha256:f02483cdb842a0dc1730fe2c653603fa3271e71c31dbb442caccd7ad64860350

  3. # docker images

  4. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

  5. my-nginx-image      latest              f02483cdb842        6 seconds ago       108 MB

  6. nginx               latest              da5939581ac8        3 weeks ago         108 MB

使用我们自己创建的镜像创建容器:

   
     
     
     
  1. # docker run --name test -d -p 8081:80 my-nginx-image

  2. 12ba86eabdef0121d875bdb547f1101d4eb54ff7cb36e20214fb1388659af83d

  3. # docker ps

  4. CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

  5. 12ba86eabdef        my-nginx-image      "nginx -g 'daemon ..."   7 seconds ago       Up 5 seconds        0.0.0.0:8081->80/tcp   test

  6. 299f4ede9e79        nginx               "nginx -g 'daemon ..."   11 minutes ago      Up 11 minutes       0.0.0.0:8080->80/tcp   my-nginx

如果我们使用的容器的启动命令是一个 shell ,那么我们可以使用 attach 命令来介入这个容器,就跟我们使用 ssh 连接一台服务器差不多。

   
     
     
     
  1. # docker attach some-container

在创建一个容器时直接启动一个可交互式的 shell, 并且退出后自动删除容器:

   
     
     
     
  1. # docker run -it --rm  centos

总结

本文介绍了 docker 的简单用法,同时也给出了一个实际的例子用来展示 docker 命令的各种操作。作为一个快速入门的文章,本文写的相对有点简单,很多概念上的东西还需要求查看别的资料理解,但是看完本文应该就具备使用 docker 的基本能力了。此外,后续的文章应该会写一点 Dockerfile 与 docker-compose 相关的内容。

推荐文章

< 左右滑动查看相关文章 >

点击图片、输入文章 ID 或识别二维码直达



登录查看更多
0

相关内容

Docker - An open platform for distributed applications for developers and sysadmins.
一份简明有趣的Python学习教程,42页pdf
专知会员服务
77+阅读 · 2020年6月22日
【资源】100+本免费数据科学书
专知会员服务
108+阅读 · 2020年3月17日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
70+阅读 · 2020年1月17日
【新书】傻瓜式入门深度学习,371页pdf
专知会员服务
191+阅读 · 2019年12月28日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
96+阅读 · 2019年12月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
88+阅读 · 2019年11月25日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
165+阅读 · 2019年10月28日
机器学习相关资源(框架、库、软件)大列表
专知会员服务
40+阅读 · 2019年10月9日
通过Docker安装谷歌足球游戏环境
CreateAMind
11+阅读 · 2019年7月7日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
浅显易懂的分布式TensorFlow入门教程
专知
7+阅读 · 2018年6月22日
Tensorflow Eager Execution入门指南
专知
6+阅读 · 2018年4月16日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
Arxiv
3+阅读 · 2019年3月1日
Arxiv
4+阅读 · 2018年11月7日
Arxiv
8+阅读 · 2018年5月1日
Arxiv
4+阅读 · 2018年4月17日
Arxiv
7+阅读 · 2018年3月19日
Arxiv
7+阅读 · 2018年1月30日
Arxiv
12+阅读 · 2018年1月11日
VIP会员
相关VIP内容
一份简明有趣的Python学习教程,42页pdf
专知会员服务
77+阅读 · 2020年6月22日
【资源】100+本免费数据科学书
专知会员服务
108+阅读 · 2020年3月17日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
70+阅读 · 2020年1月17日
【新书】傻瓜式入门深度学习,371页pdf
专知会员服务
191+阅读 · 2019年12月28日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
96+阅读 · 2019年12月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
88+阅读 · 2019年11月25日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
165+阅读 · 2019年10月28日
机器学习相关资源(框架、库、软件)大列表
专知会员服务
40+阅读 · 2019年10月9日
相关资讯
通过Docker安装谷歌足球游戏环境
CreateAMind
11+阅读 · 2019年7月7日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
浅显易懂的分布式TensorFlow入门教程
专知
7+阅读 · 2018年6月22日
Tensorflow Eager Execution入门指南
专知
6+阅读 · 2018年4月16日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
相关论文
Arxiv
3+阅读 · 2019年3月1日
Arxiv
4+阅读 · 2018年11月7日
Arxiv
8+阅读 · 2018年5月1日
Arxiv
4+阅读 · 2018年4月17日
Arxiv
7+阅读 · 2018年3月19日
Arxiv
7+阅读 · 2018年1月30日
Arxiv
12+阅读 · 2018年1月11日
Top
微信扫码咨询专知VIP会员