Liunx【定制化】~ 乱仓库

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组和用户并设置权限

  1. 让MySQL运行的时候使用一个独立的账号
  2. 如果MySQL被黑了那么开始拿到的权限就是那个创建的账号而不是默认的root
  3. 我们在编译安装的时候创建一个mysql组和一个mysql用户,并把datadir和安装目录属主改为mysql
  4. 在MySQL启动的时候,单进程mysqld,该进程的属主就是mysql
  5. 这样就保证了mysql服务的独立性,即使mysql服务被黑掉,得到了mysql用户权限,也不会影响整个系统的安全

1、创建MySQL用户组

groupadd mysql

2、创建MySQL用户并指定mysql组

useradd -g mysql mysql

3、查看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 初始化数据库

1、进入mysql的bin目录

cd /usr/local/mysql/bin

2、初始化

./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize

3、查看密码

cat /data/mysql/mysql.err

初始化密码:4d-nmQ+hFer1 IkRkJa,,N9>s


1.2.9 启动mysql,并更改root 密码

1、先将mysql.server放置到/etc/init.d/mysql中

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

2、启动MySQL服务

sservice mysql start

3、修改MySQL密码

首先登录mysql,前面的那个是随机生成的。

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

1、连接失败


2、解决连接失败问题

use mysql                                            #访问mysql库
update user set host = '%' where user = 'root';      #使root能再任何host访问
FLUSH PRIVILEGES;                                    #刷新

3、连接成功


4、如果还不能连接就开放3306端口

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 用户管理简介

  1. linux把通过把用户分为三个基本组,user,group,other来分配基本的权限

  2. 用户通过/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

注意:Root不一定是管理员 uid=0的一定是管理员


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;

1、不加任何参数,仅创建用户

useradd myuser

此时:用户家目录为/home/myuser


2、-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录

useradd -d /home/myuser -m myuser

3、-g 用户组 指定用户所属的用户组

注意: 我们创建用户的时候会默认创建一个和用户名相同的用户组,但是有时有需求需要指定用户组,可以使用-g命令来完成用户创建,前提条件是指定的用户组已存在

useradd -g mygroup myuser

2.3.4.2 设置用户密码

指令:passwd 普通用户名

passwd myuser

普通用户或root用户修改自己的密码: 输入passwd命令后按回车键后输入两次密码即可。


2.3.4.3 切换用户

指令:su


1、超级用户切换普通用户su 用户名(不用密码)

su myuser

2、普通用户切换root(超级管理员)用户要密码

su root

2.3.4.5 添加用户组

指令:groupadd 用户组名称

groupadd mygroup

2.3.4.6 删除用户

指令:userdel 用户名

注意: 删除用户使用命令userdel,示例:userdel myuser,使用这个命令的话只会删除用户,用户的主目录不会被删除,如果需要删除用户的时候也将用户主目录删除则可以使用-r,示例:userdel -r myuser


1、userdel 用户名(使用这个命令的话只会删除用户,用户的主目录不会被删除)

userdel myuser

2、userdel -r 用户名(如果需要删除用户的时候也将用户主目录删除则可以使用-r)

userdel -r myuser

2.3.4.7 删除用户组

指令:groupdel 组名


1、groupdel 组名

注意:被删除的用户组不可以是任何用户的主用户组,否则删除失败。用户组删除完成后可以到/etc/group文件中去查看被删除则用户组名称已经不存在了。

groupdel myuser

2.3.4.8 更改用户所在组

1、更换用户所在组

指令:usermod -g 组名 用户名

usermod -g mygroup myuser

2、把一个用户加入多个组

指令:gpasswd -a 用户名 用户组

gpasswd -a myuser test

2.3.4.9 查看用户信息

1、查看当前登录用户

w
who

2、查看自己的用户名

whoami

3、查看用户登录记录

last 查看登录成功用户
lastb 查看登录失败用户

4、查看所有用户

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 修改文件访问权限

1、修改单个文件权限(理解就够用)

指令:chmod 权限 文件名

chmod 777 cms

2、递归修改文件权限(修改主文件权限同时修改所有子文件权限)

指令: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 添加指定需要开放的端口

1、添加想要开放端口

指令:firewall-cmd --add-port=端口号/tcp --permanent

firewall-cmd --add-port=8080/tcp --permanent

2、重载入添加的端口(刷新端口)

指令:firewall-cmd --reload

firewall-cmd --reload

3、查看端口是否成功开放

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目录及文件说明
目录及文件说明
bin用于存放 Tomcat的启动、停止等批处理脚本和Shell脚本
bin/startup. bat用于在 Windows下启动 Tomcat
bin/startup.sh用于在 Linux下启动 Tomcat
bin/shutdown. bat用于在 Windows下停止 Tomcat
bin/shutdown.sh用于在 Linux下停止 Tomcat
conf用于存放 Tomcat的相关配置文件
conf/Catalina用于存储针对每个虚拟机的 Context 配置
conf/context.xml用于定义所有Web应用均需要加载的 Context 配置,如果Web应用指定了自己的context.xml,那么该文件的配置将被覆盖
conf/catalina.propertiesTomcat环境变量配置
conf/catalina.policy当 Tomcat在安全模式下运行时,此文件为默认的安全策略配置
conf/logging.propertiesTomcat日志配置文件,可通过该文件修改 Tomcat日志级别以及日志路径等
conf/server.xmlTomcat服务器核心配置文件,用于配置 Tomcat的链接器、监听端口、处理请求的虚拟主机等。可以说,Tomcat主要根据该文件的配置信息创建服务器实例
conf/tomcat-users.xml用于定义 Tomcat默认用户及角色映射信息,Tomcat的 Manager模块即用该文件中定义的用户进行安全认证
conf/web.xmlTomcat中所有应用默认的部署描述文件,主要定义了基础 Servlet和MIME映射。如果应用中不包含 Web. xml,那么 Tomcat将使用此文件初始化部署描述,反之,Tomcat会在启动时将默认部署描述与自定义配置进行合并
libTomcat服务器依赖库目录,包含 Tomcat服务器运行环境依赖lar包
logsTomcat默认的日志存放路径
webappsTomcat默认的Web应用部署目录
work存放Web应用JSP代码生成和编译后产生的class文件目录
temp存放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相关内容

docker-ce 社区版

docker-ee 企业版


5.1.4.1 更新软件包索引
yum makecache fast

5.1.4.2 安装docker

一路yes即可

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

DockerFile 用于编写镜像脚本!


5.6.1 入门测试

注意:

docker build -f 构建镜像的文件 -t 镜像名:版本 镜像生成后位置

build	#构建镜像
-f		#指定生成镜像配置文件位置
-t		#指定生成文件的名称和版本

5.6.2 构建步骤

  1. 编写一个 dockerfile 文件
  2. docker build 构建成一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(DockerHub、阿里云仓库!)

5.6.2 DockerFile 指令

待更新!!!

5.6.3 实战测试

待更新!!!

5.6 Docker网络

待更新!!!

6、SpringBoot使用技巧

待更新!!!

height: 100%;
/** 图片响应式样式 */
background: url('/img/index.png') no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值