1、Linux下MySQL实用技巧
操作系统:centos7.6
MySQL:5.7
MySQL:8.0
1.1 Linux下MySQL卸载
1.1.1 查看Linux是否安装MySQL
rpm -qa | grep -i mysql
若有使用rm -rf xxx
删除MySQL文件
rm -rf xxx
手动删除MySQL配置文件my.cnf
rm -rf /etc/my.cnf
1.1.2 删除所有MySQL文件
使用find / -name xxx
查看所有MySQL文件
find / -name mysql
删除所有MySQL文件
rm -rf xxx
检查是否再次删除
find / -name mysql
1.2 Linux下安装MySQL5.7
1.2.1 下载Linux下的MySQL安装包
:https://dev.mysql.com/downloads/mysql/5.7.html#downloads
1.2.2 将安装包上传到服务器上
:Xftp5
1.2.3 解压MySQL安装包
tar -xvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz
检查解压后的文件
ll
1.2.4 移动MySQL并且重命名
mv mysql-5.7.35-linux-glibc2.12-x86_64 /usr/local/mysql
切换到MySQL目录下(代表移动成功)
cd /usr/local/mysql
1.2.5 创建MySQL组和用户并设置权限
- 让MySQL使用独立帐户运行时
- 如果MySQL如果你被黑客攻击,你开始获得的权限是创建的账户,而不是默认的账户root
- 我们在编译和安装时创建了一个mysql组和一个mysql用户,并把datadir主改为安装目录mysql
- 在MySQL启动时,单进程mysqld,这过程的所有者是mysql
- 这样就保证了mysql即使是服务的独立性mysql服务被黑了,得到了mysql用户权限不会影响整个系统的安全
groupadd mysql
useradd -g mysql mysql
groups mysql
1.2.6 创建数据目录并授权权限
mkdir -p /data/mysql #创建目录 chown mysql:mysql -R /data/mysql #授予权限(变更)mysql文件所有者及所属组 -R 递归修改mysql文件下所有子文件所有者及所属组)
1.2.7 配置my.cnf
vim /etc/my.cnf
内容:
[mysqld] bind-address=0.0.0.0 port=3306 user=mysql basedir=/usr/local/mysql datadir=/data/mysql socket=/tmp/mysql.sock log-error=/data/mysql/mysql.err pid-file=/data/mysql/mysql.pid #character config character_set_server=utf8mb4 symbolic-links=0 explicit_defaults_for_timestamp=true
1.2.8 初始化数据库
cd /usr/local/mysql/bin
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
cat /data/mysql/mysql.err
初始化密码:4d-nmQ hFer1 IkRkJa,,N9>s
1.2.9 启动mysql,并更改root 密码
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
sservice mysql start
cd /usr/local/mysql/bin ./mysql -uroot -p
SET PASSWORD = PASSWORD('MySQL.481266251.mysql'); ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; FLUSH PRIVILEGES;
1.2.10 远程连接MySQL
use mysql #访问mysql库 update user set host = '%' where user = 'root'; #使root能再任何host访问 FLUSH PRIVILEGES; #刷新
firewall-cmd --add-port=3306/tcp --permanent 开放3306端口 firewall-cmd --reload 刷新端口 firewall-cmd --query-port=3306/tcp 查看是否开放3306端口
1.2.11 不用进入bin目录用mysql指令设置
ln -s /usr/local/mysql/bin/mysql /usr/bin #创建软连接
1.2.12 至此完美撒花!!!
1.3 查看MySQL服务是否启动
1.3.1 查看
systemctl status mysql
1.3.2 启动
systemctl start mysql
1.3.3 停止
systemctl stop mysql
2、Linux实用技巧
2.1 永久修改服务器主机名
**注意:**如果是 CentOS 7操作系统,可以使用命令:
hostnamectl set-hostname
主机名 来修改,修改完毕后重新登录或者重启服务器即可。2.1.1
uname- n
hostname
2.1.2 永久修改主机名的方法
指令:
hostnamectl set-hostname 名称
hostnamectl set-hostname cms-01
**完成:**从新连接服务器即可。
2.2 Linux目录介绍
2.2.1 /bin
/bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。
2.2.1 /ect
/ect 存放系统管理和配置文件
2.2.2 /home
/home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
2.2.3 /usr
/usr 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。 /usr/local 本地系统管理员软件安装目录(安装系统级的应用) /usr/x11r6 存放x window的目录 /usr/bin 众多的应用程序 /usr/sbin 超级用户的一些管理程序 /usr/doc linux文档 /usr/include linux下开发和编译应用程序所需要的头文件 /usr/lib 常用的动态链接库和软件包的配置文件 /usr/man 帮助文档 /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里 /usr/local/bin 本地增加的命令 /usr/local/lib 本地增加的库
2.2.4 /opt
/opt 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。
2.2.5 /proc
/proc 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
2.2.6 /root
/root 超级用户(系统管理员)的主目录(特权阶级^o^)
2.2.7 /sbin
/sbin 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等
2.2.8 /dev
/dev 用于存放设备文件。
2.2.9 /mnt
/mut 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统。
2.2.10 /boot
/boot 存放用于系统引导时使用的各种文件
2.2.11 /lib
/lib 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。
2.2.12 /tmp
/tmp 用于存放各种临时文件,是公用的临时文件存储点。
2.2.13 /var
/var 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。
2.2.14 /lost+found
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
2.3 Linux组、用户管理
2.3.1 用户管理简介
linux把通过把用户分为三个基本组,user,group,other来分配基本的权限
用户通过
/etc/passwd
用过用户名来获取用户的uid,通过/etc/group
来获取用户所属组的gid,系统只能通过id号来识别用户。所以,越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范。在linux中主要是通过用户配置文件来查看和修改用户的信息。2.3.2 用户(user)和用户组(group)概念
2.3.2.1 用户(user)的概念
通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(user)。比如我们的同事想用我的计算机,但我不想让他用我的用户名登录,因为我的用户名下有不想让别人看到的资料和信息(也就是隐私内容)这时我就可以给他建一个新的用户名,让他用我所开的用户名去折腾,这从计算机安全角度来说是符合操作规则的;
当然用户(user)的概念理解还不仅仅于此,在Linux系统中还有一些用户是用来完成特定任务的,比如nobody和ftp 等,我们访问LinuxSir.Org 的网页程序,就是nobody用户;我们匿名访问ftp 时,会用到用户ftp或nobody ;如果您想了解Linux系统的一些帐号,请查看 /etc/passwd ;
2.3.2.2 用户组(group)的概念
用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的;
举例:我们为了让一些用户有权限查看某一文档,比如是一个时间表,而编写时间表的人要具有读写执行的权限,我们想让一些用户知道这个时间表的内容,而不让他们修改,所以我们可以把这些用户都划到一个组,然后来修改这个文件的权限,让用户组可读,这样用户组下面的每个用户都是可读的;
2.3.2.3 用户和用户组的对应关系是:一对一、多对一、一对多或多对多;
一对一:某个用户可以是某个组的唯一成员; 多对一:多个用户可以是某个唯一的组的成员,不归属其它用户组;比如beinan和linuxsir两个用户只归属于beinan用户组; 一对多:某个用户可以是多个用户组的成员;比如beinan可以是root组成员,也可以是linuxsir用户组成员,还可以是adm用户组成员; 多对多:多个用户对应多个用户组,并且几个用户可以是归属相同的组;其实多对多的关系是前面三条的扩展;理解了上面的三条,这条也能理解;
2.3.2 用户信息文件:/etc /passwd
/etc /passwd
2.3.2 组信息文件:/etc /group
/etc /group
2.3.4 用户管理指令
2.3.4.1 添加用户
指令:
adduser [选择] 用户名
-u UID :手工指定用户的UID; -d 家目录:手工指定用户的家目录; -c 用户说明:手工指定用户的用户说明; -g 组名:手工指定用户的初始组; -G 组名:指定用户的附加组; -s shell:手工指定用户登陆的shell,默认是/bin/bash;
useradd myuser
此时:用户家目录为
/home/myuser
useradd -d /home/myuser -m myuser
注意: 我们创建用户的时候会默认创建一个和,但是有时有需求需要指定用户组,可以使用
-g
命令来完成用户创建,前提条件是指定的用户组已存在useradd -g mygroup myuser
2.3.4.2 设置用户密码
指令:
passwd 普通用户名
passwd myuser
输入passwd命令后按回车键后输入两次密码即可。
2.3.4.3 切换用户
指令:
su
su myuser
su root
2.3.4.5 添加用户组
指令:
groupadd 用户组名称
groupadd mygroup
2.3.4.6 删除用户
指令:
userdel 用户名
注意: 删除用户使用命令userdel,示例:userdel myuser,使用这个命令的话只会删除用户,用户的主目录不会被删除,如果需要删除用户的时候也将用户主目录删除则可以使用-r,示例:userdel -r myuser
userdel myuser
userdel -r myuser
2.3.4.7 删除用户组
指令:
groupdel 组名
注意:被删除的用户组不可以是任何用户的,否则删除失败。用户组删除完成后可以到/etc/group文件中去查看被删除则用户组名称已经不存在了。
groupdel myuser
2.3.4.8 更改用户所在组
指令:
usermod -g 组名 用户名
usermod -g mygroup myuser
指令:
gpasswd -a 用户名 用户组
gpasswd -a myuser test
2.3.4.9 查看用户信息
w who
whoami
last 查看登录成功用户 lastb 查看登录失败用户
cat /etc/passwd
2.3.4.10 查看某个用户所属的组
指令:groups 用户名
groups myuser
2.3.4.11 查看系统所有组
cat /etc/group
2.3.4.12 查看当前用户所在组信息
指令:
id
id
注意:一个用户可以用户多个组(groups)
2.4 文件或目录权限的简介
2.4.1 Linux下的文件权限
在linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问。最为我们熟知的一个文件或目录可能拥有三种权限,分别是读、写、和执行操作,在这里不做详细说明。我们创建一个文件后系统会默认地赋予所有者读和写权限。当然我们也可以自己修改它,添加自己需要的权限。
2.4.2 Linux文件权限解析
home 目录为例:drwxr-xr-x. 3 root root 4096 Mar 14 17:57 home 第一组参数代表(类型):d 当为[ d ]则是目录, 当为[ - ]则是档案, 若是[ l ]则表示为链接文件(link file),目录的快捷方式 若是[ b ]则表示为装置档里面的可供储存的周边设备(可随机存取装置); 若是[ c ]则表示为装置档里面的序列埠设备,例如
键盘、滑鼠(一次性读取装置)。 第二组参数代表(所有者(user)):rwx(读、写、执行) r 表示文件可以被读(read) w 表示文件可以被写(write) x 表示文件可以被执行(如果它是程序的话) 第三组参数代表(组群(group)):r-x(读、执行) r 表示文件可以被读(read) - 表示没有权限 x 表示文件可以被执行(如果它是程序的话) 第四组参数代表(其他人(other)):r-x(读、执行) r 表示文件可以被读(read) - 表示没有权限 x 表示文件可以被执行(如果它是程序的话) 3:代表链接数 root:所有者 root:所属用户组 4096:文件大小 Mar 14 17:57:最近修改时间 home:文件名
2.4.3 文件权限操作(增、删)
2.4.3.1 权限介绍
权限 | 简写 | 对普通文件的作用 | 对文件夹的作用 |
---|---|---|---|
读取 | r | 查看文件内容 | 列出文件夹中的文件(ls) |
写入 | w | 修改文件内容 | 在文件夹中删除、添加或重命名文件(夹) |
执行 | x | 文件可以作为程序执行 | cd 到文件夹 |
2.4.3.1 修改文件访问权限
指令:chmod 权限 文件名
chmod 777 cms
指令:chmod -R 权限 主文件名
chmod -R 777 hello
2.5 Linux端口管理(开放、关闭)
2.5.1 查看端口是否已开
指令:firewall-cmd --query-port=端口号/tcp
firewall-cmd --query-port=8080/tcp
no:表示未开启
yes:表示已开启
2.5.2 添加指定需要开放的端口
指令:firewall-cmd --add-port=端口号/tcp --permanent
firewall-cmd --add-port=8080/tcp --permanent
指令:firewall-cmd --reload
firewall-cmd --reload
firewall-cmd --query-port=8080/tcp
提示:yes表示开放成功!
2.5.3 关闭指定端口
指令:firewall-cmd --permanent --remove-port=端口号/tcp
firewall-cmd --permanent --remove-port=3306/tcp 关闭
firewall-cmd --reload 刷新
2.6 查看防火墙状态
测试:针对Centos7.x
版本
2.6.1 查看防火墙状态
systemctl status firewalld
关闭状态:
开启状态:
2.6.2 开启防火墙
systemctl start firewalld
2.6.3 关闭防火墙
systemctl stop firewalld
2.6.4 如无法启动
先用:systemctl unmask firewalld.service
然后:systemctl start firewalld.service
2.7 查看日志指令
2.7.1 tail -f xxx
作用:动态查看日志信息(文件改名或删除就停止追踪)
tail -f 文件路径
2.7.1 tail -F xxx
作用:动态查看日志信息(根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪)
tail -F 文件路径
2.7.1 tail -fn [行数] xxx
作用:动态查看日志信息(指定打印最后的行数)
tail -fn 10 文件路径
注意:这个可以节省内存
2.8 pwd指令
作用:获取当前目录路径
pwd
2.9 vim 删除操作
1、显示行号
set nu
2、删除指定行(删除一到八行:1,8d)
1,8d 回车
2、删除全部(1,$d)
1,$d 回车
3、Linux下搭建Java开发环境
Oracle账号:xxxx
Oracle密码:xxxx
3.1 下载jdk8
地址:https://www.oracle.com/java/technologies/downloads/#java8
3.2 jdk压缩包上传到服务器
工具:Xftp 5
3.3 解压jdk安装包
tar -zxvf jdk-8u321-linux-x64.tar.gz
3.4 移动jdk并且重命名
mv jdk1.8.0_321 /usr/local/java
3.5 配置jdk环境变量
3.5.1 修改/etc/profile配置文件
vim /etc/profile
:打开/etc/profile
配置文件,在末尾行添加以下内容(环境变量)
JAVA_HOME=/usr/local/java
PATH=/usr/local/java/bin:$PATH
CLASSPATH=.:/usr/local/java/lib/dt.jar:/usr/local/java/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
3.5.2 刷新配置文件并检查
source /etc/profile
4、Linux下Tomcat服务搭建
安装版本:Tomcat9
4.1 安装Tomcat
4.1.1 下载tomcat
地址:https://tomcat.apache.org/download-90.cgi
4.1.2 把tomcat压缩包上传到服务器
工具:Xftp 5
4.1.3 解压Tomcat压缩包
tar -zxvf apache-tomcat-9.0.60.tar.gz
4.1.4 移动Tomcat并且重命名
mv apache-tomcat-9.0.60 /opt/tomcat
4.1.5 启动Tomcat
4.1.5.1 进入:/bin目录
cd /opt/tomcat/bin
4.1.5.2 启动tomcat:./satrtup.sh
./startup.sh
4.1.5.3 浏览器访问(测试是否成功)
输入地址:IP:8080
http://114.132.217.164:8080/
4.1.5.6 如果访问失败
**注意:**如果不能访问,现在开始我们来配置防火墙,开放8080端口!
4.2 Tomcat部署web应用
4.2.1 使用IDEA打包Maven托管的WEB项目
4.2.2 上传war包到Tomcat服务器
工具:Xftp 5
4.2.3 查看上传的war包
cd /opt/tomcat/webapps
ll
4.2.4 访问web应用
地址:http://IP:端口号/项目名
http://114.132.217.164:8080/hello-web/
4.3.5 webapps下面目录介绍
4.3.5.1 Tcmcat目录结构
4.3.5.2 Tcmcat目录及文件说明
目录及文件 | 说明 |
---|---|
用于存放 Tomcat的启动、停止等批处理脚本和Shell脚本 | |
bin/startup. bat | 用于在 Windows下启动 Tomcat |
bin/startup.sh | 用于在 Linux下启动 Tomcat |
bin/shutdown. bat | 用于在 Windows下停止 Tomcat |
bin/shutdown.sh | 用于在 Linux下停止 Tomcat |
用于存放 Tomcat的相关配置文件 | |
conf/Catalina | 用于存储针对每个虚拟机的 Context 配置 |
conf/context.xml | 用于定义所有Web应用均需要加载的 Context 配置,如果Web应用指定了自己的context.xml,那么该文件的配置将被覆盖 |
conf/catalina.properties | Tomcat环境变量配置 |
conf/catalina.policy | 当 Tomcat在安全模式下运行时,此文件为默认的安全策略配置 |
conf/logging.properties | Tomcat日志配置文件,可通过该文件修改 Tomcat日志级别以及日志路径等 |
conf/server.xml | Tomcat服务器核心配置文件,用于配置 Tomcat的链接器、监听端口、处理请求的虚拟主机等。可以说,Tomcat主要根据该文件的配置信息创建服务器实例 |
conf/tomcat-users.xml | 用于定义 Tomcat默认用户及角色映射信息,Tomcat的 Manager模块即用该文件中定义的用户进行安全认证 |
conf/web.xml | Tomcat中所有应用默认的部署描述文件,主要定义了基础 Servlet和MIME映射。如果应用中不包含 Web. xml,那么 Tomcat将使用此文件初始化部署描述,反之,Tomcat会在启动时将默认部署描述与自定义配置进行合并 |
Tomcat服务器依赖库目录,包含 Tomcat服务器运行环境依赖lar包 | |
Tomcat默认的日志存放路径 | |
Tomcat默认的Web应用部署目录 | |
存放Web应用JSP代码生成和编译后产生的class文件目录 | |
存放tomcat在运行过程中产生的临时文件 |
4.3.6 查看Tomcat日志
指令:tail -f 日志文件
tail -f /opt/tomcat/logs/catalina.out
5、Linux下Docker实用技巧
5.1 Liunx下安装docker
5.1.1 卸载docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
5.1.2 安装docker依赖的安装工具包
yum install -y yum-utils
5.1.3 设置docker镜像仓库
1、使用阿里云镜像
yum-config-manager --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5.1.4 安装docker相关内容
5.1.4.1 更新软件包索引
yum makecache fast
5.1.4.2 安装docker
yum install docker-ce docker-ce-cli containerd.io
5.1.5 启动docker
systemctl start docker
5.1.6 查看docker是否安装成功
docker version
5.1.7 docker测试
run:运行镜像
docker run hello-word
5.1.8 查看刚下载的hello-world镜像
docker images
至此:安装成功!
5.2 docker的基础命令
5.2.1 docker帮助命令
docker vesion 查看docker版本
docker info 查看docker系统信息
docker 命令名 --help 查看命令作用
5.2.2 镜像命令
docker images 查看所有镜像
命令:docker images
[root@VM-8-3-centos /]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 6 months ago 13.3kB # 解析 REPOSITORY 镜像仓库源 TAG 镜像
标签 IMAGE ID 镜像ID CREATED 镜像创建时间 SIZE 镜像大小 # 可选参数 -a --all 显示列出所有镜像 -q --quite 只显示镜像ID # 基本使用 docker images 查看所有镜像 docker images -a 查看所有镜像与docker images一致 docker images -q 查看镜像ID docker images -aq 查看所有镜像ID
docker search 搜索镜像
命令:docker search 镜像名
docker search mysql
添加筛选条件
命令:docker search 镜像名 -f=stars=size
docker search mysql -f=stars=5000 #按stars筛选
docker pull 拉取镜像
命令:docker pull 镜像名
docker pull mysql #默认拉取最新版镜像
docker pull mysql:5.7 #拉取指定版本镜像
docker rmi 删除镜像
命令:docker rmi xxx
docker rmi 05311a87aeb4 #按镜像ID删除镜像
docker rmi $(docker images -qa) #删除所有镜像
注意:如果删除失败那就是没有删除镜像已启动过的容器,所以删除失败就先删除容器在删除镜像。
5.2.3 容器命令
run 运行容器
docker run [可选参数] 镜像ID
参数:
--name="为容器起别名"
-d 后台运行
-it 交互运行(进入容器查看内容)
-p 指定容器端口号
第一种:-p 主机端口:容器端口(常用)
第二种:-p 容器端口号
测试案例:
命令:docker run -it 镜像ID
docker run -it eeb6ee3f44bd /bin/bash #交互运行(运行并且进入容器内部查看内容)
命令:docker run -d 镜像ID
docker run -d eeb6ee3f44bd
exit 退出容器
exit #直接从容器内退出并且停止容器
Ctrl+P+Q #退出但不停止容器
启动容器和停止容器
docker start 容器ID #启动容器
docker restart 容器ID #重启容器
docker stop 容器ID #关闭容器
docker kill 容器ID #强制关闭容器
rm删除容器
docker rm 容器ID #普通删除
docker rm -f 容器ID #强制删除
docker rm -f $(docker ps -aq) #强制删除全部
5.2.4 常用命令
run -d 后台运行容器
命令:docker run -d 镜像ID
docker run -d eeb6ee3f44bd
问题:使用docker run -d 运行镜像了,但使用docker ps查看发现没有启动的容器
原因:docker 容器使用后台运行,就必须有一个前台进程,否则docker会自动停止该容器
logs -tf --tail 查看容器日志
命令:docker logs -tf --tail 容器ID
docker logs -tf --tail eeb6ee3f44bd
top 查看容器进程信息
命令:docker top 容器ID
docker top eeb6ee3f44bd
inspect 查看容器元数据
命令:docker inspect 容器ID
docker inspect 53fb3d9e21f7
#内容
[
{
"Id": "53fb3d9e21f75cf566dd34d6ef0ac13deedfff6abd5477fe58b91f4f1e938b4f",
"Created": "2022-03-24T10:29:41.525983925Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 9965,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-03-24T10:29:41.809278605Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9",
"ResolvConfPath": "/var/lib/docker/containers/53fb3d9e21f75cf566dd34d6ef0ac13deedfff6abd5477fe58b91f4f1e938b4f/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/53fb3d9e21f75cf566dd34d6ef0ac13deedfff6abd5477fe58b91f4f1e938b4f/hostname",
"HostsPath": "/var/lib/docker/containers/53fb3d9e21f75cf566dd34d6ef0ac13deedfff6abd5477fe58b91f4f1e938b4f/hosts",
"LogPath": "/var/lib/docker/containers/53fb3d9e21f75cf566dd34d6ef0ac13deedfff6abd5477fe58b91f4f1e938b4f/53fb3d9e21f75cf566dd34d6ef0ac13deedfff6abd5477fe58b91f4f1e938b4f-json.log",
"Name": "/trusting_moore",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/1988b6824492d35e45b56e4092714f0890e028669cd3613898556a95ef5110b1-init/diff:/var/lib/docker/overlay2/8fbf196da5a2aa6fbcb12bd46b5fb63da1672fb4e1b08526136a6dafb1883962/diff",
"MergedDir": "/var/lib/docker/overlay2/1988b6824492d35e45b56e4092714f0890e028669cd3613898556a95ef5110b1/merged",
"UpperDir": "/var/lib/docker/overlay2/1988b6824492d35e45b56e4092714f0890e028669cd3613898556a95ef5110b1/diff",
"WorkDir": "/var/lib/docker/overlay2/1988b6824492d35e45b56e4092714f0890e028669cd3613898556a95ef5110b1/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "53fb3d9e21f7",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": true,
"OpenStdin": true,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"Image": "eeb6ee3f44bd",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20201113",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS",
"org.opencontainers.image.created": "2020-11-13 00:00:00+00:00",
"org.opencontainers.image.licenses": "GPL-2.0-only",
"org.opencontainers.image.title": "CentOS Base Image",
"org.opencontainers.image.vendor": "CentOS"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "0bed6d0b59ad9f59eb2623d678fb2966350f1382dc84fb8bfaef79fbf9dc48ff",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/0bed6d0b59ad",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "e700c461d826cff91ef9bedfd7233caf5e94b26c783ea07610ffb42f05c5af04",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "202b033eec811616edd474672ee7fb585d1c24b993ac3ab52e0228dd109ff331",
"EndpointID": "e700c461d826cff91ef9bedfd7233caf5e94b26c783ea07610ffb42f05c5af04",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
exec -it 进入正在运行的容器内
命令:docker exec -it 容器ID /bin/bash
docker exec -it 53fb3d9e21f7 /bin/bash
attach 进入容器正在运行位置
命令:docker attach 容器ID
docker attach 53fb3d9e21f7
cp 从容器拷贝内容到主机
命令:docker cp 容器ID:内容位置 主机位置
docker cp 53fb3d9e21f7:/home/hello.java /
5.3 实操案例
5.3.1 部署Tomcat
# 拉取镜像
docker pull tomcat:9
# 查看镜像
docker images
# 运行镜像
docker run --name tomcat01 -d -p 3355:8080 镜像ID
# 查看运行状态
docker ps
# 测试
主机IP:3355
5.4 提交镜像
docker commit -a="提交作者" im="提交的描述信息" 容器ID 镜像名:TAG
5.5 容器数据卷
5.5.1 什么是数据卷?
Dokcer容器中的数据挂载到本地(同步到本地)
**方式一:**直接使用命令挂载 -v
# 命令格式
docker run -it -v 主机地址:docker容器内地址 centos /bin/bash
# 测试
docker run -it -v /home/ceshi:/home centos /bin/bash
# 启动后通过 docker inspect 容器ID 查看是否挂载成功
docker inspect 16e9e5f3ac6b
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi", # 挂载地址
"Destination": "/home", # 容器内目录
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
# 测试文件是否共享的
1、在容器挂载主机地址创建一个hello.java文件
2、进入容器查看是否也同样生成了hello.java文件
1、在容器挂载主机地址创建一个hello.java文件
2、进入容器查看是否也同样生成了hello.java文件
3、测试成功(容器内和容器挂载的目录是同步共享的)
4、注意点
哪怕容器停止了(只要还存在),文件依然是同步的。
5.5.2 实战MySQL同步数据
实现数据同步化!
# 拉取镜像
docker pull mysql:8.0
# 运行容器,同时做数据挂载!注意:安装MySQL需要设置密码。
docker run -d -p 3310:3306 -v /home/mysqltest/conf:/etc/mysql/conf.d -v/home/mysqltest/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysqltest 667ee8fb158e
# 解析命令
run 运行容器
-d 后台运行
-p 端口映射
-v 挂载目录(实现数据同步)
-e 环境配置
--name 给容器设置名称
5.2.3 匿名挂载俱名挂载
-v 容器内路径
-v 卷名:容器内路径
-v /主机挂载地址:容器内地址
5.6 DockerFile
5.6.1 入门测试
注意:
docker build -f 构建镜像的文件 -t 镜像名:版本 镜像生成后位置
build #构建镜像
-f #指定生成镜像配置文件位置
-t #指定生成文件的名称和版本
5.6.2 构建步骤
- 编写一个 dockerfile 文件
- docker build 构建成一个镜像
- docker run 运行镜像
- docker push 发布镜像(DockerHub、阿里云仓库!)