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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 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的砖今天先抛到这里。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
142 93
|
6天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
56 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
17天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
95 35
|
4天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
31 17
|
16天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
5天前
|
运维 Java 虚拟化
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
56 12
|
22天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
112 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
6天前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
47 10
|
22天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
46 4