当前位置:   article > 正文

Docker Compose Yaml(Yml)_docker compose yaml文件

docker compose yaml文件

Docker Hub 镜像

一、docker-compose.yaml(yml)模板

Docker Hub mysql 镜像

  1. version: "3.9" # compose版本号
  2. services:
  3. db: # 单个服务标识(名字)
  4. container_name: mysql # 启动后的容器名称 相当于 --name 指定的名称
  5. image: mysql:8 # 镜像
  6. ports: # 端口映射,前者是宿主机端口,后者是容器端口
  7. - 10000:3306
  8. environment: # 指定启动的环境
  9. MYSQL_ROOT_PASSWORD: root
  10. MYSQL_DATABASE: realworld #自动创建名为realworld的数据库
  11. # env_file: # 使用文件进行代替
  12. # - ./mysql.env # mysql.env文件内容就是MYSQL_ROOT_PASSWORD=root
  13. volumes: # 表示目录映射关系(前者是宿主机目录,后者是dockker的db容器内的目录)
  14. - ./data:/var/lib/mysql # 容器内的数据持久化到主机当前目录(当前yaml文件所在目录)的data目录下
  15. depends_on:
  16. - redis
  17. restart:
  18. - on-failure # no:是默认的重启策略,在任何情况下都不会重启容器。
  19. # always:容器总是重新启动。
  20. # on-failure:在容器非正常退出时(退出状态非0),才会重启容器。
  21. # unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
  22. command: [
  23. '--character-set-server=utf8',
  24. '--collation-server=utf8_unicode_ci'
  25. ]
  26. healthcheck: # 健康检查
  27. test: ["CMD", "mysqladmin" ,"ping", "--protocol=tcp"]
  28. timeout: 20s
  29. interval: 1s
  30. retries: 20
  31. redis:
  32. image: redis:latest
  33. ports:
  34. - 10010:6379
  35. healthcheck:
  36. test: ["CMD", "redis-cli","ping"]
  37. interval: 20s
  38. timeout: 1s
  39. retries: 20
  40. memcached:
  41. image: memcached
  42. ports:
  43. - 10086:11211
  44. healthcheck:
  45. test: ["CMD", "echo", "stats", "|", "nc", "127.0.0.1", "11211"]
  46. interval: 20s
  47. timeout: 1s
  48. retries: 20

Mongo镜像

mongo默认是没有用户的,可以进行配置

首先创建宿主机挂载目录(选择性进行配置)

  1. #mongo数据目录
  2. mkdir /opt/dockerstore/mongo/data
  3. #mongo日志目录
  4. mkdir /opt/dockerstore/mongo/logs
  5. # 创建 mongodb 的配置文件,用于映射 docker 镜像内的配置文件
  6. mkdir /opt/dockerstore/mongo/mongod.conf
1、docker启动
 1)、使用docker启动
  1. # 拉取MongoDB最新版本的镜像
  2. docker pull mongo #执行不执行此条命令,docker run 都会自动拉取镜像
  3. # 由于命令太长,为了方便阅读,采用反斜线(\)换行
  4. docker run --name mymongo -p 27017:27017 \
  5. -v /app/mongo/data:/data/db \
  6. -v /app/mongo/logs:/var/log/mongodb \
  7. -v /app/mongo/mongod.conf:/etc/mongod.conf \
  8. -d mongo --auth
2)、使用docker compose启动 
  1. version: '3.9'
  2. services:
  3. mongodb: # 服务名称为 mongodb,该名称主要用于容器之间服务的 dns 解析
  4. image: mongo:latest # 使用的镜像名称
  5. restart: always # 当 docker 服务启动后,自动启动 mongodb 容器
  6. container_name: mongodb # 容器的名称为 mymongo
  7. ports:
  8. - "27017:27017"
  9. environment:
  10. TZ=Asia/Shanghai #将时区设置为Asia/Shanghai
  11. MONGO_INITDB_DATABASE=demo #将数据库名设置为demo
  12. MONGO_INITDB_ROOT_USERNAME: demo #将用户名设置为demo
  13. MONGO_INITDB_ROOT_PASSWORD: 111111 #将密码设置为111111
  14. volumes: # 宿主机硬盘目录映射容器内的路径
  15. - /opt/dockerstore/mongo/data:/data/db
  16. #- /opt/dockerstore/mongo/logs:/var/log/mongodb
  17. #- /root/mongo/mongod.conf:/etc/mongod.conf
  18. # 增加启动参数,--auth,表示连接 mongodb 需要用户名和密码
  19. #command:
  20. #- "--auth"
2、创建用户和库

首先了解mongo角色权限

role作用
read允许用户读取指定数据库
readWrite允许用户读写指定数据库
dbAdmin允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root只在admin数据库中可用。超级账号,超级权限

注意:clusterAdmin、readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、root角色只能用于admin数据库
否则报以下错误(demo是非admin数据库):

uncaught exception: Error: couldn’t add user: Could not find roles: userAdminAnyDatabase@rad_app, readWriteAnyDatabase@rad_app

执行命令进入mongo容器

docker exec -it mongodb /bin/bash

进入容器后连接mongo客户端 

mongo admin

进入客户端后创建用户 

  1. #使用demo库,如果不存在会创建
  2. use demo;
  3. #创建用户并赋予角色权限
  4. db.createUser({user:'demo_user',pwd:'123',roles:[{role:'userAdmin',db:'demo'},"readWrite"]});

解决方案

  1. 第一次启动容器,配置文件去除–auth命令
  2. 执行创建用户命令,创建用户和库
  3. 修改配置文件,加上–auth命令
  4. 重新启动容器,执行授权命令后就可操作数据库

至此,mongoDB安装并配置完成

Docker Hub Portainer镜像

使用portainer_data 卷时,必须先创建才能使用

  1. # 创建卷portainer_data(卷名自己定)
  2. $ docker volume create portainer_data
  3. portainer_data
  4. # 查询portainer_data卷的详细信息
  5. $ docker volume inspect portainer_data
  6. [
  7. {
  8. "CreatedAt": "2022-11-09T15:39:45+08:00",
  9. "Driver": "local",
  10. "Labels": {},
  11. "Mountpoint": "/var/lib/docker/volumes/portainer_data/_data", # 创建portainer_data卷默认所在位置
  12. "Name": "portainer_data",
  13. "Options": {},
  14. "Scope": "local"
  15. }
  16. ]
  1. version: "3.9" # compose版本
  2. services: # 加入服务
  3. portainer: # 单个服务标识(名字)
  4. container_name: portainer # 启动后的容器名称 相当于 --name 指定的名称
  5. image: portainer/portainer-ce:latest # 镜像
  6. ports:
  7. - 8000:8000 # 端口映射,前者是宿主机端口,后者是容器端口
  8. - 9443:9443
  9. volumes: # 指定对应的数据卷 前者是宿主机目录,后者是容器目录
  10. - /var/run/docker.sock:/var/run/docker.sock # 数据文件挂载
  11. - /var/lib/docker/volumes/portainer_data:/data # Portainer Server用于存储其数据库的卷
  12. restart: always

Docker compose常用命令解释如下:

Docker compose常用命令
指令    说明
up

          docker compose up -f yml文件名 -d

                                                                      #  启动所有的docker compose服务
                                                                      #  -f :表示指定启动的文件名

                                                                      #  -d:表示后台启动

down

           docker compose down                       # 停止服务

exec

           docker compose exec 服务id bash                  # 进入容器

ps

           docker compose ps                            # 查看所有运行的服务

restart

           docker compose restart 服务id     

                                                                      #  重启所有服务 

                                                                      #  加上服务id 表示重启单个服务

rm

           docker compose rm -fv 服务id

                                                                      #  删除服务
                                                                      #  加服务id 删除单个服务
                                                                      #  -fv 强制删除(v 包括数据卷)

start

           docker compose start 服务id                      # 启动服务

stop

           docker compose stop 服务id                      # 停止服务

top

           docker compose top 服务id             # 查看容器内运行的进程

pause

           docker compose pause 服务id                   # 暂停服务

unpuase

           docker-compose unpause 服务id              #  开启服务

logs

           docker-compose logs 服务id                     #  查看日志

可以通过 docker compose --help 从命令行运行来查看命令信息。

  1. Define and run multi-container applications with Docker.
  2. #使用示例
  3. Usage:
  4. docker compose [-f <arg>...] [--profile <name>...] [options] [COMMAND] [ARGS...]
  5. docker compose -h|--help
  6. Options:
  7. -f, --file FILE Specify an alternate compose file
  8. (default: docker-compose.yml)
  9. -p, --project-name NAME Specify an alternate project name
  10. (default: directory name)
  11. --profile NAME Specify a profile to enable
  12. --verbose Show more output
  13. --log-level LEVEL DEPRECATED and not working from 2.0 - Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
  14. --no-ansi Do not print ANSI control characters
  15. -v, --version Print version and exit
  16. -H, --host HOST Daemon socket to connect to
  17. --tls Use TLS; implied by --tlsverify
  18. --tlscacert CA_PATH Trust certs signed only by this CA
  19. --tlscert CLIENT_CERT_PATH Path to TLS certificate file
  20. --tlskey TLS_KEY_PATH Path to TLS key file
  21. --tlsverify Use TLS and verify the remote
  22. --skip-hostname-check Don't check the daemon's hostname against the
  23. name specified in the client certificate
  24. --project-directory PATH Specify an alternate working directory
  25. (default: the path of the Compose file)
  26. --compatibility If set, Compose will attempt to convert deploy
  27. keys in v3 files to their non-Swarm equivalent
  28. Commands:
  29. build Build or rebuild services
  30. bundle Generate a Docker bundle from the Compose file
  31. config Validate and view the Compose file
  32. create Create services
  33. down Stop and remove containers, networks, images, and volumes
  34. events Receive real time events from containers
  35. exec Execute a command in a running container
  36. help Get help on a command
  37. images List images
  38. kill Kill containers
  39. logs View output from containers
  40. pause Pause services
  41. port Print the public port for a port binding
  42. ps List containers
  43. pull Pull service images
  44. push Push service images
  45. restart Restart services
  46. rm Remove stopped containers
  47. run Run a one-off command
  48. scale Set number of containers for a service
  49. start Start services
  50. stop Stop services
  51. top Display the running processes
  52. unpause Unpause services
  53. up Create and start containers
  54. version Show the Docker Compose version information

使用 Docker Compose 二进制文件 ,

docker compose [-f <arg>...] [options] [COMMAND] [ARGS...]

来构建和管理 Docker 容器中的多个服务。

示例:

docker compose -f docker-compose.yml -f docker-compose.admin.yml run backup_db
模板完成后,可运行以下命令
docker compose up -d  #后台启动

使用use mysql;命令选择数据库后,使用以下命令的其中之一查看用户消息情况

  1. $select host,user from user;
  2. $select Host,User,plugin from user;
  3. $select host,user,authentication_string from user\G
  4. eg:
  5. mysql> use mysql;
  6. Reading table information for completion of table and column names
  7. You can turn off this feature to get a quicker startup with -A
  8. Database changed
  9. mysql> select Host,User,plugin from user;
  10. +-----------+------------------+-----------------------+
  11. | Host | User | plugin |
  12. +-----------+------------------+-----------------------+
  13. | % | root | caching_sha2_password |
  14. | localhost | mysql.infoschema | caching_sha2_password |
  15. | localhost | mysql.session | caching_sha2_password |
  16. | localhost | mysql.sys | caching_sha2_password |
  17. | localhost | root | caching_sha2_password |
  18. +-----------+------------------+-----------------------+
  19. 5 rows in set (0.00 sec)

注:docker-compose yaml文件配置时配置了密码则启动mysql之后,Navicat或beekeeper studio 社区版直接用密码就可以进行远程连接,不需要更改加密方式。如果是从挂起的虚拟机中恢复过来的,则用Navicat远程连接不上,会出现10061或10060错误,解决办法:重启虚拟机即可连接成功!!!

以下命令参考使用

  1. 1、docker exec -it 容器ID/容器名 bash #进入mysql的docker容器中
  2. 2、mysql -uroot -p #输入密码进入mysql
  3. 3、use mysql;
  4. 4、ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; #将验证方法从auth_socket修改成mysql_native_password,并设置密码,123456 就是密码
  5. 5、update user set host = '%' where user = 'root'; #若不允许从远程连接,只能在本地连接。登入mysql后,更改"mysql" 数据库里的 "user" 表里的 "host"项,从"localhost"改称"%"
  6. 6、GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; #这里表示赋予该用户所有数据库所有表权限(*.*表示所有表,%表示所有IP地址)
  7. 7、FLUSH PRIVILEGES; #刷新权限

二、docker容器命令

  1. docker exec -it 容器名/容器ID /bin/bash #进入容器
  2. # 从容器内 退出到自己服务器中 需注意 两个退出命令的区别
  3. #-----直接退出 未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭
  4. exit
  5. # 优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭
  6. Ctrl + p + q
  7. docker start 容器ID/容器名 # 启动容器
  8. docker stop 容器名/容器ID # 停止之前运行的容器
  9. docker restart 容器ID/容器名 # 重启容器
  10. docker kill 容器ID/容器名
  11. docker rm -f 容器名/容器ID # 删除一个容器
  12. docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID # 删除多个容器 空格隔开要删除的容器名或容器ID
  13. docker rm -f $(docker ps -aq) # 删除全部容器
  14. #容器文件拷贝 —无论容器是否开启 都可以进行拷贝
  15. # docker cp 容器ID/名称:文件路径 要拷贝到外部的路径 | 要拷贝到外部的路径 容器ID/名称:文件路径
  16. # 从容器内 拷出
  17. docker cp 容器ID/名称: 容器内路径 容器外路径
  18. # 从外部 拷贝文件到容器内
  19. docker cp 容器外路径 容器ID/名称: 容器内路径
  20. docker load -i 镜像保存文件位置
  21. #可将以下命令写成脚本运行
  22. sudo docker rm -f $(sudo docker ps -aq)
  23. sudo docker network prune
  24. sudo docker volume prune
  25. docker rmi --force `docker images | grep dev-peer | awk '{print $3}'`

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/74182
推荐阅读
相关标签
  

闽ICP备14008679号