手机扫一扫访问本页内容

微信扫描点右上角"···"分享到好友或朋友圈

关闭
微信扫一扫可打开小程序

微信长按图片或搜“分享录”可打开小程序

关闭

使用docker-compose.yml构建镜像并运行到容器中

关于安装Docker可以看《在Mac、Windows、Linux上安装Docker以及常用的操作命令》,更多相关内容看Docker系列

Compose是一个用于定义和运行多容器的Docker应用程序工具。Compose使用一个YAML文件来配置应用程序的服务。然后,只需一个命令,就可以从配置中创建并启动所有服务。

首先要获取Docker Compose,官方提供了Docker Desktop、Compose插件和单独安装三种方案可以获取Docker Compose,普通用户推荐直接用Docker Desktop安装,服务器上推荐用Compose插件安装,单独安装可能会因为无法连接GitHub而装不了。

Windows、macOS和Linux的桌面用户都可以通过安装Docker Desktop的时候就连同Docker Engine和Docker CLI集成安装Docker Compose,安装后具体可以通过Docker的“About”菜单来查看Docker Compose的版本信息。

通过Compose插件安装(这种只支持Linux)包括Using Docker’s repositoryDownloading and installing manually两种方法,推荐使用第一种,第二种同样可能会因为无法连接GitHub而装不了。

Ubuntu和Debian运行:

#安装
sudo apt-get update
sudo apt-get install docker-compose-plugin
#卸载
sudo apt-get remove docker-compose-plugin

基于RPM的发行版运行:

#安装
sudo yum update
sudo yum install docker-compose-plugin
#卸载
sudo yum remove docker-compose-plugin

实际上在Linux服务器上安装docker的时候跟安装Docker Desktop一样也会集成安装Docker Compose。

可以通过“docker compose version”命令来查看Docker Compose的版本信息,还可以通过“docker info –format ‘{{range .ClientInfo.Plugins}}{{if eq .Name “compose”}}{{.Path}}{{end}}{{end}}’”命令查看安装目录。

如果已经安装了Docker Compose,接下来我们就可以用它来构建镜像并运行到容器中。

使用Compose有三个步骤,首先就是编写Dockerfile文件,然后编写docker-compose.yml文件,然后通过“docker compose up”或“docker-compose up”来启动并运行整个服务。

关于Dockerfile可以看我上一篇文章《用Dockerfile构建镜像并运行到容器中》。

Compose文件是一个YAML,定义了services、networks和volumes,文件名可以是docker-compose.yml或docker-compose.yaml或自定义,后缀必须是yml或yaml,格式如下。

#version: "3.8"
services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    depends_on:
      - redis
  redis:
    image: redis
networks: #自定义网络
  docker-bridge: #自定义网络名称
    driver: bridge #自定义网络模式
    ipam: #网络管理器
      config: #配置参数
        -subnet: 172.18.0.0/16 #配置子网网段
volumes:
  logvolume01: {}

YAML格式需要注意以下几点:

1.YAML区分大小写;
2.通常开头缩进2个空格;
3.只能使用空格缩进,不支持制表符tab键缩进;
4.字符后缩进1个空格,如冒号“: ”、逗号“,”、横杠“ - ”等;
5.以“#”开头的为注释行;
6.如果包含特殊字符用单引号''引起来作为普通字符,如果用双引号""表示特殊字符本身的意思;
7.布尔值必须用双引号""括起来;

Docker Compose配置文件语法

跟Dockerfile文件类似,docker-compose.yml文件也有很多关键字,Dockerfile的指令全是大写而docker-compose.yml的关键字都是小写,下面列举一些常用的字段做解释。

version:Docker Compose版本号,有3个版,1已被淘汰,2只能单机编排,3即可以单机编排也可以多机编排。
services:定于了包含应用于该服务启动的每个容器配置,相当于将命令行参数传递给“docker run”。
build:构建的时候执行的配置,包含context、dockerfile、args、labels等字段。
context:Dockerfile路径,或者时执行git仓库的url地址。
dockerfile:指定Dockerfile文件。
args:构建时期的参数,可以给Dockerfile中定义的ARG变量传值。
labels:标签集,Compose 3.3才支持的配置。
image:命名构建后的镜像名称。
command:执行命令,会覆盖容器启动后默认执行的命令(会覆盖Dockefile中的CMD指令)。
container_name:命名运行容器的名称,缺省会自动生成容器名称。
deploy:指定部署和运行服务相关配置,只能在swarm模式使用。
environment:环境变量。
networks:自定义网络,引用顶级networks下配置。顶级配置networks相当于将命令行参数传递给“docker network create”。
network-mode:设置容器的网络模式。
ports:开放的端口,与-p相同,但是端口不能低于60。
volumes:挂载到宿主机目录或命令卷到容器,命令卷要在顶级volumes定义卷名称。顶级配置volumes相当于将命令行参数传递给“docker volume create”。
hostname:主机名,缺省会自动拿CONTAINER ID。
links:连接诶到另一个容器,可以是服务名称或者链接别名,例如“- "db"”、“- "db:database"”。
privileged:给容器root权限,不要随便给容器root权限,存在安全问题,格式为“privileged: true”。
restart:重启策略,定义是否重启容器。默认no,在容器退出时不重启容器;on-failure,在容器非正常退出时,才会重启容器;always,在容器退出时总是重启容器;unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。
depends_on:用于解决容器的依赖,启动先后问题。如启动应用容器,需要先启动数据库容器。如:
web:
  depends_on:
    - redis
    - mysql

官网提供的案例运行结果如下。

Docker Compose常用命令

编写好docker-compose.yml配置文件以后我需要用Docker Compose的命令来操作docker-compose.yml,比如用“docker compose up”或“docker-compose up”来启动并运行整个服务,下面列举一些常用的命令做解释。

version:查看Docker Compose版本信息。
build:重新构建服务。
pull:拉服务镜像。
push:推服务镜像。
ls:列出运行中的Docker Compose项目。
ps:列出容器。
config:格式化列出docker-compose.yml文件内容。
up:创建并启动容器服务。
exec:在容器里面执行命令。
scale:指定一个服务容器启动数量。
top:显示正在运行的容器进程。
logs:查看服务容器的输出。
run:运行服务。
down:删除容器、网络、数据卷和镜像。
pause/unpause/stop/start/restart:暂停/恢复/停止/启动/重启服务。
kill:停止容器。
rm:删除容器。

需要注意的是执行上面的命令要结合“docker compose”或“docker-compose”并且基本都要在包含docker-compose.yml文件的目录下才能使用,不然报错或没结果。

另外,可以用“docker compose -f xxx.yml up -d”来执行自定义Docker Compose文件,其中“-f”为调用文件、“-d”为开启守护进程,只是用自定义文件名在IDEA等工具编写的时候不会显示补全提示。

更多Docker Compose以及Compose Specification相关信息请查看官网文档。


历史上的今天:

展开阅读全文


上一篇:

下一篇:

服务器又要到期了鼓励一下吧
您还可以访问本站的小程序、公众号等所有端,或者下载APP, 在小程序、APP上可以评论文章以及保存图片还有在线客服哦,如您有任何疑问或建议可向作者提出意见反馈
扫码打开小程序可评论文章保存图片,在“我的”有实时在线客服哦,看效果?
关注我的公众号为您分享各类有用信息
分享录多端跨平台系统