首页 > 其他分享 >Docker Compose 使用

Docker Compose 使用

时间:2023-12-15 11:13:39浏览次数:42  
标签:Compose service redis compose 使用 services Docker docker

Docker Compose 使用

Compose 简介

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

使用

# yaml 配置
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

该 Compose 文件定义了两个服务:web 和 redis。

  • web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 。
  • redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像。
build               Build or rebuild services
bundle              Generate a Docker bundle from the Compose file
config              Validate and view the Compose file
create              Create services
down                Stop and remove containers, networks, images, and volumes
events              Receive real time events from containers
exec                Execute a command in a running container
help                Get help on a command
images              List images
kill                Kill containers
logs                View output from containers
pause               Pause services
port                Print the public port for a port binding
ps                  List containers
pull                Pull service images
push                Push service images
restart             Restart services
rm                  Remove stopped containers
run                 Run a one-off command
scale               Set number of containers for a service
start               Start services
stop                Stop services
top                 Display the running processes
unpause             Unpause services
up                  Create and start containers
version             Show the Docker-Compose version information

参数

context:上下文路径。
dockerfile:指定构建镜像的 Dockerfile 文件名。
args:添加构建参数,这是只能在构建过程中访问的环境变量。
labels:设置构建镜像的标签。
target:多层构建,可以指定构建哪一层。

command

覆盖容器启动的默认命令。

command: ["bundle", "exec", "thin", "-p", "3000"]

container_name

指定自定义容器名称,而不是生成的默认名称。

container_name: my-web-container

logging

容器日志设置

logging:
  driver: "json-file"
  options:
    max-size: "100m"
    max-file: "3"
  remove: true

depends_on

设置依赖关系。

  • docker-compose up :以依赖性顺序启动服务。在以下示例中,先启动 db 和 redis ,才会启动 web。
  • docker-compose up SERVICE :自动包含 SERVICE 的依赖项。在以下示例中,docker-compose up web 还将创建并启动 db 和 redis。
  • docker-compose stop :按依赖关系顺序停止服务。在以下示例中,web 在 db 和 redis 之前停止。
version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

networks

方法二:使用自定义网络

version: "3"
services:
  your_service:
    image: your_image
    network_mode: "host" # 这样容器将与主机共享网络命名空间 且 ports 将不再生效

方法二:使用自定义网络

version: "3"
services:
  your_service:
    image: your_image
    networks:
      - custom_network

networks:
  custom_network:
    driver: bridge

在这个例子中,your_service 将连接到 custom_network 网络。你可以使用容器的名称或 IP 地址来访问服务。例如,如果你的容器名称是 your_service,你可以使用 http://your_service:container_port 来访问服务。

选择哪种方法取决于你的需求和安全考虑。如果只是需要快速访问主机上的端口,使用 "host" 网络模式可能更方便。如果你想更好地控制网络连接并保持更好的隔离性,可以选择使用自定义网络。

environment

设置环境变量 等于 docker run -e MY_VARIABLE=my_value my_image

version: '3'

services:
  my_service:
    image: my_image
    environment:
      - MY_VARIABLE=my_value
      - ANOTHER_VARIABLE=another_value
# 顶层设置等于给所有启动容器用
environment:
 - COMMON_VARIABLE=common_value

extra_hosts

添加主机名映射。类似 docker client --add-host。

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

以上会在此服务的内部容器中 /etc/hosts 创建一个具有 ip 地址和主机名的映射关系:

162.242.195.82  somehost
50.31.209.229   otherhost

# 实际ip 映射ip

最佳实例

docker-compose.yml

version: '3'
services:
  my-container:
    image: nginx:latest
    container_name: nginx
    environment:
      - USER=RENOYUAN
    volumes:
      - ./shared:/app/shared
    network_mode: "host"
    ports:
     - "1102:1102"
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "3"
      remove: true

使用 Compose 命令运行应用

在 docker-compose.yml 目录下运行

启动容器
docker-compose up  -d -v my-service  
# 可选参数 -d 后台启动 -v 删除容器卷   my-service 只操作里面指定服务
关闭/删除容器
docker-compose down
重启服务
docker-compose restart
暂停服务
docker-compose pause
恢复服务
docker-compose unpause

其他

关于YML

YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。

YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。

YAML 的配置文件后缀为 .yml,如:runoob.yml

基本语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

https://www.runoob.com/w3cnote/yaml-intro.html

标签:Compose,service,redis,compose,使用,services,Docker,docker
From: https://www.cnblogs.com/renoyuan/p/17902938.html

相关文章

  • cmake 的使用
    cmake简介cmake是一个软件自动化构建工具,在使用C/C++编写程序的时候,多个源文件编译一般是通过makefile工具进行编译生成。可以通过使用cmake生成一个makefile文件,再通过makefile文件生成程序。简而言之:cmake用于生成makefile文件,makefile文件用于编译源文件生成程序。......
  • 两个线程共享一个套接字,其中一个线程使用sendmsg函数不断发送消息到该套接字,另一个线
    以下是使用C语言写的一段代码,实现两个线程共享一个套接字,其中一个线程使用sendmsg函数不断发送消息到该套接字,另一个线程使用recvmsg函数不断接收该套接字的消息,并打印出来的功能点击查看代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.......
  • ubuntu下完全卸载重装docker教程
    操作需在管理员权限下运行卸载docker1.删除docker的所有包apt-getautoremovedockerdocker-cedocker-enginedocker.iocontainerdrunc2.查看docker是否卸载干净dpkg-l|grepdockerdpkg-l|grep^rc|awk'{print$2}'|sudoxargsdpkg-P3.删除相关插件apt-......
  • v-echarts 使用折线图
    <ve-linestyle="top:-40px"height="100%"width="100%":loading="yearChartLoading":data="yearChartData":extend="chartExtend":legend-visible="false":settings="yearSetting......
  • Docker相关概念
    镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。(安装包)容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。仓库(repository):仓库就是存放镜像的地方!仓库分为公有仓库和私有仓库! 一切......
  • 12月14日插件的具体使用
    配置好环境之后你就可以选择使用mapper或者service了 调用和mapper基本相同但是提供的调用方法更多了。然后你就能够更方便的开始后端开发了。今天的另一件事是逻辑视图建模这是一个针对于外卖管理系统的逻辑视图建模。(一),分析系统用例,确定对象类外卖管理系统包括”商家......
  • Unity shader 里面使用数组
    很多人不知道Unityshader是支持通过C#脚本,往shader脚本里写入数组的。我不知道Properties里面怎么写,但是可以用C#代码往里写。数组的总长度似乎最大2048。注意,是所有数组的总长度加一起不能超过2048。比如你写了五个数组,每个数组的长度是100,五个数组的总长度就是500。不是......
  • google gemini api使用
    title:googlegeminiapi使用banner_img:https://cdn.studyinglover.com/pic/2023/12/334c0c129076533308cbc7e03f8c55be.pngdate:2023-12-1423:15:00tags:-googlegeminigooglegeminiapi使用google最近发布了geminiapi,我之前在我的博客介绍了如何申请,这篇文章来......
  • (原创)安卓快速使用简单的BottomNavigation(结合fragment)
    原创声明:本文所有图片和代码皆由本人制作和编写。目录前言目标效果第0步导入库第1步准备好一些资源fragmentdrawable图标第一小步第二小步第二步创建menu第三步创建navigation注意第四步绑定前言这篇文章是边写大作业边查资料边写的,查了很多资料,翻了很多论坛,也遇到了很多......
  • openGauss学习笔记-159 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-159openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-导出所有数据库-导出所有数据库159.1导出所有数据库openGauss支持使用gs_dumpall工具导出所有数据库的全量信息,包含openGauss中每个数据库信息和公共的全局对象信息。可根......