Docker Compose
docker-compose是一个Docker容器的管理工具集,可以很方便的创建和重建容器、执行启动和停止容器等操作
docker-compose常用命令
查看版本
1
| docker-compose --version
|
创建或重建、启动容器
删除停止运行的所有容器
启动所有容器
停止所有容器
列出运行的容器列表
查看正在运行的容器的输出日志
查看统一服务运行的容器个数
执行命令
docker-compose配置文件
核心就是docker-compose.yml,上述命令需要在该文件所在目录下执行
配置
build
配置构建时的选项,会利用它进行自动构建镜像
可以是一个路径,如
也可以是一个对象,用于指定Dockerfile和参数,如
1 2 3 4 5
| build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1
|
command
覆盖容器启动后默认执行的命令,如
1
| command: redis-server /home/redis/redis.conf
|
dns
配置dns服务器
1 2 3 4
| dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9
|
dns_search
配置DNS的搜索域
1 2 3 4
| dns_search: zhhll.icu dns: - dc1.zhhll.icu - dc2.zhhll.icu
|
environment
环境变量设置
1 2 3
| environment: MYSQL_DATABASE: 'study' MYSQL_ROOT_PASSWORD: password
|
env_file
从文件中获取环境变量,该env_file中的路径是Compose文件所在目录的相对路径
1 2 3 4 5
| env_file: .env
env_file: - ./common.env - ./apps/web.env
|
expose
暴露端口,只将端口暴露给连接的服务,而不暴露给宿主机
1 2 3
| expose: - "8080" - "8081"
|
external_links
连接到docker-compose.yml外部的容器
1 2 3
| external_links: - db_1:mysql - db_1:redis
|
image
指定镜像名或镜像id,如果本地不存在该镜像,Compose会尝试下载该镜像
links
连接到其他服务的容器,可以指定服务名称和服务别名,也可以只指定服务名称
1 2 3 4
| web: links: - redis - db:database
|
network_mode
设置网络模式
ports
暴露端口信息,可以指定范围
1 2 3 4
| ports: - "3000" - "3000-3005" - "8080:8080"
|
volumes
数据卷挂载路径,可以设置宿主主机路径(HOST:CONTAINER),也可以指定访问模式(HOST:CONTAINER:ro)
1 2 3 4 5
| volumes: - /var/lib/mysql - /opt/data:/var/lib/mysql - ./cache:/tmp/cache - datavolume:/var/lib/mysql
|
volumes_from
从另一个服务或容器挂载数据卷,可指定只读(ro)或者读写(rw),默认是读写
1 2 3
| volumes_from: - service_name:ro - container:container_name
|
完整示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| version : '3.8' services: nacos: container_name: nacos image: study/nacos/nacos-server:2 build: context: ./nacos environment: - MODE=standalone volumes: - ./nacos/logs/:/home/nacos/logs - ./nacos/conf/application.properties:/home/nacos/conf/application.properties ports: - "8848:8848" - "9848:9848" - "9849:9849" depends_on: - mysql mysql: container_name: mysql image: study/mysql:5 restart: always build: context: ./mysql ports: - "3306:3306" volumes: - ./mysql/conf:/etc/mysql/conf.d - ./mysql/logs:/logs - ./mysql/data:/var/lib/mysql command: [ 'mysqld', '--innodb-buffer-pool-size=80M', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--default-time-zone=+8:00', '--lower-case-table-names=1', '--default-authentication-plugin=mysql_native_password' ] environment: MYSQL_DATABASE: 'study' MYSQL_ROOT_PASSWORD: password redis: container_name: redis image: study/redis build: context: ./redis ports: - "6379:6379" volumes: - ./redis/conf/redis.conf:/home/redis/redis.conf - ./redis/data:/data command: redis-server /home/redis/redis.conf nginx: container_name: nginx image: study/nginx restart: always build: context: ./nginx ports: - "80:80" volumes: - ./nginx/html/dist:/home/work/www/study - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf - ./nginx/logs:/var/log/nginx - ./nginx/conf.d:/etc/nginx/conf.d
|