资讯详情

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用户权限不会影响整个系统的安全

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

  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


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 构建步骤

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

标签: 0228连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台