compose : 批量管理容器的操作,需要一个 compose.yaml 文件

示例:mysql + wordpress 搭建一个建议的个人博客系统

传统做法:

1. 创建自定义网络

docker network create blog

2. 启动 mysql 并配置环境变量等

docker run -d -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=wordpress \
-v mysql-data:/var/lib/mysql \
-v /app/myconf:/etc/mysql/conf.d \
--restart always --name mysql \
--network blog \
mysql:8.0

3. 启动 wordpress 并配置环境变量等,注意和 mysql 的容器加入同一网络

docker run -d -p 8080:80 \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=123456 \
-e WORDPRESS_DB_NAME=wordpress \
-v wordpress:/var/www/html \
--restart always --name wordpress-app \
--network blog \
wordpress

这一步完成后就可以通过 ip a 来查看自己的 ip 并在外界的浏览器输入 ip/8080 来访问wordpress了。但是如果其他人也想实现这个操作,不仅要记住这么多环境变量, 还要重复输入这么多操作,太麻烦了,这个时候,compose就可以起作用了。

compose做法:

1. 在 compose.yaml 文件中配置好相关文件

2. 进入 vim 编写 compose.yaml 文件内容,语言格式可以去详细搜一下

name: myblog
services:
  mysql:
    container_name: mysql
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=wordpress
    volumes:
      - mysql-data:/var/lib/mysql
      - /app/myconf:/etc/mysql/conf.d
    restart: always
    networks: 
      - blog

  wordpress:
    container_name: wordpress-app
    image: wordpress
    ports:
      - "8080:80"
    environment:
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=123456
      - WORDPRESS_DB_NAME=wordpress 
    volumes:
      - wordpress:/var/www/html
    restart: always
    networks:
      - blog
    depends_on:
      - mysql

volumes:
  mysql-data:
  wordpress:

networks:
  blog:

3.  使用命令执行yaml文件内容

docker compose -f compose.yaml up -d

可以发现容器和网络,卷等全部有了

// 下线命令,会移除容器,网络;但是不会移除卷
docker compose -f compose.yaml down 

// 可以添加参数来指定是否删除卷,镜像之类。下面就是删除所有镜像和卷
docker compose -f compose.yaml down --rmi all -v

补充:

-d:后台运行容器

-p:端口映射(宿主机端口:容器端口)

-v:挂载目录或文件(宿主机路径:容器路径)

-e:设置环境变量

-it:交互式运行容器(分配终端并保持输入)

--name:指定容器名称

--rm:容器退出时自动删除

-h:设置容器主机名

--network:指定容器网络

--restart:设置容器重启策略

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐