Ubuntu↑Docker | Docker ↑MySQL 笔记
2021/12/5 19:52:00
本文主要是介绍Ubuntu↑Docker | Docker ↑MySQL 笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Ubuntu ↑ Docker
1 Ubuntu 初始配置
sudo su ufw allow ssh ufw allow 22 apt update apt install openssh-server -y #安装ssh # -y 确认安装 apt install vim -y #安装Vim # 首先备份源列表 cp /etc/apt/sources.list /etc/apt/sources.list_backup # 打开sources.list文件 vim /etc/apt/sources.list
阿里云源(18TLS)
# 阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
刷新列表
sudo su apt-get update apt-get upgrade apt-get install build-essential
2 Ubuntu 安装 Docker
ubuntu server 安装 docker
sudo su apt install docker.io -y systemctl start docker #启动 systemctl enable docker #开机启动
3 Dockerfile 部署 SpringBoot
把 打包好的 jar文件(maven --> install), 放入以下文件中. (idea 右键jar–>Deployment–>上传) (Tools–>Deployment–>Configuration中配置 Deployment)
cd /home/springboot
mv -f /root/target/miaosha.jar /home/springboot/e
vim Dockerfile #如下 ↓ , 只需要修改 作者 和 SNAPSHOT.jar 部分. springboot由docker下载, 极速部署
# 基础镜像 FROM java:8 # 作者信息 MAINTAINER ngp1848e # 将当前目录下的jar包复制到容器里(crm-0.0.1-SNAPSHOT.jar修改为你的jar包名字) COPY crm-0.0.1-SNAPSHOT.jar /springboot.jar # 提示当前项目在容器运行的端口 CMD ["========server.port = 8080=========="] # 暴露运行的端口 EXPOSE 8080 # 执行jar包 ENTRYPOINT ["java","-jar","/springboot.jar"]
docker build -t springboot . #Dockerfile 生成镜像
- –tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
docker run -d -p 8090:8090 --name miaosha springboot
#端口号最好与程序内设置的端口一致, 内部写死了部分 链接, 很可能 跨域, 以后可能不是个问题. (以后进一步学习, 应该能够动态配置, 目前先这样)
Centos ↑ Docker
Centos 安装 Docker(可选)
yum install docker -y
附: docker 直接安装 MySQL(有数据卷的话, 重启没丢过数据, 生产环境目前不推荐此种简便方式)
-
临时练习用起来不错… 安装启动特方便
-
- 理由① 同程旅游也很早开始了 MySQL 的 Docker 化实践,到目前已经有超一千多个 MySQL 实例在 Docker 平台安全稳定地跑着,DB 运维能力发生了质的提高(DBA 再也不用担心删库跑路了)。
-
生产环境目前不推荐此种简便方式
-
- 理由① Docker 上的 MySQL,发现特别慢,该怎么优化?
- 理由② 直接安装 mysql 和通过 docker 安装 mysql 有什么区别?
-
- 理由③ Docker 容器已启动就崩溃,如何进入调试?
如果 vmware中的ubuntu重启会丢失 docker所有镜像和容器, 是因为 ubuntu为live版server.iso 应换成普通server.iso
docker pull mysql:5.7
★ docker compose 启动 mysql容器
–> 替代 --> 修改docker中的MySQL的my.cnf
version: '3' services: mysql: container_name: mysql57_main image: mysql:5.7 restart: always ports: - 3306:3306 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 --max_allowed_packet=1024M --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO" volumes: - $PWD/mysql57/data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: "123456" #版本5.7 挂载my.cnf配置文件, 就不能启动, 莫名... 算了先用着
version: '3' services: mysql8.0: # 镜像名 image: mysql:8.0.21 # 容器名(以后的控制都通过这个) container_name: mysql8.0_main # 重启策略 restart: always environment: # 时区上海 TZ: Asia/Shanghai # root 密码 MYSQL_ROOT_PASSWORD: 123456 # 初始化数据库(后续的初始化sql会在这个库执行) MYSQL_DATABASE: nacos_config # 初始化用户(不能是root 会报错, 后续需要给新用户赋予权限) MYSQL_USER: nacos # 用户密码 MYSQL_PASSWORD: nacos # 映射端口 ports: - 3306:3306 volumes: # 数据挂载 - /root/mysql/data/:/var/lib/mysql/ # 配置挂载 - /root/mysql/conf/:/etc/mysql/conf.d/ # 初始化目录挂载 - /root/mysql/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 # 版本8.0
然后同目录下 docker-compose up -d
其配置简单, 替代频繁写入my.cnf
上传至服务器, 准备好镜像的情况下, 在 docker-compose.yml 同目录下, 命令: docker-compose up (即可启动, 自定义配置的mysql)
多个services则是 docker-compose all
命令行启动 mysql容器
# 推荐用 docker-compose.yml 启动容器, 因为手写or复制很容易出错, 且不便于改动/备份版本 # docker run --name mysql5.7 \ # $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql # -v /mysql/conf:/etc/mysql/conf.d -v /mysql/logs:/logs -v /mysql/data:/var/lib/mysql \ # -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7 # 目前来说这个稳妥
推荐docker-compose 方式
-id–>交互式容器,
–name–>容器名字,
-p host_port:container_port -->[宿主机端口] 映射到 [容器端口],
-e–>指定参数
-v : 指定数据卷,意思就是将mysql容器中的/var/lib/mysql(这个是数据库所有数据信息文件)映射到宿主机/data/mysql里面
附: 解决跨域
Chrome 查看 Application/Cookies(即Session?)时, JSESSIONID 服务器端 不存在, 而本地存在, 判断是跨域问题.
-
但之前视频里用 前后端所有交互的页面 Credentials 设置一遍解决了呀.
-
后来, 想用redis替代session失败, 需要一段时间学习, 待补充知识点
-
后来, 仔细看 Network中的 list请求 爆红, 仔细看 url 不对, ip好像在前段部分写死了, 端口 因为我docker里映射了一道所以也不一样, 之前偶尔能跑偶尔不能, 是请求的本地而不是服务器, 所以我调试的时候就能跑.
-
总结: 计算机网络 知识不熟练, 急待补充.
附: linux debug工具
yum install telnet
telnet localhost 8090 #可以测试端口通不通
pring localhost #ping可以测试ip
★★★ 常用 Docker 命令
命令 | 功能 |
---|---|
docker logs [container id] | 查看某个容器的日志 |
docker search mysql:5.7 | 搜索 mysql:5.7 可以 pull 的版本 |
docker pull mysql:5.7 | 下载 msyql:5.7 镜像 |
docker run mysql:5.7 -p 3306:3306 -d | 启动 msyql:5.7 镜像 , -p映射宿主机3306端口到 mysql容器3306端口, -d 后台执行 (另外还有很多 参数, 可自行查阅) 配置复杂最好写成 docker-compose.yml 例如 |
docker ps | 显示所有运行容器 |
docker ps -a | 显示所有容器 (包括已暂停的) |
docker stop <container name/id> | 停止容器 |
docker rm <container name/id> | 删除容器, 必须先 stop |
docker kill <container name/id> | 删除容器, 不必先 stop |
docker rm -f <container name/id> | 删除容器, 不必先 stop |
docker stop $( docker ps -aq) | 关闭对应 docker 容器 |
docker-compose up | 启动对应 docker 容器 条件:当前目录存在docker-compose.yml文件 |
docker-compose down | 关闭对应 docker 容器 并删除对应容器条件:当前目录存在docker-compose.yml文件 |
docker-compose start | start对应stop的 docker 容器 |
docker-compose stop | stop对应 docker 容器 |
docker exec -it <container name/id> /bin/bash | 进入容器-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。docker attach 命令 进入, 如果输入exit会导致容器停止 |
docker images | 显示所有镜像 |
docker commit ubuntu docker_ubuntu | 打包镜像 |
docker save -o target_tar_name.tar docker_images_name | 宿主机 sftp ftp 下载到本地时, 如果permission deny , chmod -R 777 $PWD/… 即可 |
docker import | target_tar_name.tar docker_images_name |
docker cp /home/ngp/mysql…tar.gz docker_container_name:/ | 复制宿主机文件到 docker |
docker rmi -f docker_images_name | 删除镜像 |
Docker 教程推荐
Docker 常见概念解读,可以看这篇 Github 上开源的这篇《Docker 基本概念解读》 ,从零到上手实战可以看《Docker 从入门到上手干事》这篇文章,内容非常详细!
另外,再给大家推荐一本质量非常高的开源书籍《Docker 从入门到实践》 ,这本书的内容非常新,毕竟书籍的内容是开源的,可以随时改进。
遇到的问题
1 oci runtime error: container_linux.go:235: starting container process caused “container init exited prematurely”
docker-compose.yml 的 volumes 中, 有 路径找不到
这篇关于Ubuntu↑Docker | Docker ↑MySQL 笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程
- 2024-11-01部署MySQL集群学习:新手入门教程
- 2024-11-01部署MySQL集群入门:新手必读指南
- 2024-10-23BinLog入门:新手必读的MySQL二进制日志指南
- 2024-10-23Binlog入门:MySQL数据库的日志管理指南