Skip to content

Instantly share code, notes, and snippets.

@thinkhy
Last active January 16, 2017 11:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thinkhy/077d424b59ce1c6fe5d946c0174fe1d8 to your computer and use it in GitHub Desktop.
Save thinkhy/077d424b59ce1c6fe5d946c0174fe1d8 to your computer and use it in GitHub Desktop.
docker-compose的使用指南与常见问题总结

docker-compose的使用指南与常见问题总结

简介

compose是用来在docker中定义和运行复杂应用的常用工具,它通过在一个yml文件中定义多个容器的配置参数,只用一行命令就可以让容器环境运行就绪。 compose实际上就是以前的docker第三方工具fig,docke公司14年收购了fig团队之后并将其改名为docker-compose。

优势

  • docker本身有着很多命令行选项,难记难用。而且重新部署容器时,需要重新输入一遍命令,自动化程度低,容器配置难以维护。 compose通过一个docker-compose.yml文件来描述复杂的容器启动命令和相联的多容器环境。需要重新部署窗口环境时,只需执行两个步骤:
  1. 安装docker和docker-compose
  2. 获取yml描述文件,在文件所在目录执行命令docker-compose up
  • compose带来的另外一个好处就是配置文档化管理,可以将带有容器运行参数yml文件放进代码库做版本管理。

 

安装(以Ubuntu为例)

  • 首先需要将docker升级到1.3以上的版本,升级方法如下:  
  sudo apt-get install apt-transport-https     #添加 https 支持
  sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
  sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
  sudo apt-get update
  sudo apt-get -y install lxc-docker
  sudo docker version

 * 安装docker-compose

sudo apt-get install docker-compose

 

使用场景

1> 开启一个容器: 容器名为hello,镜像为ubuntu,默认开启bash命令   $mkdir hello-world

$cd hello-world

$vim docker-compose.yml

hello:
  image: "ubuntu"
  entrypoint: "/bin/bash"
  tty: true
  
$ `sudo docker-compose up`   # <== 开启容器
Creating compose_hello_1
Attaching to compose_hello_1

$ `sudo docker-compose stop` # <== 关闭容器

$ `sudo docker-compose rm`   # <== 删除容器

2> 映射网络端口

$vim docker-compose.yml

web:
  image: "ubuntu"
  

3> 创建多个互联的容器

4> 宿主机重启之后容器自启动

docker-compose常用命令

在第二节中的docker-compose up,这两个容器都是在前台运行的。我们可以指定-d命令以daemon的方式启动容器。除此之外,docker-compose还支持下面参数:
--verbose:输出详细信息
-f 制定一个非docker-compose.yml命名的yaml文件
-p 设置一个项目名称(默认是directory名)
docker-compose的动作包括:
build:构建服务
kill -s SIGINT:给服务发送特定的信号。
logs:输出日志
port:输出绑定的端口
ps:输出运行的容器
pull:pull服务的image
rm:删除停止的容器
run: 运行某个服务,例如docker-compose run web python manage.py shell
start:运行某个服务中存在的容器。
stop:停止某个服务中存在的容器。
up:create + run + attach容器到服务。
scale:设置服务运行的容器数量。例如:docker-compose scale web=2 worker=3

管理与监控

  • shipYard

  • DockerUI

  • 容器监控

    • Docker子命令: stats
      CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O               BLOCK I/O             PIDS
289df03aaf6c        0.00%               13.43 MiB / 7.8 GiB   0.17%               12.8 MB / 244.6 MB    13.58 MB / 0 B        0
ff8896a322cb        0.00%               638.8 MiB / 7.8 GiB   8.00%               1.944 kB / 0 B        82.14 GB / 147.5 kB   0
0ff4cbc1d45e        0.83%               1.013 GiB / 7.8 GiB   12.99%              86.19 MB / 129.5 MB   272.9 MB / 37.7 MB    0
91880f92867f        0.13%               207.2 MiB / 7.8 GiB   2.59%               116.4 MB / 75.06 MB   52.3 MB / 13.8 MB     0
7cf25681c672        4.28%               2.378 GiB / 7.8 GiB   30.49%              12.84 kB / 6.81 kB    493.3 MB / 119.5 GB   0
0e3488d34e41        0.00%               7.727 MiB / 7.8 GiB   0.10%               937.4 kB / 882.9 kB   5.329 MB / 0 B        0
b610d8aa29ea        0.00%               8.016 MiB / 7.8 GiB   0.10%               1.808 MB / 1.735 MB   34.74 MB / 0 B        0
26e8d38de8d3        0.06%               14.27 MiB / 7.8 GiB   0.18%               1.811 MB / 1.822 MB   32.71 MB / 3.51 MB    0
30981536ffe4        0.06%               103.3 MiB / 7.8 GiB   1.29%               53.02 kB / 38.23 kB   45.4 MB / 1.311 MB    0
31c077e2ddfa        103.86%             760.1 MiB / 7.8 GiB   9.52%               39.91 kB / 207.1 kB   166.5 MB / 1.256 GB   0
  • TestData
  • Nagios or Zabbix

Q&A

* 如何退出容器之后继续保持容器继续运行


* 容器已启动,如何动态添加端口与盘卷?
  • 盘卷空间不足的解决办法? 默认只配置10G的空间。

  • docker映像下载太慢,加 银雀云与DaoCloud的国内image镜像。

  • 进入docker容器内,无法使用apt-get或者yum等工具安装常用软件。

  • 以ubuntu为例

  • 近期(2017年1月)Aliyun的软件镜像不太稳定,建议使用ubuntu.cn

    • 如果监控docker容器的资源消耗情况?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment