一、安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#测试安装结果
docker-compose --version    #installed test
#卸载操作
sudo rm /usr/local/bin/docker-compose  #Uninstallation

二、使用

任意选择一个目录,新建docker-compose.yml文件

version: "3.6"
services:
  nginx-web:
    image: nginx:latest
    container_name: nginx-web
    ports:
      - '8082:80'
    volumes:
      - '~/Public/nginx/www:/usr/share/nginx/html'
      - '~/Public/nginx/logs:/var/log/nginx'
      - '~/Public/nginx/conf:/etc/nginx/conf.d'
    networks:
      - my-network
  safe-lock:
    # image: safe-lock:v1
    image: java:8
    container_name: my-safe-lock
    # build:
    #   context: /root/Public/Applications/safe.app
    #   dockerfile: Dockerfile
    ports:
      - '8088:8080'
    volumes:
      - '/root/Public/Applications/safe.app:/jar'
    entrypoint:
      - "java"
      - "-Djava.security.egd=file:/dev/./urandom"
      - "-jar"
      - "/jar/app.jar"
    networks:
      - my-network
  sdk:
    image: sdk:v2
    container_name: my-sdk
    build: /root/Public/Applications/shield.app # 如果目录内只有一个Dockerfile,可以省略 context 和 dockerfile
    ports:
      - '8098:8099'
    volumes:
      - '/root/Public/Applications/shield.app:/jar'
    networks:
      - my-network
  redis:
    image: redis
    container_name: redis
    ports:
      - '6379:6379'
    volumes:
      - '~/Public/redis/data:/data'
      - '~/Public/redis/conf/redis.conf:/etc/redis/redis.conf'
    command: redis-server /etc/redis/redis.conf
    networks:
      - my-network
  mariadb:
    image: bitnami/mariadb:latest
    volumes:
      - /root/wp_yunlan/mariadb:/home/user/mariadb
  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=wordpress
  wordpress:
    image: wordpress:latest
    depends_on:
      - mysql
      - nginx
    environment: # 定义环境变量,名称已经在镜像中
      - WORDPRESS_DB_PASSWORD=123456
      - WORDPRESS_USERNAME=neptunemoon
      - WORDPRESS_PASSWORD=123123
    ports:
      - '8080:80'
      - '8081:443'
    working_dir: /var/www/html
    volumes:
      - wordpress:/var/www/html
networks: # 虚拟网络
  my-network:
    external: true # 定义为外部资源,意味着已经在外部 docker 中存在,使用外部的
    # 通过运行docker network create 命令部署
# 设置默认网络,与上面的networks.my-network.external 排斥
networks:
  default:
    external:
      name: my-network
# 如果出现警告,可能是因为 network.external.name 在新版已经被替换为 network.name 了,使用下面的:
networks:
  default:
    name: my-network
  • services标签下表示有4个容器,容器名可以自定义。

$ docker-compose up启动$ docker-compose stop停止$ docker-compose rm删除( ps: 在选择的目录下,会自动选择你新建的docker-compose.yml文件,不用指定 )

$ docker-compose [-f docker-compose.yml] up -d #创建并启动容器,后台运行【文件可以指定,当前目录下可以省略】
$ docker-compose [-f docker-compose.yml] down #停止并删除服务【当前目录下可省略-f】
$ docker-compose stop wordpress #停止容器运行,wordpress是yml中的一个容器
$ docker-compose rm wordpress #删除其中一个容器
$ docker-compose start wordpress #启动容器
$ docker-compose restart nginx
$ docker-compose logs --tail 10 nginx
$ docker-compose port nginx
$ docker-compose kill nginx #杀掉容器
$ docker-compose build nginx #构建或重建服务
  • depends_on: 依赖项,启动顺序不重要,主要根据依赖去先启动;
  • environment: 环境变量;
  • ports: 端口映射;
  • volumes: 文件映射;
  • image: 镜像,同时可以结合【build】来使用自定义容器;
...
service: #这里举一个开源项目的例子
...
  jeecg-boot-system:
    build:
      context: ./jeecg-boot-module-system   # 这里是 Dockerfile 所在的文件夹
    restart: always
    container_name: jeecg-boot-system
    image: jeecg-boot-system  # 这里指向的是上面build构建的镜像
    ports:
      - 8080:8080
...

三、注意事项

  • 这里着重提一下image如果是自定义Dockerfile,必须要使用build -> context: ./xxxx指定Dockerfile文件路径,然后使用docker-compose up -d --build [标签名]运行(等同于docker build -t 镜像名 ./Dockefile构建好镜像,再运行)
  • (建议) 多使用docker-compose;
  • (建议) 数据请尽量用volumes放在容器外;
  • (建议) 不要所有服务放在一个容器里;

(完)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐