代码改变世界

docker compose使用

2024-01-21 01:20  youxin  阅读(502)  评论(0编辑  收藏  举报

 docker compose常用命令

# 默认使用docker-compose.yml构建镜像
 $ docker-compose build
 $ docker-compose build --no-cache # 不带缓存的构建
 
 
 # 指定不同yml文件模板用于构建镜像
 $ docker-compose build -f docker-compose1.yml
 
 
 # 列出Compose文件构建的镜像
 $ docker-compose images                          
 
 
 # 启动所有编排容器服务
 $ docker-compose up -d
 
 
 # 查看正在运行中的容器
 $ docker-compose ps 
 
 
 # 查看所有编排容器,包括已停止的容器
 $ docker-compose ps -a
 
 
 # 进入指定容器执行命令
 $ docker-compose exec nginx bash 
 $ docker-compose exec web python manage.py migrate --noinput
 
 
 # 查看web容器的实时日志
 $ docker-compose logs -f web
 
 
 # 停止所有up命令启动的容器
 $ docker-compose down 
 
 
 # 停止所有up命令启动的容器,并移除数据卷
 $ docker-compose down -v
 
 
 # 重新启动停止服务的容器
 $ docker-compose restart web
 
 
 # 暂停web容器
 $ docker-compose pause web
 
 
 # 恢复web容器
 $ docker-compose unpause web
 
 
 # 删除web容器,删除前必需停止stop web容器服务
 $ docker-compose rm web  
 
 
 # 查看各个服务容器内运行的进程 
 $ docker-compose top
# 前台启动, 启动项目中的所有服务。
$. docker-compose up
 
# 后台启动, 启动所有服务并在后台运行。 
$. docker-compose up -d
 
# 停止所有服务。
$. docker-compose stop 
 
restart
docker-compose restart重启服务容器。
docker-compose restart # 重启工程中所有服务的容器
docker-compose restart nginx # 重启工程中指定服务的容器
 
start
docker-compose start启动服务容器。
docker-compose start # 启动工程中所有服务的容器
docker-compose start nginx # 启动工程中指定服务的容器
 
stop
docker-compose stop停止服务容器。
docker-compose stop # 停止工程中所有服务的容器
docker-compose stop nginx # 停止工程中指定服务的容器

 

停止并删除容器
docker-compose down nginx
  • docker-compose stop docker-compose stop命令将停止运行的容器,但不会删除它们。

  • docker-compose down docker-compose down命令将停止运行的容器,并且会删除已停止的容器以及已创建的所有网络。 我们可以down进一步迈出第一步,并添加-v标记以删除所有卷。这对于通过运行在环境中进行完全重置非常有用docker-compose down -v


Usage: docker compose down

Stop and remove containers, networks

Options:
--remove-orphans Remove containers for services not defined in the Compose file.
--rmi string Remove images used by services. "local" remove only images that don't have a
custom tag ("local"|"all")
-t, --timeout int Specify a shutdown timeout in seconds (default 10)
-v, --volumes volumes Remove named volumes declared in the volumes section of the Compose file
and anonymous volumes attached to containers.

 

 
 


docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]

命令选项[options]

  • -d 指定在后台以守护进程方式运行服务容器
  • -no-color 设置不使用颜色来区分不同的服务器的控制输出
  • -no-deps 设置不启动服务所链接的容器
  • -force-recreate 设置强制重新创建容器,不能与--no-recreate选项同时使用。
  • --no-create 若容器已经存在则不再重新创建,不能与--force-recreate选项同时使用。
  • --no-build 设置不自动构建缺失的服务镜像
  • --build 设置在启动容器前构建服务镜像
  • --abort-on-container-exit 若任何一个容器被停止则停止所有容器,不能与选项-d同时使用。
  • -t, --timeout TIMEOUT 设置停止容器时的超时秒数,默认为10秒。
  • --remove-orphans 设置删除服务中没有在compose文件中定义的容器
  • --scale SERVICE=NUM 设置服务运行容器的个数,此选项将会负载在compose中通过scale指定的参数。
 
 

 

Docker Compose 配置文件 docker-compose.yml 详解

 

build选项

简单使用
作用: compose启动时,构建一个新镜像并使用。

示例:

可以是绝对路径

build: /path/to/build/dir
 
也可以是相对路径

build: ./dir
 
2 context
说明:可以是git仓库的url也可以是绝对/相对路径

build:
context: ./dir

3. dockerfile
如果dockerfile文件名不是默认名,需要指定

build:
context: ./
dockerfile: Dockerfile-alternate
---

也可以使用context指定上下文路径,使用dockerfile基于上下文路径指定Dockerfile文件,使用args指定构建参数。例如:

 

version: "3.8"
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1

 

如果同时指定了build和image。例如:

build: ./dir
image: webapp:tag
Compose会在./dir目录下构建一个名为webapp,标签为tag的镜像。

使用docker stack deploy时的注意事项:在swarm mode下部署堆栈时,build配置项被忽略。因为docker stack命令不会在部署之前构建镜像。

 

docker  cp from使用

在 Docker 中,可以使用 Dockerfile 来定义如何构建一个镜像。其中,使用 COPY 指令可以将文件或目录从 Docker 宿主机复制到镜像中。

而在构建一个多阶段构建的 Docker 镜像时,可以在 Dockerfile 中使用另一个构建阶段的文件,例如可以从 builder 阶段的 Docker 镜像中复制文件或目录到当前阶段的镜像中。

具体步骤如下:

  1. 在 Dockerfile 中定义 builder 阶段
 
bash
# builder 阶段
FROM xxx AS builder
WORKDIR /app
COPY . .
RUN build_command
  1. 在 Dockerfile 中定义当前阶段,使用 builder 阶段中的文件或目录
 
bash
# 当前阶段
FROM yyy
WORKDIR /app
COPY --from=builder /app/dist /app

在第二步中,COPY --from=builder 指令表示从 builder 阶段的 Docker 镜像中复制文件或目录到当前阶段的镜像中。/app/dist 是 builder 阶段中生成的文件或目录,/app 是当前阶段中的目标路径。

使用这种方式,可以将 builder 阶段中生成的文件或目录复制到当前阶段的镜像中,从而避免了在当前阶段重新构建的过程中重复生成文件或目录,提高了构建效率。

 

depends_on

指定服务之间的依赖关系,解决服务启动先后顺序问题。指定服务之间的依赖关系,将会导致以下行为:

docker-compose up以依赖顺序启动服务。

docker-compose up SERVICE会自动包含SERVICE的依赖项。

docker-compose stop以依赖顺序停止服务。

例如以下示例:

version: "3.8"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

 

启动时会先启动db和redis,最后才启动web。在使用docker-compose up web启动web时,也会启动db和redis,因为在web服务中指定了依赖关系。在停止时也在web之前先停止db和redis。

使用depends_on时的注意事项:

服务不会等待该服务所依赖的服务完全启动之后才启动。例如上例,web不会等到db和redis完全启动之后才启动。

V3版不再支持的condition形式的depends_on。

V3版中,在swarm mode下部署堆栈时,depends_on配置项将被忽略。

 

 

volumes

指定所挂载的主机路径或数据卷名称。支持short和long两种格式的语法。可以将主机路径作为单个服务的一部分进行挂载,而无需在顶层volumes配置项中定义。但是如果想要在多个服务之间重用数据卷,需要在顶层volumes配置项中定义一个数据卷名称。

在3版的配置文件格式中的变化:在顶层volumes配置项中定义了数据卷名称并从每个服务的volumes列表中引用了该数据卷。这将替代早期版本的Compose配置文件格式中的volumes_from配置项。

short语法使用通用的[SOURCE:]TARGET[:MODE]格式,SOURCE可以是主机路径或数据卷名称,TARGET为挂载数据卷的容器路径,MODE可以为ro只读模式或rw读写模式(默认)。可以在主机上挂载相对路径,该路径相对于正在使用的Compose配置文件的目录进行扩展,相对路径应始终以.或..开头。例如:

volumes:
  #只指定一个路径,Docker会自动在创建一个数据卷(这个路径是容器内部的)
  - /var/lib/mysql
  #使用绝对路径挂载数据卷
  - /opt/data:/var/lib/mysql
  #使用基于Compose配置文件的相对路径作为数据卷挂载到容器
  - ./cache:/tmp/cache
  #使用基于root用户的相对路径作为数据卷挂载到容器
  - ~/configs:/etc/configs/:ro
  #使用已经存在命名的数据卷挂载到容器
  - datavolume:/var/lib/mysql

 

long语法支持配置以下short语法中不支持的附加字段:

 

 

当你的项目内容发生变化,特别是源代码或 Dockerfile,你可能想重新构建和启动你的 Docker Compose 服务。以下是几种常用的方法:

重新构建并启动所有服务
停止当前运行的 Docker Compose 服务:

docker-compose down

重新构建镜像:

docker-compose build

重新启动服务:

docker-compose up

或者,你也可以用单个命令完成这三个步骤:

docker-compose up --build

这个命令会自动重新构建镜像并重新启动服务。

 

仅重新构建并启动特定服务
如果你只想重新构建和启动一个特定的服务,你可以像这样做:

停止服务:

docker-compose stop <service_name>
1
重新构建服务:

docker-compose build <service_name>
1
重新启动服务:

docker-compose up -d <service_name>
1
其中,<service_name> 是你在 docker-compose.yml 文件中定义的服务名称。

或则一条命令:docker-compose up --build   <service_name>

 

https://www.jianshu.com/p/c51d92a9f91d