[Docker系列·13] 使用fig启动容器-阿里云开发者社区

开发者社区> 云原生> 正文

[Docker系列·13] 使用fig启动容器

简介: fig的使用非常简单,只需要配置`fig.yml`并在同目录下执行`fig up -d`即可启动容器。 配置`fig.yml`: --------------- ``` node: image: feuyeux/ubuntu-node ports: - "8080:8080" links: - redis:node-redis mem_l

fig的使用非常简单,只需要配置fig.yml并在同目录下执行fig up -d即可启动容器。

配置fig.yml

node:
  image: feuyeux/ubuntu-node
  ports:
    - "8080:8080"
  links:
    - redis:node-redis
  mem_limit: 2g
  hostname: fig-node

redis:
  image: feuyeux/redis
  hostname: fig-redis

配置中的两个镜像的创建,请参考本系列前面的文章:

启动容器

lu.hl@localhost:/opt/docker-room/fig-001$ fig up -d
Creating fig001_redis_1...
Creating fig001_node_1...

检测容器

可以使用fig自己的命令检测:

lu.hl@localhost:/opt/docker-room/fig-001$ fig ps
     Name                   Command               State               Ports
----------------------------------------------------------------------------------------
fig001_node_1    nodejs ./index.js                Up      22/tcp, 0.0.0.0:8080->8080/tcp
fig001_redis_1   redis-server /etc/redis/re ...   Up      22/tcp, 6379/tcp

也可以使用docker命令检测:

lu.hl@localhost:/opt/docker-room/fig-001$ d ps
CONTAINER ID        IMAGE                        COMMAND                CREATED             STATUS              PORTS                            NAMES
c7f112d912b8        feuyeux/ubuntu-node:latest   "nodejs ./index.js"    28 minutes ago      Up 28 minutes       22/tcp, 0.0.0.0:8080->8080/tcp   fig001_node_1
394c9648c33a        feuyeux/redis:latest         "redis-server /etc/r   28 minutes ago      Up 28 minutes       22/tcp, 6379/tcp                 fig001_node_1/fig001_redis_1,fig001_node_1/node-redis,fig001_node_1/redis_1,fig001_redis_1

在另外一台主机访问docker的host,测试结果如下:

screenshot

虽然使用fig简单,但小白还是有写坑要踩。这里列举如下。

1.DOCKER_HOST

当系统没有指定DOCKER_HOST参数时,执行fig命令会遇到如下错误。

Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

解决的办法是export该参数到当前终端或.bashrc

export DOCKER_HOST=tcp://localhost:4243
fig ps

2.DOCKER_OPTS

Ubuntu默认安装的docker没有启动tcp监听,因此这个约定俗成的端口4243也是要设置的。 可以在启动docker时加参数,但如果是执行sudo service docker start的话,还是要设置一下DOCKER_OPTS:

配置/etc/default/docker

DOCKER_OPTS="-api-enable-cors=true -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock --dns 8.8.8.8 --dns 8.8.4.4"
  • -api-enable-cors:这个参数的意义是允许ajax跨域资源共享。
  • tcp://0.0.0.0:4243:这个参数的意义是让docker监听所有4243端口的tcp请求(当然http是基于tcp之上的,remote api也是走这个端口) -

其他启动相关的配置参见:/etc/init/docker.conf

3.cgroup_enable

Ubuntu默认是不允许使用cgroup做内存等资源的调配的,如果你在docker的配置文件Dockerfile或者fig的配置文件fig.yml中设置了容器的启动内存,会遇到如下警告:

WARNING: Your kernel does not support cgroup swap limit. WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.

解决的办法是设置grub参数:

配置/etc/default/grub

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

然后执行sudo update-grub,重启系统生效。

坑还不止于此,这是我踩过的。关于docker和fig的砖今天先抛到这里。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云原生
使用钉钉扫一扫加入圈子
+ 订阅

云原生时代,是开发者最好的时代

其他文章