ubuntu-docker redis、mysql、postgresql

Lin

Lin

xiaominglin789

docker

  • 1.移除旧版依赖
  • 2.安装docker的前置环境依赖
  • 3.安装docker
  • 6.docker基本操作
  • 5.安装docker-compose
  • 6.安装redis、mysql、postgresql

1.移除旧版依赖

  • 系统环境: Linux lin 5.8.0-55-generic #62~20.04.1-Ubuntu SMP Wed Jun 2 08:55:04 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
sudo apt-get remove docker docker-engine docker.io containerd runc

2.安装docker的前置环境依赖

sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
  • 增加docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  • 设置 官方 仓库
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

3.安装docker

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  • 更换国内仓库源
# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}

4.docker基本操作

  • 查看镜像: sudo docker images
  • 下载镜像: sudo docker pull 镜像名:版本
  • 生成容器并运行: sudo docker run 镜像名
  • 查看所有容器: sudo docker ps -a
  • 查看运行的容器: sudo docker ps
  • 停止运行的容器: sudo docker stop 容器id
  • 进入容器后台内部: sudo docker exec -it bash 容器id
  • 删除容器: sudo docker rm 容器id
  • 删除镜像: sudo docker rmi 镜像名
  • 容器绑到数据卷、端口映射、后台保护
    • -v 本地数据目录:容器内部目录
    • -p 本地端口:容器端口
    • -d 后台保护

5.安装docker-compose

#下载运行文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#配置权限
sudo chmod +x /usr/local/bin/docker-compose
  • 新建镜像、创建容器并后台: docker-compose -f [yml配置文件] up -d
  • 移除所有容器以及网络相关: docker-compose down
  • 运行容器: docker-compose start 容器名
  • 暂停容器: docker-compose stop 容器名

6.安装redis、mysql、postgresql

  • redis.yml 配置 本地redis 版本: 6 端口:6379
    • 1.vim /opt/redis/conf/redis.conf -> 配置密码 -> apem@159.com
    • 2.启动命令command添加登录密码: --requirepass apem@159.com --appendonly yes
version: "3"
services:
redis:
image: redis:latest
container_name: redis
restart: always
ports:
- 6379:6379
volumes:
- /opt/redis/data:/data
- /opt/redis/conf/redis.conf:/etc/redis/redis.conf
privileged: true
environment:
- TZ=Asia/Shanghai
- LANG=en_US.UTF-8
#覆盖容器启动的redis.conf
command: redis-server --requirepass apem@159.com --appendonly yes
  • mysql8.yml 配置 版本:8 端口: 3306 -it => 进入容器后可通过mysql -u root -p [MYSQL_ROOT_PASSWORD] 登录,才有操作权限,可以 新建管理员赋予操作权限 或 给 MYSQL_USER + MYSQL_PASSWORD 操作权限
  • 注意: yml environment 配置下 请使用 - key=value 的元组形式。这里使用map的表达形式有个坑: MYSQL_ROOT_PASSWORD: 123456 设置不成功的, 导致使用root账号密码无法登录数据库...
version: "3"
services:
mysql8:
# 镜像名
image: mysql:8
# 容器名(以后的控制都通过这个)
container_name: mysql8
# 重启策略
restart: always
environment:
# 时区上海
- TZ=Asia/Shanghai
# root用户的密码
- MYSQL_ROOT_PASSWORD=123456
# 初始化数据库(后续的初始化sql会在这个库执行)
- MYSQL_DATABASE=pay-demo
# 初始化临时用户(临时新用户没有什么权限的账号)
- MYSQL_USER=mysql
# 初始化临时用户密码
- MYSQL_PASSWORD=123456
ports:
- 3306:3306
networks:
- app-mysql
volumes:
# 数据挂载
- /opt/mysql8/data:/var/lib/mysql
# 配置挂载
- /opt/mysql8/conf:/etc/mysql/conf.d
# 初始化目录挂载
- /opt/mysql8/init:/docker-entrypoint-initdb.d
command:
# 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改会导致密码无法匹配)
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
networks:
app-mysql:
driver: bridge
  • root账号登录mysql, 新建用户, 赋予权限, web应用-远程连接才能成功.
  • 创建新用户: create user 'apem789'@'%' identified by 'apem@159.com';
  • 赋予权限: grant all privileges on *.* to 'apem789'@'%' with grant option;
  • 刷新生效: flush privileges;

查找mysql8容器id, 进入容器内操作

sudo docker ps sudo docker exec -it [容器id] /bin/bash

- postgresql.yml 配置
postgre端口: 5432, admin: localhost:7070
```bash
version: "3"
services:
postgres:
image: "bitnami/postgresql:latest"
container_name: "postgresql"
restart: always
ports:
- 5432:5432
volumes:
- /opt/postgres:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=apem@159
networks:
- app-tier
pgadmin:
image: "dpage/pgadmin4:latest"
container_name: "pgadmin"
restart: always
ports:
- 7070:80
depends_on:
- postgres
environment:
- PGADMIN_DEFAULT_EMAIL=159@qq.com
- PGADMIN_DEFAULT_PASSWORD=apem159
networks:
- app-tier
networks:
app-tier:
driver: bridge