一.docker在线安装mysql
(一)windows安装docker
1.官网 官网镜像registry不能打开 国内阿里云镜像
- Docker Desktop Installer.exe(572M)安装自动配置环境变量 安装后有多个目录:
- C:\Program Files\Docker\Docker\resources\bin (自动配置环境变量)
- C:\Users\Administrator\AppData\Local\Docker\wsl\data\ext4.vhdx (软件虚拟存放位置 )
- C:\Users\Administrator\.docker
- 运行C:\Program Files\Docker\Docker\Docker Desktop.exe ( 启动 docker程序)
- Windows Docker 配置国内镜像源的两种方法 - 槑孒 - 博客园
(二)动力节点Docker入门到进阶教程,docker全家桶实战攻略
1.overview
- Docker首发版本架构:两个核心组件LXC=linuxContainer和DockerDaemon
- Docker0.9版本:Libcontainer工具替换依赖LXC DockerD大而全运行慢功能扩展难
- Docker1.1:符合OpenContainerInstitute1.0版本规范 DockerD(forkRunc容器)
- Docker大版本分三类:Moby 社区版Docker-CommunityEdition 企业版Docker-EnterpriseE
- Docker小版本: Edge月版 Stable季版
- C:\Windows\System32\drivers\etc 本机网络配置 如本机DNS
- 官网免费下载MobaXterm=相当xshell一样SSH调用服务器
- 按照docker官网指引 安装centos7虚拟机 并安装docker引擎 阿里云docker软件镜像源
- 阿里云官网支付宝登录 搜索容器镜像服务器并开通_镜像工具_镜像加速器
- docker version -f "{{json.}}" ; docker version -f "{{.Server.Version}}"
2.docker命令 PowerShell/cmd
- docker info ; docker -v ; docker --version ; docker version
- docker version -f {{.Server.Version}} ;docker version --format {{.Client.Version}}
- docker pull hello-world ; docker images
- docker run hello-world (该容器一次性运行就结束了) ; docker ps -a (显示该容器系统取名)
- docker run --name hello1 hello-world (给容器自定义称称) ; docker ps ; docker ps -a
- docker pull ubuntu ;docker images;docker run --name myubuntu ubuntu (一次run就end)
- docker rm myubuntu; docker run --name myubuntu ubuntu /bin/bash (也一次run就over)
- docker rm myubuntu; docker run -i -t --name myubuntu ubuntu /bin/bash ; exit
- docker rm myubuntu;docker run --name myubuntu -it ubuntu /bin/sh(Interactive terminal)
- vi ; wget ; ifconfig ; ls (很多命令不能使用) ; 打开另一个cmd: docker ps (myubuntu运行);
- exit; docker ps (myubuntu关机容器 docker stop myubuntu) ; docker ps -a;
- docker rm myubuntu; docker run --name myubuntu -it (有些docfile文件默认执行“bash”);
3.PowerShell/cmd
- docker pull tomcat:8.5.49 (8.5.32 8.5.50 不要使用运行不正常 可以pull该镜像测试)
- docker run --name mytom -it tomcat:8.5.49 /bin/bash ;(bash方式运行 另一cmd发现运行)
- http://localhost:8081/ (访问=宿主机浏览器无法访问 容器虽bash运行 但还没有对外提供服务)
- exit (该容器关机运行=docker stop mytom); docker rm mytom(删除容器)
- docker run --name mytom -it tomcat:8.5.49; http://localhost:8081/(访问=仍不能访问)
- ctrlC(关机容器); 删容器; dokcer run --name mytom -p 8081:8080 -it mytomcat:8.5.49; 可访问
- 关容器; docker run -p 8081:8080 --name mytom -d -it tomcat:8.5.49 ; 可访问
- 关删docker run -P --name mytom -d -it tomcat:8.5.49(P系统自动分配映射端口docker ps); 可访
- 关删docker run -p 8081:8080 -d tomcat:8.5.49 可访 (-it删伪终端dockerfile默认catalina.sh)
- 关删docker run -p8081:8080 --name mytom tomcat:8.5.49 ; (linux=ctrl+p+q win=?) ; 可访
- 关删后台-d运行mytom容器8081; docker exec -it /bin/bash;exit; docker exec -it mytom ip a (pwd)
4.ExitedUp cp
- 停删ubuntu容器 docker run --name myubun -it ubuntu:latest /bin/bash; exit
- docker run --name myubun2 -d ubuntu ; docker ps -a (1容器停止Exited 2容器up运行)
- docker top myubun2 ; docker top myubun
- F:\Program Files (x86)\dockerdic> docker cp a1.txt myubun2:/root
- F:\Program Files (x86)\dockerdic> docker cp myubun2:/root/a1.txt a2.txt
- docker rm -f $(docker ps -q) #这是linux全部删除容器命令 windows如何批删?
5.Centos commit export import
- 配置国内镜像源docker pull centos:7 ; docker run --name mycentos7 -it centos:7 /bin/bash
- ifconfig(不能运行);yum -y install net-tools; ifconfig; exit
- docker commit --help;
- docker commit -a"zs <zs@qq.com>" -m"AddedNet-tools" mycentos7 mycentos7_c_image:net-tools
- docker run --name mycentos7-2 -it mycentos7_c_image:net-tools /bin/bash ; ifconfig(能用) ;exit
- docker inspect mycentos_c_image:net-tools
- F:\Program Files (x86)\dockerdic> docker export -o mycentos7.tar mycentos7
- docker import mycentos7.tar mycentos7_image_import:net-tools; 再运行该镜像容器; ifconfig;exit
- docker sysmem prune (移除停止容器无名称镜像cache); docker stop/start/restart/pause/unpause 容器
5.docker装centos7和centos7再装docker(docker官网centos)
- docker pull centos:7 ;
- docker run --privileged=true -d -it --name mycentos_docker -it centos:7 /bin/bash (-it不能省略)
- docker attach mycentos_docker ; yum install -y yum-utils ;
- yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.rep
- 复制出现问题 退出重登 分段复制 或者 cmd 宽度变长来输入
- yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 练习安装但并不能运行 docker images?
6.gcc gcc++
- 停删所有容器docker system prune ; docker stop/rm 容器; docker rmi 不需要镜像
- docker run -d -it --name mycentos centos:7 /bin/bash ; docker attach mycentos(容器同一进程再进)
- yum install -y net-tools gcc gcc-c++ glibc-static vim ; pwd ; mkdir cProject ;
- 随意输入中文则清除 证明mycentos7系统可输入中文; echo 中国 ;echo $LANG ; LANG="en_US.UTF-8"
- centos vim显示中文乱码怎么办; pwd; mkdir /root/cproject
- cd /root/cproject ; vim hello.c (i=insert esc:qw保存退出)
- #include<stdio.h>(换行)int main(){printf("中国helloWorld\n");return 0;}
- gcc --static -o hello hello.c ; ll ; ./hello (如果出现中文乱码如下可解决)
- iconv -f gbk -t utf8 hello.c -o hello.c ;
- gcc --static -o hello hello.c ; ./hello
- F:\Program Files (x86)\dockerdic> echo FROM scratch >Dockerfile
- echo ADD hello />>Dockerfile &echo CMD "/hello" >>Dockerfile
(二)镜像容器
1.创建1个镜像及容器
- docker search mysql ; docker inspect mysql
- docker pull mysql:latest (安装最新版本mysql镜像 目前是8.10版本)
- docker images ; docker inspect mysql ; docker inspect mysql:latest
- docker images mysql:latest ; docker manifest inspect mysql
- docker history --help ; docker history -q mysql:latest
- docker run -p 3307:3306 --name mysql810 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
- docker ps (正在运行状态) ; docker ps -a (所有状态包括死亡)
- docker exec -it mysql810 bash (进入容器) mysql -uroot -p123456; exit; exit
- docker stop mysql810
- docker rmi -f image mysql810
- docker images
2.删除所有容器及镜像
- docker ps (查看所有容器container 正在运行状态 process state)
- docker container ps (命令同上-简化命令)
- docker pull mysql:latest (安装最新版 mysql)
- docker rm mysql810 (不存在报错 Error response from daemon:No such container:mysql810)
- docker stop mysql810 (先停止后移除容器); docker start mysql810
- docker rm mysql810 (删除容器名称)
- docker ps -a (包括所有已停止运行的容器) ; docker rm 其它镜像名称 ; docker ps -a (空为止)
- docker container rm mysql810 (命令同上)
- docker rmi --help
- docker rmi -f image mysql810
- docker images
3.重建同镜像不同容器
- docker pull mysql:latest ; docker images
- docker run -p 3308:3308 --name mysql810-3308 -e MYSQL_ROOT_PASSWORD=1234 -d mysql:latest
- docker ps ; docker ps -a ;
- docker exec -it mysql810-3308 bash (Interactive terminal进入容器)
- mysql -uroot -p1234 ; select @@hostname, @@port (port仍为3306?)
- 运行pymysql01 ( port改为3308测试是否可登录 不成功? )
- docker ps -a ; docker rm 所有镜像名称; docker ps -a (空为止)
- docker run -p 3307:3306 --name mysql810-3307 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
- docker run -p 3308:3306 --name mysql810-3308 -e MYSQL_ROOT_PASSWORD=1234 -d mysql:latest
- docker ps -a ; docker ps;
- 运行pymysql01-client (测试两个在线mysql服务器成功 3307 123456 / 3308 1234)
4.新建新镜像
- docker pull mysql:5.6 ; docker images
- docker run -p 3309:3306 --name mysql56 -e MYSQL_ROOT_PASSWORD=12 -d mysql:5.6
- docker ps ; docker ps -a ; docker exec -it mysql56 bash ; env ; env | grep MYSQL ;
- ls ; mysql -uroot -p12 ; show databases ; exit ; exit
- docker logs mysql56
- docker scout quickview mysql:5.6 ; docker scout quickview
- docker search mysql
5.备份容器及数据1失败
- 停删所有容器和镜像 docker images rmi bf7179cff503 (可删镜像名称或者ID)
- docker search mysql:latest ; docker search mysql:5.6 ; docker search mysql:5.7
- docker pull mysql:latest
- docker run -d -p 3307:3308 --name mysql-latest-3307 mysql:latest (设置有错)
- docker start mysql-latest-3307 ; docker ps(不能正常启动) ; docker ps -a
- docker stop mysql-latest-3307 ; docker rm mysql-latest-3307
- docker run -d -p 3307:3308 --name mysql-latest-3307 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
- docker exec -it mysql-latest-3307 env LANG=C.UTF-8 mysql -uroot -p123456 (bash)
- 上述解决中文不能输入。下面的sql语句 (创studentDB库生成students表) 并退出 exit ;
- docker stop mysql-latest-3307 (运行状态的容器不能备份? 如备份运行容器其数据将丢失)
- docker commit mysql-latest-3307 mysql-latest-3307-image (容器生成镜像)
- docker run -d -p 3308:3306 --name mysql-latest-3307-image-container -e MYSQL_ROOT_PASSWORD=12 mysql-latest-3307-image
- docker exec -it mysql-latest-3307-image-container bash (发现 该镜像并没有生成studentDB库?)
- docker start mysql-latest-3307 ; 再执行容器(exec)
5.备份容器及数据2失败
- docker commit -p mysql-latest-3307 mysql-latest-3307-image2
- docker run -d -p 3309:3306 --name mysql-latest-3307-image2-container -e MYSQL_ROOT_PASSWORD=123 mysql-latest-3307-image2
- docker stop mysql-latest-3307
- docker exec -it mysql-latest-3307-image-container bash(停止mysql-latest-3307运行 仍然没有生成studentDB?)
5.备份容器及数据3
- 停删所有容器及镜像 ; docker pull mysql:latest; 运行该镜像容器mysql-latest-3307; 生成studentDB和students表
6.文件生成导出导入镜像
- 删除所有容器及镜像; 新建文件 F:\Program Files (x86)\dockerdic\Dockerfile
- Dockerfile有2行文字: FROM mysql:latest (换行) ENV MYSQL_ROOT_PASSWORD=123456
- docker images ; docker ps -a ;
- docker build -t mysql-latest . ( 进入F:\Program Files (x86)\dockerdic目录cmd .代表当前目录 )
- docker images ; docker ps -a ;
- docker run -d -p 3307:3306 --name mysql810-3307 mysql-latest (-d mysql-image)
- docker images ; docker ps -a ;
- docker exec -it mysql810-3307 bash; mysql -uroot -p123456 ; exit ; exit
- docker exec -it mysql810-3307 mysql -p123456 ; exit ; exit
- docker exec -it mysql810-3307 mysql -p ; 123456 (无显示输入) ;
- 生成如下面的 sql语句 如建立studentDB库 创建students表 生成多条记录; exit ; exit
- docker exec -it mysql810-3307 env LANG=C.UTF-8 /bin/bash (解决docker mysql 中文不能输入问题?)
- docker commit mysql810-3307 mysql810-image ; docker images ;
- docker run -d -p 3308:3306 --name mysql810-3308 mysql810-image
- docker exec -it mysql810-3308 ; mysql -uroot -p123456 (发现没有该库 studentDB 表明不保存数据)
- F:\Program Files (x86)\dockerdic> docker save -o mysql8.tar mysql-latest ( 镜像导出到外部文件 )
- F:\Program Files (x86)\dockerdic> docker load -i mysql8.tar (也许会计算md5值?)
- 停删所有容器和镜像后 docker load -i mysql8.tar ;docker images
(三)pymysql01
import pymysql #若报错需装 pip install cryptography #mysqlClient
conn = pymysql.connect(host="localhost",
port=3308,
charset="utf8",
user="root",
password="12"
)
if hasattr(conn, "cursor"):
cursor = getattr(conn, "cursor")() # cursor=conn.cursor()
print("【0】显示当前所有数据库:", cursor.execute("show databases;"),cursor.fetchall())
print("【0】删除数据库studentDB:",cursor.execute(" drop database if exists studentDB; "))
print("【2】显示所有数据库:", cursor.execute("show databases;"),cursor.fetchall())
print("【3】重新创库:",cursor.execute(" create database if not exists studentDB character set utf8;"))
print("【4】使用当前数据库:",cursor.execute("use studentDB;"))
print("【5】新增后的所有数据库:", cursor.execute("show databases;"))
for i,db in enumerate(cursor.fetchall()):
print("\t",i+1,db)
print("【6】游标已取完无数据:",cursor.fetchall())
cursor.close()
conn.close()
# Python311\Lib\site-packages\pymysql
(四)mysql-connector-python
import mysql.connector # pycharm 上述安装不是mysql模块 #mysqlClient
# pycharm 右键提示安装模块为 mysql-connector-python
conn = mysql.connector.connect(host="localhost",port=3307,user="root",
password="123456",database="studentDB") ## 连接数据库
cursor = conn.cursor()# 创建游标
# 创建表格
sql="CREATE TABLE IF NOT EXISTS users (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), age INT)"
cursor.execute(sql)
# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 25)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Bob', 30)")
conn.commit() #如果未提交 则数据库不能持久化生成数据 属于数据库的 瞬时态?
# 查询数据
cursor.execute("SELECT id, name, age FROM users;")
for row in cursor.fetchall():
print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}")
# 关闭游标和连接
cursor.close()
conn.close()
# 模块安装位置 ..\Python311\Lib\site-packages\mysql_connector_python-8.1.0.dist-info
(三)pymysql02
import pymysql #若报错 需要安装 pip install cryptography
dbConfig={
"host":"localhost","port":3307,"charset":"utf8",
"user":"root","password":"123456","database":"studentDB"
}
conn = pymysql.connect(**dbConfig)
print(conn)
cursor=conn.cursor()
cursor.execute("show databases;")
print(cursor.fetchall())
cursor.execute("SELECT id, name, age FROM users")
for row in cursor.fetchall():
print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}")
# 关闭游标和连接
cursor.close()
conn.close()
(五)sql语句
CREATE DATABASE studentDB;
USE studentDB; CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20));
INSERT INTO students(name) VALUES ('张三'), ('李四'), ('WangWu'); -- 中文无法输入
SELECT * FROM students;