目录
三、说明命令行快捷键如何完成,1)快速跳转到行首?2)快速跳转到行尾?3)快速删除当前光标到行尾,4)快速删除光标到行首,5)如何快速取消执行命令。
十二、使用docker创建MySQL容器并把数据保存到宿主机的/data/mysql
一、一个完整计算系统的简要介绍。
什么是计算机
计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。
1946世界上第一台计算机“电子数字积分计算机”(ENIAC Electronic Numerical And Calculator)在美国在美国宾夕法尼亚大学问世了。ENIAC(中文名:埃尼阿克)是美国奥伯丁武器试验场为了满足计算弹道需要而研成的。这台计算机使用的17468只电子管,重大30吨,占地170平方米,耗电174千瓦,耗资40万美元,每秒可进行5000次加减运算。
计算机的发展历史
1946-1957 第一代计算机:电子管时代
1958-1964 第二代计算机:晶体管时代
1964-1970 第三代计算机:集成电路时代
1971至今 第四代计算机:大规模集成电路时代
计算机的组成部分
一个完整的计算机由硬件系统(hardware)和软件系统(software)组成。
1946年美籍匈牙利数学家约翰·冯·诺依曼提出储存程序原理,把程序本身当做数据来对待,程序和该程序处理的数据用同样的方式来储存。冯·诺依曼体系的特点是:
1、数字计算机采用二进制,bit位,byte字节,1byte=8bit
2、计算机应该按照程序顺序执行
3、计算机硬件由控制器,运算器,储存器,输出设备和输入设备五大部分组成
计算机硬件系统
计算机硬件的五个单元
控制器:指挥系统
运算器:数学和逻辑运算
储存器:存储信息
输入设备:接收外部信息
输出设备:输出计算机内部信息到外部设备
硬件系统
由主机和外部设备组成
主机
中央处理器cpu:由控制器和运算器组成
内存储器:RAM,ROM
外部设备
外部存储器:硬盘,软盘,光盘,磁带等
输入设备:鼠标,键盘,扫描仪等
输出设备:显示器,打印机,绘图仪等
其他设备:调制解调器等
计算机软件系统
由系统软件和应用软件组成
系统软件
操作系统:服务器OS,桌面OS ,移动设备OS
程序语言处理系统
数据库管理系统
服务程序:检查,诊断,调试程序
应用软件
通用应用软件:office办公软件等
专用应用软件:用户程序等
计算机的分类
计算机可以按规模,功能和角色分类
按规模
超级计算机
大型计算机
小型计算机
微型计算机
按功能和角色
服务器(server):即server,计算机的一种,通常是网络中为客户端计算机提供各种服务的高性能计算机。
客户机(client):即client,向服务器提出请求,需要服务器为之提供相应的服务和支持的计算机
服务器的分类
服务器可以按用和功能,外形分类
按应用和功能
分为WEB服务器,文件服务器,数据库服务器,中间应用服务器,监控服务器,日志服务器,程序版本控制服务器,虚拟机服务器,邮件服务器,打印服务器,域控制服务器,多媒体服务器,通讯服务器,ERP服务器。
按外形
塔式服务器,刀片式服务器,机架式服务器
二、说明内部命令和外部命令的区别,以及他们如何获取帮助的?
可以通过type command 查看命令类型
内部命令:由shell自带的,而且通过某命令形式提供,用户登录后自动加载并且常驻内存中。
外部命令:在文件系统里面有对应的可执行文件,当执行命令是才从磁盘中加载到内存中,执行完成后从内存中删除。
hash缓存表:系统初始hash表为空,当执行外部命令时,系统默认会从path路径下寻找该命令,找到后会将这条命令的路径记录在hash表中。当再次执行这条命令时shell解释器首先回去查看hsh,存在就执行。不存在就又去从path路径中查找。
即内部命令的效率要高于外部命令
内部命令查看帮助信息:
1、help command
2、man command
外部命令查看帮助信息:
1、command --help 或者 command -h
2、使用man手册(manual):man command
3、信息页 info command
4、程序自身的帮助文档
5、程序官方文档
6、相关的技术网站
7、搜索引擎
三、说明命令行快捷键如何完成,1)快速跳转到行首?2)快速跳转到行尾?3)快速删除当前光标到行尾,4)快速删除光标到行首,5)如何快速取消执行命令。
1、快速跳转到行首:Ctrl+a
2、快速跳转到行尾:Ctrl+e
3、快速删除当前光标到行尾:Ctrl+k
4、快速删除光标到行首:Ctrl+u
5、如何快速取消执行命令:ctrl+c
四、总结Linux目录结构说明每个目录主要的用途。
linux的目录结构:
1、文件和目录被组织成一个单根倒置树结构
2、文件系统从根目录下开始,用“/”表示
3、根文件系统(rootfs):root filesystem
4、标准linux文件系统(如:ext4),文件名称大小写敏感,例如:MAIL、Mail、mail
5、以.开头的为隐藏文件
6、/为路径分隔符
7、文件名最长255个字符
8、包括路径在内的文件名称最长4095个字节
9、蓝色表示目录,绿色表示可执行文件,红色表示压缩文件,浅蓝色表示链接文件,灰色表示其他文件
10、除了斜杠和null,所有字符都有效,但是使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用
11、每个文件都有两类相关数据,元数据:即属性;数据:即文件内容
linux目录的功能即用途:
/boot:引导文件存放的目录,内核文件(vmlinuz)、引导加载器(BootLoader,grub)都存放在此目录
/bin:所有用户使用的基本命令;不能关联至独立分区,os启动即会用到的程序
/sbin:管理的基本命令;不能关联至独立分区,os启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享文件存放位置
/etc:配置文件目录
/home/username:普通用户家目录
/root:管理员家目录
/media:移动设备挂载点
/mnt:临时文件系统挂载dian
/dev:设备文件及特殊文件存储位置
b:block device,随机访问
c:character device,线性访问
/opt:第三方应用程序安装位置
/srv:系统上运行的服务用到的数据
/tmp:存放临时文件
/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/usr/bin:系统用户使用的应用程序。
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
/usr/lib:32位使用
/usr/lib64:64位使用
/usr/include:c程序的头文件
/usr/share:结构化独立的数据,例如:man,doc等
/usr/share/local:第三方应用程序的安装位置
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
/var/cache:应用程序缓存目录
/var/lib:应用程序状态信息数据
/var/local:专用于/usr/local下的应用程序存储可变数据
/var/lock:锁文件
/var/log:日志文件
/var/opt:专用于/usr/local下的应用程序存储可变数据
/var/run:运行中的进程相关数据,通常用于存储pid进程文件
/var/spool:应用程序数据池
/var/tmp:保存系统两次重启之间产生的临时数据
/proc:用于输出内核于进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设置相关的虚拟文件系统
/selinux:security enhanced linux,selinux相关的安全策略等信息的存储位置
五、常用文件通配符
文件通配符可以用来匹配符合条件的多个文件,以至于方便批量处理文件;通配符采用特定的符号,表示特定的含义,此特殊符号称为元mate字符(mate)。常见如下:
[:digit:] 任意数字
[:lower:] 任意小写字母
[:upper:] 任意大写字母
[:alpha:] 任意大小写字母
[:alnum:] 任意数字或字母
[:blank:] 水平空格字符
[:space:] 水平或者垂直空格符
[:punct:] 标点符号
[:print:] 可以打印字符
[:cntrl:] 控制字符(非打印)
[:graph:] 图形字符
[:xdigit:] 任意16进制字符
* 任意0个和多个字符,但不匹配.开头的文件
?匹配任何单个字符
~username 用户家目录
[0-9] 匹配数字范围
[a-z] 一个字母
[A-Z]一个字母
[wang] 匹配列表中的任何一个字符
[^wang] 匹配列表中的以外的字符
.和~+ 当前工作目录
~- 前一个工作目录
{1..5} 集合
六、总结学过的用户,组,权限相关的命令及选项示例
useradd:
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT“ 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r 创建系统用户 CentOS 6之前: ID<500,CentOS7 以后: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
-p 指定加密的密码
示例:useradd -r -u 678 -g wang2 -G mage -s /sbin/nologin -c "wang2" wang2
usermod:
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限,即宽限期
示例:usermod -u 789 -g mage -a -G wang -s /bin/bash -l wang3 -c "wang3" wang2
userdel:
-f, --force 强制删除
-r, --remove 删除用户家目录和邮箱
userdel -fr wang3
id:查看用户信息
-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用
[root@localhost ~]# id wang2
uid=678(wang2) gid=1003(wang2) groups=1003(wang2),1001(mage)
su :
-l --login su -l UserName 相当于 su - UserName
-c, --command pass a single command to the shell with -c
示例: su - wang -c "ls -a /home/wang"
passwd:设置密码
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f:强制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码,Ubuntu无此选项
示例:passwd wang
groupadd :添加组
-g GID 指明GID号
-r 创建系统组,CentOS 6之前: ID<500,CentOS 7以后: ID<1000
示例:groupadd -r -g 234 DAGOU
groupmod :修改组
-n group_name: 新名字
-g GID: 新的GID
示例:groupmod -n xiaogou -g 345 DAGOU
groupdel:删除组
-f, --force 强制删除,即使是用户的主组也强制删除,但会导致无主组的用户不可用无法登录
示例:groupdel -f xiaogou
chown:修改文件的所属组,所有者
-R:递归修改
--reference=RFILE:参照文件来修改
示例:chown -R wang:mage /date
chgrp:修改文件的组
--reference=RFILE:参照文件来修改
示例:chgrp root 1.txt
chmod:修改文件或目录的权限
-R:递归修改
r-- 100 4 读
-w- 010 2 写
--x -001 1 执行
a:所有
u:所有者
g:所属组
o:其他人
示例:chmod -R 755 /data
chmod -R a+x /data
chmod -R a-x /data
chmod-R u+x /data
七、总结namespace的类型及功能
namespace是linux系统的底层概念,在内核层实现。在容器中主要功能是用来进行容器之间的资源隔离。
目前通过以下namespace技术实现容器运行空间的相互隔离:
MNT namespace(mount):提供文件挂载点和文件系统的隔离能力。即每个容器都要有独立的运行空间和根文件系统以便来启动和运行容器里面的服务。例如,在一个Ubuntu系统中,启动一个centos系统环境的容器,并且在这个容器里面创建一个nginx的服务,那么nginx就是运行在centos系统环境中,即容器里面是不能直接访问宿主机的文件系统;系统调用参数:CLONE_NEWNS;内核版本:Linux.2.4.19及以上
IPC namespace(inter-process-communication):提供进程间通信的隔离能力。即同一个IPC namespace的进程可以同过系统调用实现进程间的相互通信,但是不同IPC namespace之间的进进程不能通过系统调用实现相互之间的通信;调用参数:CLONE_NEWIPC;内核版本:Linux2.6.19及以上
UTS namespace(UNIX Timesharin System):提供主机名隔离。即用于系统标识,其他包含了主机名hostname、域名domainname等。它使容器有了独立于宿主机和其他容器的主机名标识;调用参数:CLONE_NEWUTS;内核版本:Linux2.6.19及以上
PID namespace(process indentification):提供进程隔离能力。即linux系统中有一个PID为1的进程(init/systemd)它使其他进程的父进程。那么在容器内也应该有一个父进程来管理其他下属进程。所有PID namespace就提供了进程隔离,比如容器之间的相同PID编号,各个容器内主进程生成和回收子进程等;参数调用:CLONE_NEWPID;内核版本:Linux2.6.24及以上
NET namespace(network):提供网络隔离能力。即每一个容器都类使用虚拟机一样有自己独立的网卡、监听端口、TC/IP协议栈等。docker使用NET namespace来启动一个vethx接口,这样你的容器就将拥有它自己的桥接ip地址,通常是docker0;调用参数:CLONE_NEWNET;内核版本:Linux2.6.29及以上
USER namespace(user):提供用户隔离能力。即容器之间可以拥有相同的用户名和用户ID,GID,他们只会作用在自己的容器空间;调用参数:CLONE_NWEUSER;内核版本:Linux3.8及以上
Syslog namespace:提供syslog隔离能力。syslog namespace是由华为工程师RuiXiang提出的,但是没有合并到linux内核中,后systemd在2020年2月实现了一个名为“journal namespace”的类似功能
control group (cgroup)namespace:提供进程所属的控制组的身份隔离;内核版本:linux4.6及以上
八、熟练使用各种方式安装docker
Ubuntu22.04.2安装docker
Ubuntu22.04.2使用apt安装docker
1、安装依赖
apt update
apt install -y apt-transport-https ca-certificates curl software-properties-common
2、安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
3、写入软件园信息
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
4、更新
apt update
5、查找并安装
查找
root@ubuntu2204:~# apt-cache madison docker-ce
docker-ce | 5:24.0.2-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:24.0.1-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:24.0.0-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:23.0.6-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:23.0.5-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:23.0.4-1~ubuntu.22.04~jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
安装
apt install -y docker-ce=5:24.0.2-1~ubuntu.22.04~jammy
Ubuntu22.04.2使用二进制文件安装docker
mkdir /opt/docker-install && cd /opt/docker-install
wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.2.tgz #下载二进制安装包
tar xfv 24.0.2.tgz
\cp docker/* /usr/bin
准备好:daemon.json containerd.service docker.service docker.socket 等文件
mkdir -p /etc/docker && \cp daemon.json /etc/docker
\cp containerd.service /lib/systemd/system/containerd.service
\cp docker.service /lib/systemd/system/docker.service
\cp docker.socket /lib/systemd/system/docker.socket
创建docker组合docker用户
groupadd docker && useradd docker -s /sbin/nologin -g docker
启动docker
systemctl start docker
centos7.9安装docker
yum安装:
安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
安装软件源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
安装更新docker
[root@localhost ~]# yum list docker-ce.x86_64 --showduplicates | sort -r
* updates: mirrors.cqu.edu.cn
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
Installed Packages
* extras: mirrors.aliyun.com
docker-ce.x86_64 3:24.0.2-1.el7 docker-ce-stable
docker-ce.x86_64 3:24.0.1-1.el7 docker-ce-stable
docker-ce.x86_64 3:24.0.0-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.6-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.6-1.el7 @docker-ce-stable
docker-ce.x86_64 3:23.0.5-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.4-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.3-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.2-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.1-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.0-1.el7 docker-ce-stable
yum makecache fast
yum install docker-ce-23.0.6-1.el7 docker-ce-cli-23.0.6-1.el7
centos7.9二进制文件安装docker
mkdir /opt/docker-install && cd /opt/docker-install
wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.2.tgz #下载二进制安装包
tar xfv 24.0.2.tgz
systemctl stop firewalld && systemctl disable firewalld
systemctl stop NetworkManager && systemctl disable NetworkManager
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux && setenforce 0
\cp docker/* /usr/local/bin
准备好:daemon.json containerd.service docker.service docker.socket 等文件
mkdir -p /etc/docker && \cp daemon.json /etc/docker
\cp containerd.service /lib/systemd/system/containerd.service
\cp docker.service /lib/systemd/system/docker.service
\cp docker.socket /lib/systemd/system/docker.socket
创建docker组合docker用户
groupadd docker && useradd docker -s /sbin/nologin -g docker
启动docker
systemctl start docker
九、总结docker的命令使用(镜像管理、容器管理)
docker pull #下载镜像
docker build #创建镜像
docker search #搜索镜像
docker images #列出当前所有镜像
docker save -o /opt/tomcat-image.tar.gz tomcat:latest #导出镜像(latest 版本号)
docker save tomcat:latest > /opt/tomcat-new.tar.gz #导出镜像
docker load -i /opt/tomcat-new.tar.gz #导入镜像
docker load < /opt/tomcat-new.tar.gz #导入镜像
docker run -it --rm 容器名称 -p 8800:8080 tomcat:latest(单次运行,容器退出后就删除,不能加-d)
docker run -it --name 容器名称 -d -p 8800:8080 tomcat:latest #创建容器 (-d 后台运行,-i标准输入,-t分配终端进去,-p指定端口(小p自己指定,大p系统自动分配))
docker run -it --name 容器名称 -d -p 192.168.254.129:8800:8080/udp -p 8801:8080 tomcat:latest(也可以这样多指定端口和指定宿主机的那个ip,也可以指定协议,不指定默认tcp协议)
docker run -it --name 容器名称 -d -p 192.168.254.129::8080 -p 8801:8080 tomcat:latest (地址指定哪里随机分配端口,还是小p)
docker ps #显示正在运行的容器
docker ps -a #显示所有的容器
docker exec -it 容器编号/容器名 bash #进入某个容器 (bash:以bash命令的方式进去)
docker run -it 镜像 bash #进入容器(新开一个容器进去,一般用于调试)
docker start 容器编号/容器名 #启动容器
docker stop 容器编号/容器名 #停止容器
docker restart 容器编号/容器名 #重启容器
要删除镜像,首先要删除对应的容器
docker rm -fv 9403766d2f6a #删除容器 (-f强制删除,-v彻底清除)
docker rmi hello-world:latest #删除镜像(latest版本号)
docker run -it nginx:latest ls -l #在镜像里面去执行命令
docker run -it --rm nginx:latest cat /etc/nginx/nginx.conf #单次查看镜像里面文件或者做什么操作
docker logs 容器编号/容器名 #查看容器日志(docker logs -h 查看帮助文档)
docker logs -f 容器编号/容器名 #查看日志 (不建议使用)
docker logs --tail 3 -f 容器编号/容器名 #查看日志(建议使用)
docker logs -t 容器编号/容器名 #查看某段时间的日志
docker port 容器编号/容器名 #查看容器映射的端口
docker ps -q #查询所有正在运行容器的id
docker stop $(docker ps -q) #关闭所有正在运行的容器
docker ps -a | grep "Exited" | awk '{print $1}' #拿到所有停止容器的id
docker ps -aq -f status=exited #拿到所有停止容器的id
docker rm -f $(docker ps -aq -f status=exited) #删除所有停止的容器
容器默认使用的是宿主机的DNS,但是也可以自己指定
docker run -it --dns 8.8.8.8 centos:latest bash #(--dns 指定dns地址)
docker updat 容器 --cpu 2 #更新容器的配置
docker events 容器 #获取dockerd的实时事件
docker wait 容器 #获取容器的状态码,一般用于监控,监控容器是否正常关闭
docker cp a80ceb7e161b:/etc/hosts /opt/ #从容器中拷贝文件到宿主机,默认会覆盖
docker cp /opt/hosts a80ceb7e161b:/etc/ #从宿主机中拷贝文件到容器,默认会覆盖
十、总结docker的存储引擎
unionFS十文件级的存储驱动,实现方式是把不同位置的目录或文件合并挂载到同一目的目录中。简单来说就是支持将不同目录挂载到同一虚拟文件系统下的文件系统,这种文件系统可以一层一层的叠加修改文件,无论底下有多少层,都是只读的,只有最上层的文件系统是可写的。
docker的存储引擎有以下:
overlay:unionFS文件系统,linux内核3.18后支持
overlay2:overlay的升级版,到目前为止,所有linux发行版本推荐使用的存储类型
devicemapper:早起centos和rhel推荐使用的存储类型。现在推荐使用overlay2
ZSF:目前没有广泛使用
vfs:用于测试环境,适用于无法使用写时复制的情况,此存储驱动程序很差一般不用于生产、
AUFS:是早期的一种unionFS的实现,是docker18.06及更早的版本使用的存储引擎
存储引擎参数配置:/etc/docker/daemon.json 文件中storage-driver标签可以配置
注意:centos7.2及以前默认使用的devicemapper存储引擎,不能直接使用overlay,除非新加一块磁盘作为docker数据盘,在格式话的时候指定格式化参数-n ftype=1。
十一、总结docker的-v和-p的使用
docker run -it --name 容器名称 -d -p 192.168.254.129:8800:8080/udp -p 8801:8080 tomcat:latest #-p也可以这样多指定端口和指定宿主机的那个ip,也可以指定协议,不指定默认tcp协议
docker run -it --name 容器名称 -d -p 192.168.254.129::8080 -p 8801:8080 tomcat:latest # -p指定指定地址随机分配端口
docker run -it -d -p 3307:3306 --env MYSQL_ROOT_PASSWORD="mageedu" -v /opt/data/mysql:/var/lib/mysql -v /opt/data/conf/my.cnf:/var/lib/mysql/conf/my.cnf:ro mysql:latest #-v指定容器内指定目录到宿主机的指定目录,上面的例子是将容器的mysql数据目录/var/lib/mysql,指定到宿主机的/opt/data/mysql目录,这样容器被删除,数据不会被删除;
也可挂载多个文件和目录,:ro是给/var/lib/mysql/conf/my.cnf在容器里只有只读权限。默认是rw读写权限。
十二、使用docker创建MySQL容器并把数据保存到宿主机的/data/mysql
docker run -it -d -p 3306:3306 --env MYSQL_ROOT_PASSWORD="wang" -v /data/mysql:/var/lib/mysql mysql:latest