docker-compose 介绍安装 管理容器

 

 

 

 

Docker Compose 容器单机编排

Docker Compose 介绍

在宿主机启动较多的容器时候,如果仍用手动执行docker run 启动每个容器不仅很麻烦而且因为有依
赖关系等导致容易出错,而且无法不方便分类管理
可以使用 docker 单机多容器的编排工具 docker-compose 解决
docker-compose 项目是Docker 官方的开源项目,负责实现对Docker 容器集群的快速编排,可以用它
同时管理多个容器
比如: 可以解决容器之间的依赖关系,就像启动一个nginx 前端服务的时候会调用后端的 tomcat,那就
得先启动tomcat,但是启动tomcat 容器还需要依赖MySQL数据库,那就还得先启动MySQL,dockercompose 可以用来解决这样的嵌套依赖关系,并且可以替代docker命令对容器进行创建、启动和停止
等手工的操作
因此如果说docker命令就像linux的命令,docker-compose.yml 文件就像shell脚本,可以自动的执行容
器批量操作,从而实现自动化的容器管理,也或者说docker命令相当于ansible命令,那么docker
compose文件,就相当于ansible-playbook的yaml文件
github地址: https://github.com/docker/compose
官方地址: https://docs.docker.com/compose/

 

安装和准备

安装 Docker Compose

方法2: 离线安装,直接从github或国内镜像站下载安装对应版本
参看说明: https://github.com/docker/compose/releases
此方法安装版本可方便指定,推荐方法,但网络下载较慢

wget https://github.com/docker/compose/releases/download/v5.3.0/docker-compose-linux-x86_64

#从国内镜像站下载

wget https://get.daocloud.io/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m) 

 mv docker-compose-Linux-x86_64 docker-compose

chmod +x docker-compose 

mv docker-compose  /usr/local/bin/

ldd /usr/local/bin/docker-compose

docker-compose version

 

查看命令格式
官方文档: https://docs.docker.com/compose/reference/

docker-compose --help
Define and run multi-container applications with Docker.
Usage:
 docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
 docker-compose -h|--help
#选项说明:  
-f,–file FILE #指定Compose 模板文件,默认为docker-compose.yml|yaml
-p,–project-name NAME #指定项目名称,默认将使用当前所在目录名称作为项目名。
--verbose   #显示更多输出信息
--log-level LEVEL    #定义日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL) 
--no-ansi #不显示ANSI 控制字符
-v, --version #显示版本

 

#以下为命令选项,需要在docker-compose.yml|yaml 文件所在在目录里执行 
config  -q #查看当前配置,没有错误不输出任何信息 
up #创建并启动容器
build  #构建镜像 
bundle #从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker Bundle 备
份文件
create #创建服务 
down #停止和删除所有容器、网络、镜像和卷 
events #从容器接收实时事件,可以指定json 日志格式
exec #进入指定容器进行操作 
help #显示帮助细信息 
images #显示镜像信息
kill #强制终止运行中的容器 
logs #查看容器的日志 
pause #暂停服务 
port #查看端口 
ps #列出容器
pull #重新拉取镜像,镜像发生变化后,需要重新拉取镜像
push #上传镜像 
restart #重启服务
rm #删除已经停止的服务 
run #一次性运行容器 
scale  #设置指定服务运行的容器个数,新版已废弃
start #启动服务
stop #停止服务
top #显示容器运行状态 
unpause #取消暂定

 

#默认查找的文件 docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml

 

docker compose 文件格式

官方文档: https://docs.docker.com/compose/compose-file/
docker compose 文件是一个yaml格式的文件,所以注意行首的缩进很严格
注意: docker compose 其实也支持json文件格式, 比如: docker compose -f docker-compose.json up

https://docs.docker.com/compose/faq/#can-i-use-json-instead-of-yaml-for-mycompose-file

 

默认docker-compose命令会调用当前目录下的docker-compose.yml的文件,因此一般执行dockercompose命令前先进入docker-compose.yml文件所在目录

 

实战案例: docker run 和 Docker Compose 文件相互转换
利用网站将docker 命令自动生成 Docker Compose

https://www.composerize.com/

image

 利用网站 Docker Compose 文件转换为 docker run 命令

https://www.decomposerize.com/

image

 




docker run --network wordpress-net -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=123456 --name mysql -d   --restart=always registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle

 

docker run -d  -p 80:80 --network wordpress-net --name wordpress --restart=always  registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache

 

mkdir wordpress

cat docker-compose.yml

name: wordpress
services:
    mysql:
        networks:
            - wordpress-net
        environment:
            - MYSQL_ROOT_PASSWORD=123456
            - MYSQL_DATABASE=wordpress
            - MYSQL_USER=wordpress
            - MYSQL_PASSWORD=123456
        container_name: mysql
        restart: always
        image: registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle
    wordpress:
        ports:
            - 80:80
        networks:
            - wordpress-net
        container_name: wordpress
        restart: always
        image: registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache
networks:
    wordpress-net

 

#生成自定义网络,网段IP自动分配置
#networks:
   #wordpress-net:

 

语法检测

docker-compose config -q

docker-compose up -d

docker-compose ps

[root@master2 wordpress]# docker-compose ps
NAME        IMAGE                                                                   COMMAND                  SERVICE     CREATED         STATUS         PORTS
mysql       registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle       "docker-entrypoint.s…"   mysql       4 seconds ago   Up 4 seconds   3306/tcp, 33060/tcp
wordpress   registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache   "docker-entrypoint.s…"   wordpress   4 seconds ago   Up 4 seconds   0.0.0.0:80->80/tcp, [::]:80->80/tcp
[root@master2 wordpress]# 

docker-compose logs -f mysql

docker-compose logs  mysql

 docker-compose images

[root@master2 wordpress]# docker-compose images
CONTAINER           REPOSITORY                                                TAG                 PLATFORM            IMAGE ID            SIZE                CREATED
mysql               registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql       8.0.29-oracle       linux/amd64         44f98f4dd825        132MB               3 years ago
wordpress           registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress   php8.2-apache       linux/amd64         adced536588e        241MB               2 years ago

 

[root@master2 wordpress]# docker network ls
NETWORK ID     NAME                      DRIVER    SCOPE
10b44d3d7b5a   bridge                    bridge    local
c169b2366f46   host                      host      local
29bfa655c46d   none                      null      local
52bd893c60f7   wordpress-prod-net        bridge    local
a83da1ff9540   wordpress-test-net        bridge    local
68e9ddf327d3   wordpress_wordpress-net   bridge    local

 

docker network inspect  wordpress_wordpress-net

 

自定义网络

wordpress02

name: wordpress02
services:
    mysql:
        networks:
            - wordpress-net
        environment:
            - MYSQL_ROOT_PASSWORD=123456
            - MYSQL_DATABASE=wordpress
            - MYSQL_USER=wordpress
            - MYSQL_PASSWORD=123456
        container_name: mysql02
        restart: always
        image: registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle
    wordpress:
        ports:
            - 81:80
        networks:
            - wordpress-net
        container_name: wordpress02
        restart: always
        image: registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache
networks:
    wordpress-net:
        ipam:
          driver: default
          config:
          - subnet: 172.27.0.0/24

 

 docker-compose up -d

[root@master2 wordpress02]# docker-compose ps
NAME          IMAGE                                                                   COMMAND                  SERVICE     CREATED          STATUS          PORTS
mysql02       registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle       "docker-entrypoint.s…"   mysql       34 seconds ago   Up 33 seconds   3306/tcp, 33060/tcp
wordpress02   registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache   "docker-entrypoint.s…"   wordpress   34 seconds ago   Up 33 seconds   0.0.0.0:81->80/tcp, [::]:81->80/tcp

 

[root@master2 wordpress02]# docker network ls
NETWORK ID     NAME                        DRIVER    SCOPE
10b44d3d7b5a   bridge                      bridge    local
c169b2366f46   host                        host      local
29bfa655c46d   none                        null      local
543f4defe4ed   wordpress02_wordpress-net   bridge    local
52bd893c60f7   wordpress-prod-net          bridge    local
a83da1ff9540   wordpress-test-net          bridge    local
68e9ddf327d3   wordpress_wordpress-net     bridge    local

 

docker network inspect  wordpress02_wordpress-net 

[root@master2 wordpress02]# docker ps -a
CONTAINER ID   IMAGE                                                                   COMMAND                  CREATED          STATUS          PORTS                                 NAMES
72ae9538356a   registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle       "docker-entrypoint.s…"   2 minutes ago    Up 2 minutes    3306/tcp, 33060/tcp                   mysql02
6465b6f04476   registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache   "docker-entrypoint.s…"   2 minutes ago    Up 2 minutes    0.0.0.0:81->80/tcp, [::]:81->80/tcp   wordpress02
890c8dbece2b   registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache   "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes   0.0.0.0:80->80/tcp, [::]:80->80/tcp   wordpress
66aa839911f2   registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle       "docker-entrypoint.s…"   10 minutes ago   Up 10 minutes   3306/tcp, 33060/tcp                   mysql
[root@master2 wordpress02]# 

docker-compose down

[root@master2 wordpress02]# docker ps -a
CONTAINER ID   IMAGE                                                                   COMMAND                  CREATED          STATUS          PORTS                                 NAMES
890c8dbece2b   registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache   "docker-entrypoint.s…"   11 minutes ago   Up 11 minutes   0.0.0.0:80->80/tcp, [::]:80->80/tcp   wordpress
66aa839911f2   registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle       "docker-entrypoint.s…"   11 minutes ago   Up 11 minutes   3306/tcp, 33060/tcp                   mysql
[root@master2 wordpress02]# 

 

docker-compose -f /data/wordpress/docker-compose.yml ps

[root@master2 wordpress02]# docker-compose -f /data/wordpress/docker-compose.yml ps
NAME        IMAGE                                                                   COMMAND                  SERVICE     CREATED          STATUS          PORTS
mysql       registry.cn-beijing.aliyuncs.com/wangxiaochun/mysql:8.0.29-oracle       "docker-entrypoint.s…"   mysql       13 minutes ago   Up 13 minutes   3306/tcp, 33060/tcp
wordpress   registry.cn-beijing.aliyuncs.com/wangxiaochun/wordpress:php8.2-apache   "docker-entrypoint.s…"   wordpress   13 minutes ago   Up 13 minutes   0.0.0.0:80->80/tcp, [::]:80->80/tcp

docker-compose -f /data/wordpress/docker-compose.yml down

 

 

 
posted @ 2026-07-04 10:09  minger_lcm  阅读(9)  评论(0)    收藏  举报