赞
踩
- version: "3.9" # compose版本号
- services:
- db: # 单个服务标识(名字)
- container_name: mysql # 启动后的容器名称 相当于 --name 指定的名称
- image: mysql:8 # 镜像
- ports: # 端口映射,前者是宿主机端口,后者是容器端口
- - 10000:3306
- environment: # 指定启动的环境
- MYSQL_ROOT_PASSWORD: root
- MYSQL_DATABASE: realworld #自动创建名为realworld的数据库
- # env_file: # 使用文件进行代替
- # - ./mysql.env # mysql.env文件内容就是MYSQL_ROOT_PASSWORD=root
- volumes: # 表示目录映射关系(前者是宿主机目录,后者是dockker的db容器内的目录)
- - ./data:/var/lib/mysql # 容器内的数据持久化到主机当前目录(当前yaml文件所在目录)的data目录下
- depends_on:
- - redis
- restart:
- - on-failure # no:是默认的重启策略,在任何情况下都不会重启容器。
- # always:容器总是重新启动。
- # on-failure:在容器非正常退出时(退出状态非0),才会重启容器。
- # unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
- command: [
- '--character-set-server=utf8',
- '--collation-server=utf8_unicode_ci'
- ]
- healthcheck: # 健康检查
- test: ["CMD", "mysqladmin" ,"ping", "--protocol=tcp"]
- timeout: 20s
- interval: 1s
- retries: 20
-
- redis:
- image: redis:latest
- ports:
- - 10010:6379
- healthcheck:
- test: ["CMD", "redis-cli","ping"]
- interval: 20s
- timeout: 1s
- retries: 20
-
- memcached:
- image: memcached
- ports:
- - 10086:11211
- healthcheck:
- test: ["CMD", "echo", "stats", "|", "nc", "127.0.0.1", "11211"]
- interval: 20s
- timeout: 1s
- retries: 20
mongo默认是没有用户的,可以进行配置
首先创建宿主机挂载目录(选择性进行配置)
- #mongo数据目录
- mkdir /opt/dockerstore/mongo/data
- #mongo日志目录
- mkdir /opt/dockerstore/mongo/logs
- # 创建 mongodb 的配置文件,用于映射 docker 镜像内的配置文件
- mkdir /opt/dockerstore/mongo/mongod.conf
- # 拉取MongoDB最新版本的镜像
- docker pull mongo #执行不执行此条命令,docker run 都会自动拉取镜像
- # 由于命令太长,为了方便阅读,采用反斜线(\)换行
- docker run --name mymongo -p 27017:27017 \
- -v /app/mongo/data:/data/db \
- -v /app/mongo/logs:/var/log/mongodb \
- -v /app/mongo/mongod.conf:/etc/mongod.conf \
- -d mongo --auth
- version: '3.9'
-
- services:
- mongodb: # 服务名称为 mongodb,该名称主要用于容器之间服务的 dns 解析
- image: mongo:latest # 使用的镜像名称
- restart: always # 当 docker 服务启动后,自动启动 mongodb 容器
- container_name: mongodb # 容器的名称为 mymongo
- ports:
- - "27017:27017"
- environment:
- TZ=Asia/Shanghai #将时区设置为Asia/Shanghai
- MONGO_INITDB_DATABASE=demo #将数据库名设置为demo
- MONGO_INITDB_ROOT_USERNAME: demo #将用户名设置为demo
- MONGO_INITDB_ROOT_PASSWORD: 111111 #将密码设置为111111
-
- volumes: # 宿主机硬盘目录映射容器内的路径
- - /opt/dockerstore/mongo/data:/data/db
- #- /opt/dockerstore/mongo/logs:/var/log/mongodb
- #- /root/mongo/mongod.conf:/etc/mongod.conf
-
- # 增加启动参数,--auth,表示连接 mongodb 需要用户名和密码
- #command:
- #- "--auth"
首先了解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
进入客户端后创建用户
- #使用demo库,如果不存在会创建
- use demo;
- #创建用户并赋予角色权限
- db.createUser({user:'demo_user',pwd:'123',roles:[{role:'userAdmin',db:'demo'},"readWrite"]});
至此,mongoDB安装并配置完成
使用portainer_data 卷时,必须先创建才能使用
- # 创建卷portainer_data(卷名自己定)
- $ docker volume create portainer_data
- portainer_data
- # 查询portainer_data卷的详细信息
- $ docker volume inspect portainer_data
- [
- {
- "CreatedAt": "2022-11-09T15:39:45+08:00",
- "Driver": "local",
- "Labels": {},
- "Mountpoint": "/var/lib/docker/volumes/portainer_data/_data", # 创建portainer_data卷默认所在位置
- "Name": "portainer_data",
- "Options": {},
- "Scope": "local"
- }
- ]
- version: "3.9" # compose版本
- services: # 加入服务
- portainer: # 单个服务标识(名字)
- container_name: portainer # 启动后的容器名称 相当于 --name 指定的名称
- image: portainer/portainer-ce:latest # 镜像
- ports:
- - 8000:8000 # 端口映射,前者是宿主机端口,后者是容器端口
- - 9443:9443
- volumes: # 指定对应的数据卷 前者是宿主机目录,后者是容器目录
- - /var/run/docker.sock:/var/run/docker.sock # 数据文件挂载
- - /var/lib/docker/volumes/portainer_data:/data # Portainer Server用于存储其数据库的卷
- restart: always
Docker compose常用命令解释如下:
指令 | 说明 |
---|---|
up | docker compose up -f yml文件名 -d # 启动所有的docker compose服务 # -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 # 删除服务 |
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
从命令行运行来查看命令信息。
- Define and run multi-container applications with Docker.
-
- #使用示例
- Usage:
- docker compose [-f <arg>...] [--profile <name>...] [options] [COMMAND] [ARGS...]
- docker compose -h|--help
-
- Options:
- -f, --file FILE Specify an alternate compose file
- (default: docker-compose.yml)
- -p, --project-name NAME Specify an alternate project name
- (default: directory name)
- --profile NAME Specify a profile to enable
- --verbose Show more output
- --log-level LEVEL DEPRECATED and not working from 2.0 - Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
- --no-ansi Do not print ANSI control characters
- -v, --version Print version and exit
- -H, --host HOST Daemon socket to connect to
-
- --tls Use TLS; implied by --tlsverify
- --tlscacert CA_PATH Trust certs signed only by this CA
- --tlscert CLIENT_CERT_PATH Path to TLS certificate file
- --tlskey TLS_KEY_PATH Path to TLS key file
- --tlsverify Use TLS and verify the remote
- --skip-hostname-check Don't check the daemon's hostname against the
- name specified in the client certificate
- --project-directory PATH Specify an alternate working directory
- (default: the path of the Compose file)
- --compatibility If set, Compose will attempt to convert deploy
- keys in v3 files to their non-Swarm equivalent
-
- Commands:
- build Build or rebuild services
- bundle Generate a Docker bundle from the Compose file
- config Validate and view the Compose file
- create Create services
- down Stop and remove containers, networks, images, and volumes
- events Receive real time events from containers
- exec Execute a command in a running container
- help Get help on a command
- images List images
- kill Kill containers
- logs View output from containers
- pause Pause services
- port Print the public port for a port binding
- ps List containers
- pull Pull service images
- push Push service images
- restart Restart services
- rm Remove stopped containers
- run Run a one-off command
- scale Set number of containers for a service
- start Start services
- stop Stop services
- top Display the running processes
- unpause Unpause services
- up Create and start containers
- 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;命令选择数据库后,使用以下命令的其中之一查看用户消息情况
- $select host,user from user;
- $select Host,User,plugin from user;
- $select host,user,authentication_string from user\G
-
- eg:
- mysql> use mysql;
- Reading table information for completion of table and column names
- You can turn off this feature to get a quicker startup with -A
-
- Database changed
- mysql> select Host,User,plugin from user;
- +-----------+------------------+-----------------------+
- | Host | User | plugin |
- +-----------+------------------+-----------------------+
- | % | root | caching_sha2_password |
- | localhost | mysql.infoschema | caching_sha2_password |
- | localhost | mysql.session | caching_sha2_password |
- | localhost | mysql.sys | caching_sha2_password |
- | localhost | root | caching_sha2_password |
- +-----------+------------------+-----------------------+
- 5 rows in set (0.00 sec)
注:docker-compose yaml文件配置时配置了密码,则启动mysql之后,Navicat或beekeeper studio 社区版直接用密码就可以进行远程连接,不需要更改加密方式。如果是从挂起的虚拟机中恢复过来的,则用Navicat远程连接不上,会出现10061或10060错误,解决办法:重启虚拟机即可连接成功!!!
以下命令参考使用
- 1、docker exec -it 容器ID/容器名 bash #进入mysql的docker容器中
- 2、mysql -uroot -p #输入密码进入mysql
- 3、use mysql;
- 4、ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; #将验证方法从auth_socket修改成mysql_native_password,并设置密码,123456 就是密码
- 5、update user set host = '%' where user = 'root'; #若不允许从远程连接,只能在本地连接。登入mysql后,更改"mysql" 数据库里的 "user" 表里的 "host"项,从"localhost"改称"%"
- 6、GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; #这里表示赋予该用户所有数据库所有表权限(*.*表示所有表,%表示所有IP地址)
- 7、FLUSH PRIVILEGES; #刷新权限
- docker exec -it 容器名/容器ID /bin/bash #进入容器
- # 从容器内 退出到自己服务器中 需注意 两个退出命令的区别
- #-----直接退出 未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭
- exit
- # 优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭
- Ctrl + p + q
-
-
- docker start 容器ID/容器名 # 启动容器
- docker stop 容器名/容器ID # 停止之前运行的容器
- docker restart 容器ID/容器名 # 重启容器
- docker kill 容器ID/容器名
-
-
- docker rm -f 容器名/容器ID # 删除一个容器
- docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID # 删除多个容器 空格隔开要删除的容器名或容器ID
- docker rm -f $(docker ps -aq) # 删除全部容器
-
- #容器文件拷贝 —无论容器是否开启 都可以进行拷贝
- # docker cp 容器ID/名称:文件路径 要拷贝到外部的路径 | 要拷贝到外部的路径 容器ID/名称:文件路径
- # 从容器内 拷出
- docker cp 容器ID/名称: 容器内路径 容器外路径
- # 从外部 拷贝文件到容器内
- docker cp 容器外路径 容器ID/名称: 容器内路径
-
- docker load -i 镜像保存文件位置
-
-
- #可将以下命令写成脚本运行
- sudo docker rm -f $(sudo docker ps -aq)
- sudo docker network prune
- sudo docker volume prune
- docker rmi --force `docker images | grep dev-peer | awk '{print $3}'`
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。