栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Docker基础01--入门总结--(狂神说docker学习笔记)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker基础01--入门总结--(狂神说docker学习笔记)

文章目录
        • Docker学习笔记合集(持续更新)
        • 学习目录
    • 1.Docker概述
      • Docker为什么出现?
    • 2.Docker的历史
      • 聊聊Docker
    • 3.Docker的作用
        • 应用更快速的交付和部署
        • 更便捷的升级和扩缩容
        • 更简单的系统运维
        • 更高效的计算资源利用
    • 4.Docker的基本组成
        • 镜像(image):
        • 容器(container):
        • 仓库(repository):
    • 5.Dockers的安装
    • 6.Docker的卸载
    • 7.配置阿里云镜像加速
    • 8. Docker容器运行流程
    • 9. 底层原理
    • 10. Docker的常用命令
      • 10.1 基础命令
      • 10.2 镜像命令
      • 10.3 容器命令
      • 10.4 其他常用命令
    • 11. 常用容器部署
      • 11.1 Nginx部署
      • 11.2 Tomcat部署
      • 11.3 ElasticSearch部署
    • 12.Docker镜像详解
      • 12.1 什么是镜像
      • 12.2 Docker镜像加载原理
      • 12.3 分层理解
      • 12.4 提交镜像

Docker学习笔记合集(持续更新)

linux入门–服务器购买—宝塔部署环境说明
Nginx简单入门–学习笔记狂神说
Docker基础01–入门总结–(狂神说docker学习笔记)
Docker基础02–Docker容器数据卷详解–(狂神说docker学习笔记)
Docker基础03–Dockerfile详解与镜像发布–(狂神说docker学习笔记)
Docker基础04–Docker网络–(狂神说docker学习笔记)
Docker进阶01–Docker Compose–(狂神说docker学习笔记)

Docker知识点翻阅手册–Docker常用命令、Dockererfile、Compose、网络等整理合集
Docker实战:Mysql、Nginx、web的Docker化部署(安装、自定义镜像、compose管理容器、自定义网络、部署问题及解决)

学习目录

Docker概述
Docker安装
Docker命令–镜像命令 容器命令 操作命令
Docker镜像!
容器数据卷!
DockerFile
Docker网络原理
IDEA整合Docker
Docker Compose
Docker Swarm
CICD Jenkins

1.Docker概述 Docker为什么出现?

一款产品:开发–上线 两套环境!应用环境,应用配置!

开发 — 运维 问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就非常大!

环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis、ES、Hadoop…)

发布一个项目(jar+(Redis、MySQL、jdk、ES))项目能不能都带上环境安装打包!

之前在服务器配置一个应用的环境 Redis、MySQL、jdk、ES、Hadoop,配置越麻烦了,不能够跨平台

windows,最后发布到linux!

传统:开发jar,运维来做

现在:开发打包部署上线,一套流程做完

java - apk --发布(应用商店 ) --张三使用apk --安装即可用!

java - jar(环境) —打包项目带上环境(镜像) --(Docker仓库:商店) —下载我们发布的镜像 --直接运行即可!

Docker给以上的问题,提出了解决方案!

Docker的思想就来自于集装箱!

JRE — 多个应用(端口冲突)—原来都是交叉的!

隔离:Docker核心思想!打包装箱!每个箱子之间是互相隔离的。

水果、生化武器

Docker通过隔离机制,可以将服务器利用到机制!

本质:所有的技术都是因为出现了一些问题,我们需要去解决,才去学习!

2.Docker的历史

2010年,几个搞IT的年轻人,在美国成立了一家公司 dotCloud

做一些pass的云计算服务!LXC有关的容器技术!

他们将自己的技术(容器化技术)命名 就是 Docker!

Docker刚刚诞生的时候,没有引起行业的注意!

2013年开源–开发源代码!

2014年4月9日,Docker1.0发布!

Docker为什么这么火?十分的轻巧!

在容器技术出来之前,我们都是使用虚拟机技术!

虚拟机:在window中装一个Vmware,通过这个软件我们可以虚拟出来一台或多台电脑!笨重!

虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!

vm,linux centos原生镜像(一个电脑!) 隔离,需要开启多个虚拟机! 几个G  几分钟
docker,隔离,镜像(最核心的环境 4m  + jdk +mysql)十分小巧,运行镜像即可! 几个M KB 秒级

到现在,所有开发人员都必须要回Docker!

聊聊Docker

Docker是基于Go语言开发的!开源项目!

  • 官网

  • 官方文档Docker文档是超详细的

  • 仓库地址

3.Docker的作用

之前的虚拟机技术

虚拟机技术缺点:

1.资源占用很多

2.冗余步骤多

3.启动很慢!

容器化技术

容器化技术不是模拟的一个完整的操作系统

比较Docker和虚拟机技术的不同:

  • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件

  • 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以轻便了

  • 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响

DevOps(开发、运维)

应用更快速的交付和部署

传统:一堆帮助文档,安装程序

Docker:打包镜像、发布测试、一键运行

更便捷的升级和扩缩容

使用了Docker之后,我们部署应用就和搭积木一样!

(SpringBoot 1.5 Redis 5 tomcat8)打包成一个镜像,扩展 服务器A!服务器B

更简单的系统运维

在容器化之后,我们的开发,测试环境都是高度一致的。

更高效的计算资源利用

Docker是 内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致!

4.Docker的基本组成

Docker的基本组成图如下:

说明:

镜像(image):

docker镜像好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===》run==》tomcat01容器(提供服务器)通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)

容器(container):

Docker利用容器技术没独立运行一个或者一个组应用,通过镜像来创建的。

启动、停止、删除,基本命令

仓库(repository):

5.Dockers的安装

查看系统的内核:

uname -r

系统内核版本为3.10.0

[root@zecan ~]# uname -r
3.10.0-1062.18.1.el7.x86_64

查看系统配置

cat /etc/os-release

[root@zecan ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

Docker的安装步骤:
(1)卸载旧的版本

yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-engine

(2)下载需要的安装包

yum install -y yum-utils

(3)设置镜像的仓库

yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo  #国外的地址
    
    # 设置阿里云的Docker镜像仓库
yum-config-manager 
    --add-repo 
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #阿里云的地址

(4)更新yum软件包索引

yum makecache fast

(5)安装docker相关的配置

docker-ce 是社区版,docker-ee 企业版

 yum install docker-ce docker-ce-cli containerd.io

出现了completed即安装成功。

(6)启动Docker

systemctl start docker
# 查看当前版本号,是否启动成功
docker version
# 设置开机自启动
systemctl enable docker

结果:

下载hello-world镜像进行测试

查看下载的hello world镜像

[root@zecan ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   7 weeks ago   13.3kB
6.Docker的卸载
# 1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2. 删除资源  . /var/lib/docker是docker的默认工作路径
rm -rf /var/lib/docker
7.配置阿里云镜像加速

1)进入阿里云官网,搜索容器镜像服务

(2)依次执行官方的这四条命令

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://axvfsf7e.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
8. Docker容器运行流程

启动一个容器,Docker的运行流程如下图:

9. 底层原理

Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socker从客户端访问!Docker Server接收到Docker-Client的指令,就会执行这个指令!

Docker为什么比VM Ware快?

1、Docker比虚拟机更少的抽象层

2、docker利用宿主机的内核,VM需要的是Guest OS

Docker新建一个容器的时候,不需要像虚拟机一样重新加载一个操作系统内核,直接利用宿主机的操作系统,而虚拟机是需要加载Guest OS。Docker和VM的对比如下:

注:现GuestOS已全部适用

[

](https://blog.csdn.net/huangjhai/article/details/118854733)

10. Docker的常用命令 10.1 基础命令
docker version   # 显示dicker的版本信息
docker info      # 显示docker的系统信息,包括镜像和容器的数量
docker 命令  --help # 帮助命令

命令的帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/

10.2 镜像命令

1.docker images 查看本地主机的所有镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB

#解释:
1.REPOSITORY  镜像的仓库源

2.TAG  镜像的标签

3.IMAGE ID 镜像的id

4.CREATED 镜像的创建时间

5.SIZE 镜像的大小


# 可选参数

-a/--all 列出所有镜像

-q/--quiet 只显示镜像的id

2.docker search 搜索镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql
NAME                              DEscriptION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10308     [OK]
mariadb                           MariaDB is a community-developed fork of MyS…   3819      [OK]
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   754                  [OK]
percona                           Percona Server is a fork of the MySQL relati…   517       [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   86
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   79
centurylink/mysql                 Image containing mysql. Optimized to be link…   60                   [OK]


#可选参数

Search the Docker Hub for images

Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output
      
      
#搜索收藏数大于3000的镜像
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql --filter=STARS=3000
NAME      DEscriptION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10308     [OK]
mariadb   MariaDB is a community-developed fordockerk of MyS…   3819      [OK]

3.docker pull 镜像名[:tag] 下载镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql
Using default tag: latest            #如果不写tag默认就是latest
latest: Pulling from library/mysql
6ec7b7d162b2: Pull complete          #分层下载,docker image的核心-联合文件系统
fedd960d3481: Pull complete
7ab947313861: Pull complete
64f92f19e638: Pull complete
3e80b17bff96: Pull complete
014e976799f9: Pull complete
59ae84fee1b3: Pull complete
ffe10de703ea: Pull complete
657af6d90c83: Pull complete
98bfb480322c: Pull complete
6aa3859c4789: Pull complete
1ed875d851ef: Pull complete
Digest: sha256:78800e6d3f1b230e35275145e657b82c3fb02a27b2d8e76aac2f5e90c1c30873 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest  #下载来源的真实地址  #docker pull mysql等价于docker pull docker.io/library/mysql:latest

指定版本下载

[root@zecan ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
b380bbd43752: Already exists 
f23cbf2ecc5d: Already exists 
30cfc6c29c0a: Already exists 
b38609286cbe: Already exists 
8211d9e66cd6: Already exists 
2313f9eeca4a: Already exists 
7eb487d00da0: Already exists 
a71aacf913e7: Pull complete 
393153c555df: Pull complete 
06628e2290d7: Pull complete 
ff2ab8dac9ac: Pull complete 
Digest: sha256:2db8bfd2656b51ded5d938abcded8d32ec6181a9eae8dfc7ddf87a656ef97e97
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

4.docker rmi 删除镜像

#1.删除指定的镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  镜像id
#2.删除多个镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  镜像id 镜像id 镜像id
#3.删除全部的镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  $(docker images -aq)
10.3 容器命令

说明:有了镜像才可以创建容器

docker pull centos

新建容器并启动

docker run [可选参数] image

#参数说明
--name="名字"          指定容器名字  tomcat01 tomcat02,用来区分容器
-d                     后台方式运行
-it                    使用交互方式运行,进入容器查看内容
-p                     指定容器的端口 -p 8080:8080
(
   -p ip:主机端口:容器端口  配置主机端口映射到容器端口
   -p 主机端口:容器端口
   -p 容器端口
)
-P                     随机指定端口(大写的P)

#测试,并启动
[root@zecan ~]# docker run -it centos /bin/bash
[root@b3ac7a30eb8a /]# ls   #查看容器内地centos,基础版本,很多命令都是不完善的!
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

#从容器退回主机
[root@b3ac7a30eb8a /]# exit
exit
[root@zecan /]# ls
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  patch  proc  root  run  sbin  srv  sys  tmp  usr  var  www

列出所有的运行的容器

# docker ps 命令
		# 列出当前正在运行的容器
-a  # 列出当前正在运行的容器+带出历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的编号

[root@zecan /]# docker ps
ConTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@zecan /]# docker ps -a
ConTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
b3ac7a30eb8a   centos        "/bin/bash"   5 minutes ago    Exited (0) 4 minutes ago              optimistic_heyrovsky
332d452d5337   hello-world   "/hello"      31 minutes ago   Exited (0) 31 minutes ago             sleepy_mendel
72d42c07133b   hello-world   "/hello"      15 hours ago     Exited (0) 15 hours ago               pensive_germain
[root@zecan /]# 

删除容器

docker rm 容器id                 #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq)   #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器

启动和停止容器

docker start 容器id          #启动容器
docker restart 容器id        #重启容器
docker stop 容器id           #停止当前运行的容器
docker kill 容器id           #强制停止当前容器
10.4 其他常用命令

后台启动容器

#命令 docker run -d 镜像名!
[root@zecan /]# docker run -d centos

#问题docker ps,发现centos停止了

#常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

1.查看日志

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs --help

Usage:  docker logs [OPTIONS] ConTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  -n, --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)

常用:
docker logs -tf 容器id
docker logs --tail number 容器id #num为要显示的日志条数


#docker容器后台运行,必须要有一个前台的进程,否则会自动停止
#编写shell脚本循环执行,使得centos容器保持运行状态
[root@zecan /]# docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"
88947e8d3cf0fa5bdbd6e0577e77b74b8a53bf4dd6685bd00130829a8c7f2250
[root@zecan /]# docker ps
ConTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
88947e8d3cf0   centos    "/bin/sh -c 'while t…"   40 seconds ago   Up 39 seconds             loving_tesla
[root@zecan /]# docker logs -tf --tail 10 88947e8d3cf0
2021-11-16T02:39:04.210788277Z hi
2021-11-16T02:39:09.212892789Z hi
2021-11-16T02:39:14.214927123Z hi
2021-11-16T02:39:19.217185096Z hi
2021-11-16T02:39:24.219168601Z hi
2021-11-16T02:39:29.221417267Z hi
2021-11-16T02:39:34.223160841Z hi
2021-11-16T02:39:39.225251841Z hi
2021-11-16T02:39:44.227213547Z hi
2021-11-16T02:39:49.229377746Z hi
2021-11-16T02:39:54.231320967Z hi

2.查看容器中进程信息

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker top c703b5b1911f
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                11156               11135               0                   11:31               ?                   00:00:00            /bin/sh -c while true;do echo hi;sleep 5;done
root                11886               11156               0                   11:43               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5

3.查看容器的元数据

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker inspect 容器id

4.进入当前正在运行的容器

因为通常我们的容器都是使用后台方式来运行的,有时需要进入容器修改配置

方式一:

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash
[root@c703b5b1911f /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@c703b5b1911f /]# ps -ef      
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 03:31 ?        00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
root       279     0  0 03:54 pts/0    00:00:00 /bin/bash
root       315     1  0 03:56 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
root       316   279  0 03:56 pts/0    00:00:00 ps -ef

方式二:

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker attach c703b5b1911f

docker exec 进入容器后开启一个新的终端,可以在里面操作

docker attach 进入容器正在执行的终端,不会启动新的进程

拷贝容器的文件到主机中

docker cp 容器id:容器内路径 目的主机路径

#启动容器
[root@zecan /]# docker run -it centos /bin/bash
[root@a84d4273434f /]# 
[root@a84d4273434f /]# [root@zecan /]# 
[root@zecan /]# docker ps
ConTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
a84d4273434f   centos    "/bin/bash"   2 minutes ago   Up 2 minutes             great_sammet

#进入dockers容器内部
[root@zecan /]# docker attach a84d4273434f
[root@a84d4273434f /]# cd  /home
[root@a84d4273434f home]# touch zecan.txt
[root@a84d4273434f home]# ls
zecan.txt
[root@a84d4273434f home]# exit
exit
[root@zecan /]# docker ps -a
ConTAINER ID   IMAGE     COMMAND       CREATED         STATUS                      PORTS     NAMES
a84d4273434f   centos    "/bin/bash"   3 minutes ago   Exited (0) 12 seconds ago             great_sammet

# 将文件拷贝出来到主机上
[root@zecan /]# docker cp a84d4273434f:/home/zecan.txt /home
[root@zecan /]# cd /home
[root@zecan home]# ls
redis  www  zecan.txt

# 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现,自动同步

命令小节的图解如下:

可以把常用命令放进来
11. 常用容器部署 11.1 Nginx部署

(1)搜索并下载镜像

[root@zecan home]# docker search nginx
NAME                               DEscriptION                                     STARS     OFFICIAL   AUTOMATED
nginx                              Official build of Nginx.                        14207     [OK]       
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1932                 [OK]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   797                  [OK]
linuxserver/nginx                  An Nginx container, brought to you by LinuxS…   137                  
jc21/nginx-proxy-manager           Docker container for managing Nginx proxy ho…   123                  
tiangolo/nginx-rtmp                Docker image with Nginx using the nginx-rtmp…   107                  [OK]

[root@zecan home]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
7d63c13d9b9b: Pull complete 
15641ef07d80: Pull complete 
392f7fc44052: Pull complete 
8765c7b04ad8: Pull complete 
8ddffa52b5c7: Pull complete 
353f1054328a: Pull complete 
Digest: sha256:dfef797ddddfc01645503cef9036369f03ae920cac82d344d58b637ee861fda1
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@zecan home]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    04661cdce581   6 days ago     141MB
mysql         latest    ecac195d15af   4 weeks ago    516MB
hello-world   latest    feb5d9fea6a5   7 weeks ago    13.3kB
centos        latest    5d0da3dc9764   2 months ago   231MB

可以到dockerhub官网查看Nginx的详细版本信息 :https://hub.docker.com/_/nginx

(2)运行测试

-d 后台运行
--name 给容器命名
-p 3344:80 将宿主机的端口3344映射到该容器的80端口 

[root@zecan home]# docker run -d --name nginx01 -p 3344:80 nginx 
b4ce6a638ddcf76ad1eb85fe9735a39174860e984bc4cea94beb0dd9ac614d47
[root@zecan home]# docker ps
ConTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
b4ce6a638ddc   nginx     "/docker-entrypoint.…"   7 seconds ago   Up 6 seconds   0.0.0.0:3344->80/tcp   nginx01

端口暴露的概念:

外网

思考问题:我们每次改动nginx配置文件,都需要进入容器内部?十分麻烦,要是可以在容器外部提供一个映射路径,达到在容器修改文件名,容器内部就可以自动修改? - v 数据卷技术!

(3)配置文件
进入容器,自定义配置文件

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it nginx01 /bin/bash
root@20c896637ff5:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@20c896637ff5:/# cd /etc/nginx
root@20c896637ff5:/etc/nginx# ls
conf.d	fastcgi_params	koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params	uwsgi_params  win-utf
root@20c896637ff5:/# cd /etc/nginx
root@20c896637ff5:/etc/nginx# ls
conf.d	fastcgi_params	koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params	uwsgi_params  win-utf

(4)访问测试
本地主机访问测试,curl命令发起请求,如果使用阿里云服务器需要设置安全组。

[root@zecan home]# curl localhost:3344



Welcome to nginx!</ti 
<sty1e>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
Welcome to nginx!
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
nginx.org.<br/>
Commercial support is available at
nginx.com.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
</pre> 
<p></p> 
11.2 Tomcat部署 
<pre class='brush:php;toolbar:false'># 官网的使用  用完即删
docker run -it  --rm  tomcat:9.0
</pre> 
<p>(1)下载并运行</p> 
<pre class='brush:php;toolbar:false'>docker pull tomcat
docker run -d -p 3355:8080 --name tomcat01 tomcat
</pre> 
<p>(2)访问测试</p> 
<p>没有问题</p> 
<p></p> 
<p>(3)进入容器</p> 
<p>docker exec -it tomcat01 /bin/bash</p> 
<p>1.容器中的命令是少了</p> 
<p>2.阿里云镜像默认下载的是最小的镜像,保证最小的运行环境。</p> 
<pre class='brush:php;toolbar:false'>[root@zecan home]# docker exec -it tomcat01 /bin/bash
root@7115b1d34558:/usr/local/tomcat# ls
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
root@7115b1d34558:/usr/local/tomcat# cd webapps
root@7115b1d34558:/usr/local/tomcat/webapps# ls
root@7115b1d34558:/usr/local/tomcat/webapps# cd..
bash: cd..: command not found
root@7115b1d34558:/usr/local/tomcat/webapps# cd  ..
root@7115b1d34558:/usr/local/tomcat# cd webapps.dist
root@7115b1d34558:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager
root@7115b1d34558:/usr/local/tomcat/webapps# cd  ..
root@7115b1d34558:/usr/local/tomcat# cp -r webapps.dist/*  webapps
root@7115b1d34558:/usr/local/tomcat# cd webapps
root@7115b1d34558:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
</pre> 
<p></p> 
<p>思考问题:我们以后都要部署项目,如果每次都要进入而哦那个其是不是十分麻烦?我要是可以在容器外部提供一个映射路径,webapps,在外部放置项目,就自动同步到内部就好了!</p> 
11.3 ElasticSearch部署 
<ul><li> <p>es 暴露的端口很多!</p> </li><li> <p>es 十分的耗内存</p> </li><li> <p>es 的数据一般需要放置到安全目录!挂载</p> </li></ul> 
<pre class='brush:php;toolbar:false'># 启动 
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

# 启动了 linux就卡死了 docker  stats 查看 cpu的状态

# es是十分耗内存的,1.xG 1核2G

# 测试一下es是否成功
[root@zecan ~]# curl localhost:9200
{
  "name" : "ebccbbe4becc",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "voYT7LkXQhqtoz8PcDmUbg",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
</pre> 
<p># 增加内存的限制</p> 
<pre class='brush:php;toolbar:false'>#x修改配置文件 -e 环境配置修改
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xmx512m"  elasticsearch:7.6.2

添加 ’-e ES_JAVA_OPTS="-Xms128m -Xmx512m" ‘ 配置ElasticSearch的虚拟机占用的内存大小。
docker stats 查看资源占用情况
</pre> 
<p></p> 
<p>作业:使用kibanna连接es?思考网络如何才能来连接过去。</p> 
<p></p> 
<ol><li>图形化管理工具Portaniner安装<br /> Portaniner是Docker的图形化管理工具,类似的工具还有Rancher(学到CI/CD再用)<br /> 下载运行Portaniner镜像并运行,设置本机映射端口为8088<br /> docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer<br /> -v 挂载</li></ol> 
<p>访问测试:外网(阿里云开通外网)<br /> 安装教程:https://blog.csdn.net/weixin_44421461/article/details/109475411<br /> 第一次登录设置admin用户的密码</p> 
<p>我们建造的是单机版,直接选择Local,点击连接<br /> 如果是阿里云服务器记得设置安全组,选择连接本地的Docker,整体界面预览如下图:</p> 
12.Docker镜像详解 
12.1 什么是镜像 
<p>镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码,运行时(一个程序在运行或者在被执行的依赖)、库,环境变量和配置文件。</p> 
<p>所有的应用,直接打包docker镜像,就可以直接跑起来<br /> 镜像来源有三:<br /> ● 仓库下载<br /> ● 拷贝<br /> ● 自己创造镜像</p> 
12.2 Docker镜像加载原理 
<p>Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统是UnionFS联合文件系统。</p> 
12.3 分层理解 
<p>查看镜像分层的方式可以通过docker image inspect+镜像 命令!</p> 
<pre class='brush:php;toolbar:false'>"RootFS": {
"Type": "layers",
"Layers": [
"sha256:e8b689711f21f9301c40bf2131ce1a1905c3aa09def1de5ec43cf0adf652576e",
"sha256:b43651130521eb89ffc3234909373dc42557557b3a6609b9fed183abaa0c4085",
"sha256:8b9770153666c1eef1bc685abfc407242d31e34f180ad0e36aff1a7feaeb3d9c",
"sha256:6b01cc47a390133785a4dd0d161de0cb333fe72e541d1618829353410c4facef",
"sha256:0bd13b42de4de0a0d0cc3f1f162cd0d4b8cb4ee20cbea7302164fdc6894955fd",
"sha256:146262eb38412d6eb44be1710bfe0f05d3493831f82b1c2be8dc8d9558c9f033"
]
</pre> 
12.4 提交镜像 
<p>使用docker commit 命令提交容器成为一个新的版本</p> 
<p>docker commit -m=“提交的描述信息” -a=“作者” 容器id 目标镜像名:[TAG]</p> 
<p>由于默认的Tomcat镜像的webapps文件夹中没有任何内容,需要从webapps.dist中拷贝文件到webapps文件夹。下面自行制作镜像:就是从webapps.dist中拷贝文件到webapps文件夹下,并提交该镜像作为一个新的镜像。使得该镜像默认的webapps文件夹下就有文件。具体命令如下:<br /> #1.复制文件夹</p> 
<pre class='brush:php;toolbar:false'>[root@zecan  ~]# docker ps 
ConTAINER ID   IMAGE     COMMAND             CREATED         STATUS         PORTS                    NAMES
0f8ea2f53e32   tomcat    "catalina.sh run"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp   sharp_diffie
[root@zecan  ~]# docker exec -it 0f8ea2f53e32 /bin/bash 
root@0f8ea2f53e32:/usr/local/tomcat# ls
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
root@0f8ea2f53e32:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@0f8ea2f53e32:/usr/local/tomcat# cd webapps
root@0f8ea2f53e32:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
root@0f8ea2f53e32:/usr/local/tomcat/webapps#
</pre> 
<p>#2.提交镜像作为一个新的镜像</p> 
<pre class='brush:php;toolbar:false'>[root@zecan  ~]# docker commit -a="zecan" -m="add webapps app" 0f8ea2f53e32 tomcat02:1.0 
sha256:ad1fdd24828b785a5d4abcb980d19178e1c30123b4ce588c4225a0fbfaf4ad40
[root@zecan  ~]# docker images 
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
tomcat02              1.0       ad1fdd24828b   15 seconds ago   684MB
tomcat                latest    5db6fed793e9   12 hours ago     680MB
nginx                 latest    04661cdce581   6 days ago       141MB
mysql                 latest    ecac195d15af   4 weeks ago      516MB
redis                 latest    7faaec683238   4 weeks ago      113MB
hello-world           latest    feb5d9fea6a5   7 weeks ago      13.3kB
centos                latest    5d0da3dc9764   2 months ago     231MB
portainer/portainer   latest    580c0e4e98b0   8 months ago     79.1MB
elasticsearch         7.6.2     f29a1ee41030   20 months ago    791MB
</pre> 
<p>#3.运行容器</p> 
<pre class='brush:php;toolbar:false'>[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it mytomcat:1.0 /bin/bash
root@1645774d4605:/usr/local/tomcat# cd webapps
root@1645774d4605:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
wz99sm8v95sckz8bd2c4Z ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
mytomcat              1.0       f189aac861de   7 seconds ago   653MB
mysql                 5.7       f07dfa83b528   6 days ago      448MB
tomcat                latest    feba8d001e3f   10 days ago     649MB
nginx                 latest    ae2feff98a0c   12 days ago     133MB
centos                latest    300e315adb2f   2 weeks ago     209MB
portainer/portainer   latest    62771b0b9b09   5 months ago    79.1MB
elasticsearch         7.6.2     f29a1ee41030   9 months ago    791MB
</pre> 
<p>学习过程搜索:<br /> docker run容器的时候/bin/bash到底在表达什么<br /> Linux下“/”和“~”的区别<br /> 端口冲突(Address already in use)解决方法<br /> linux如何查看端口占用情况</p></div>
</div>
<div style="clear: both;"></div>
<div class="author-info fl">
<div><span class="gray">转载请注明:</span>文章转载自 <a href="https://www.mshxw.com/" class="blue">www.mshxw.com</a></div>
<div><span class="gray">本文地址:</span><a href="https://www.mshxw.com/it/590530.html" class="blue">https://www.mshxw.com/it/590530.html</a></div>
</div>
<div class="prev fl">
<p>   <a style='text-align:left;' class='center-block text-center glyphicon glyphicon-collapse-down' href="https://www.mshxw.com/it/590588.html">上一篇  idea中怎么添加主题插件</a>
 </p>
<p>   <a style='text-align:left;' class='center-block text-center glyphicon glyphicon-collapse-down' href="https://www.mshxw.com/it/588321.html">下一篇  FreeRTOS的调度器源码分析及系统滴答SysTick</a>
  </p>
</div>
<div class="new_tag fl">
</div>
</div>
<div class="new_r fr" style="border-radius:10px;">
<div class="tui fl">
<h3>Java相关栏目本月热门文章</h3>
<ul>
  <li><span>1</span><a href="https://www.mshxw.com/it/1041277.html" title="【Linux驱动开发】设备树详解(二)设备树语法详解">【Linux驱动开发】设备树详解(二)设备树语法详解</a></li>
  <li><span>2</span><a href="https://www.mshxw.com/it/1041273.html" title="别跟客户扯细节">别跟客户扯细节</a></li>
  <li><span>3</span><a href="https://www.mshxw.com/it/1041266.html" title="Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区">Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区</a></li>
  <li><span>4</span><a href="https://www.mshxw.com/it/1041261.html" title="【Java】对象处理流(ObjectOutputStream和ObjectInputStream)">【Java】对象处理流(ObjectOutputStream和ObjectInputStream)</a></li>
  <li><span>5</span><a href="https://www.mshxw.com/it/1041256.html" title="【分页】常见两种SpringBoot项目中分页技巧">【分页】常见两种SpringBoot项目中分页技巧</a></li>
  <li><span>6</span><a href="https://www.mshxw.com/it/1041299.html" title="一文带你搞懂OAuth2.0">一文带你搞懂OAuth2.0</a></li>
  <li><span>7</span><a href="https://www.mshxw.com/it/1041297.html" title="我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍">我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍</a></li>
  <li><span>8</span><a href="https://www.mshxw.com/it/1041296.html" title="【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成">【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成</a></li>
  <li><span>9</span><a href="https://www.mshxw.com/it/1041294.html" title="JavaSE - 封装、static成员和内部类">JavaSE - 封装、static成员和内部类</a></li>
  <li><span>10</span><a href="https://www.mshxw.com/it/1041291.html" title="树莓派mjpg-streamer实现监控及拍照功能调试">树莓派mjpg-streamer实现监控及拍照功能调试</a></li>
  <li><span>11</span><a href="https://www.mshxw.com/it/1041289.html" title="用c++写一个蓝屏代码">用c++写一个蓝屏代码</a></li>
  <li><span>12</span><a href="https://www.mshxw.com/it/1041285.html" title="从JDK8源码中看ArrayList和LinkedList的区别">从JDK8源码中看ArrayList和LinkedList的区别</a></li>
  <li><span>13</span><a href="https://www.mshxw.com/it/1041281.html" title="idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目">idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目</a></li>
  <li><span>14</span><a href="https://www.mshxw.com/it/1041282.html" title="在openwrt使用C语言增加ubus接口(包含C uci操作)">在openwrt使用C语言增加ubus接口(包含C uci操作)</a></li>
  <li><span>15</span><a href="https://www.mshxw.com/it/1041278.html" title="Spring 解决循环依赖">Spring 解决循环依赖</a></li>
  <li><span>16</span><a href="https://www.mshxw.com/it/1041275.html" title="SpringMVC——基于MVC架构的Spring框架">SpringMVC——基于MVC架构的Spring框架</a></li>
  <li><span>17</span><a href="https://www.mshxw.com/it/1041272.html" title="Andy‘s First Dictionary C++ STL set应用">Andy‘s First Dictionary C++ STL set应用</a></li>
  <li><span>18</span><a href="https://www.mshxw.com/it/1041271.html" title="动态内存管理">动态内存管理</a></li>
  <li><span>19</span><a href="https://www.mshxw.com/it/1041270.html" title="我的创作纪念日">我的创作纪念日</a></li>
  <li><span>20</span><a href="https://www.mshxw.com/it/1041269.html" title="Docker自定义镜像-Dockerfile">Docker自定义镜像-Dockerfile</a></li>
</ul>
</div>
</div>
</div>
<!-- 公共尾部 -->
<div class="link main">
<div class="link_tit">
<span class="on">热门相关搜索</span>
</div>
<div class="link_tab">
<div class="link_con">
<a href="http://www.mshxw.com/TAG_1/luyouqishezhi.html">路由器设置</a>
<a href="http://www.mshxw.com/TAG_1/mutuopan.html">木托盘</a>
<a href="http://www.mshxw.com/TAG_1/baotamianban.html">宝塔面板</a>
<a href="http://www.mshxw.com/TAG_1/shaoerpython.html">儿童python教程</a>
<a href="http://www.mshxw.com/TAG_1/xinqingdiluo.html">心情低落</a>
<a href="http://www.mshxw.com/TAG_1/pengyouquan.html">朋友圈</a>
<a href="http://www.mshxw.com/TAG_1/vim.html">vim</a>
<a href="http://www.mshxw.com/TAG_1/shuangyiliuxueke.html">双一流学科</a>
<a href="http://www.mshxw.com/TAG_1/zhuanshengben.html">专升本</a>
<a href="http://www.mshxw.com/TAG_1/wodexuexiao.html">我的学校</a>
<a href="http://www.mshxw.com/TAG_1/rijixuexiao.html">日记学校</a>
<a href="http://www.mshxw.com/TAG_1/xidianpeixunxuexiao.html">西点培训学校</a>
<a href="http://www.mshxw.com/TAG_1/qixiuxuexiao.html">汽修学校</a>
<a href="http://www.mshxw.com/TAG_1/qingshu.html">情书</a>
<a href="http://www.mshxw.com/TAG_1/huazhuangxuexiao.html">化妆学校</a>
<a href="http://www.mshxw.com/TAG_1/tagouwuxiao.html">塔沟武校</a>
<a href="http://www.mshxw.com/TAG_1/yixingmuban.html">异形模板</a>
<a href="http://www.mshxw.com/TAG_1/xinandaxuepaiming.html">西南大学排名</a>
<a href="http://www.mshxw.com/TAG_1/zuijingpirenshengduanju.html">最精辟人生短句</a>
<a href="http://www.mshxw.com/TAG_1/6bujiaonizhuihuibeipian.html">6步教你追回被骗的钱</a>
<a href="http://www.mshxw.com/TAG_1/nanchangdaxue985.html">南昌大学排名</a>
<a href="http://www.mshxw.com/TAG_1/qingchaoshierdi.html">清朝十二帝</a>
<a href="http://www.mshxw.com/TAG_1/beijingyinshuaxueyuanpaiming.html">北京印刷学院排名</a>
<a href="http://www.mshxw.com/TAG_1/beifanggongyedaxuepaiming.html">北方工业大学排名</a>
<a href="http://www.mshxw.com/TAG_1/beijinghangkonghangtiandaxuepaiming.html">北京航空航天大学排名</a>
<a href="http://www.mshxw.com/TAG_1/shoudoujingjimaoyidaxuepaiming.html">首都经济贸易大学排名</a>
<a href="http://www.mshxw.com/TAG_1/zhongguochuanmeidaxuepaiming.html">中国传媒大学排名</a>
<a href="http://www.mshxw.com/TAG_1/shoudoushifandaxuepaiming.html">首都师范大学排名</a>
<a href="http://www.mshxw.com/TAG_1/zhongguodezhidaxue(beijing)paiming.html">中国地质大学(北京)排名</a>
<a href="http://www.mshxw.com/TAG_1/beijingxinxikejidaxuepaiming.html">北京信息科技大学排名</a>
<a href="http://www.mshxw.com/TAG_1/zhongyangminzudaxuepaiming.html">中央民族大学排名</a>
<a href="http://www.mshxw.com/TAG_1/beijingwudaoxueyuanpaiming.html">北京舞蹈学院排名</a>
<a href="http://www.mshxw.com/TAG_1/beijingdianyingxueyuanpaiming.html">北京电影学院排名</a>
<a href="http://www.mshxw.com/TAG_1/zhongguohuquxueyuanpaiming.html">中国戏曲学院排名</a>
<a href="http://www.mshxw.com/TAG_1/hebeizhengfazhiyexueyuanpaiming.html">河北政法职业学院排名</a>
<a href="http://www.mshxw.com/TAG_1/hebeijingmaodaxuepaiming.html">河北经贸大学排名</a>
<a href="http://www.mshxw.com/TAG_1/tianjinzhongdeyingyongjishudaxuepaiming.html">天津中德应用技术大学排名</a>
<a href="http://www.mshxw.com/TAG_1/tianjinyixuegaodengzhuankexuejiaopaiming.html">天津医学高等专科学校排名</a>
<a href="http://www.mshxw.com/TAG_1/tianjinmeishuxueyuanpaiming.html">天津美术学院排名</a>
<a href="http://www.mshxw.com/TAG_1/tianjinyinlexueyuanpaiming.html">天津音乐学院排名</a>
<a href="http://www.mshxw.com/TAG_1/tianjingongyedaxuepaiming.html">天津工业大学排名</a>
<a href="http://www.mshxw.com/TAG_1/beijinggongyedaxuegengdanxueyuanpaiming.html">北京工业大学耿丹学院排名</a>
<a href="http://www.mshxw.com/TAG_1/beijingjingchaxueyuanpaiming.html">北京警察学院排名</a>
<a href="http://www.mshxw.com/TAG_1/tianjinkejidaxuepaiming.html">天津科技大学排名</a>
<a href="http://www.mshxw.com/TAG_1/beijingyoudiandaxue(hongfujiaoou)paiming.html">北京邮电大学(宏福校区)排名</a>
<a href="http://www.mshxw.com/TAG_1/beijingwanglaozhiyexueyuanpaiming.html">北京网络职业学院排名</a>
<a href="http://www.mshxw.com/TAG_1/beijingdaxueyixuebupaiming.html">北京大学医学部排名</a>
<a href="http://www.mshxw.com/TAG_1/hebeikejidaxuepaiming.html">河北科技大学排名</a>
<a href="http://www.mshxw.com/TAG_1/hebeidezhidaxuepaiming.html">河北地质大学排名</a>
<a href="http://www.mshxw.com/TAG_1/hebeitiyoxueyuanpaiming.html">河北体育学院排名</a>
</div>
</div>
</div>
<div class="footer">
<div class="dl_con">
<div class="width1200">
<dl>
<dt>学习工具</dt>
<dd><a href="https://www.mshxw.com/tools/algebra/" title="代数计算器">代数计算器</a></dd>
<dd><a href="https://www.mshxw.com/tools/trigonometry/" title="三角函数计算器">三角函数</a></dd>
<dd><a href="https://www.mshxw.com/tools/analytical/" title="解析几何">解析几何</a></dd>
<dd><a href="https://www.mshxw.com/tools/solidgeometry/" title="立体几何">立体几何</a></dd>
</dl>
<dl>
<dt>知识解答</dt>
<dd><a href="https://www.mshxw.com/ask/1033/"  title="教育知识">教育知识</a></dd>
<dd><a href="https://www.mshxw.com/ask/1180/"  title="百科知识">百科知识</a></dd>
<dd><a href="https://www.mshxw.com/ask/1155/"  title="生活知识">生活知识</a></dd>
<dd><a class="https://www.mshxw.com/ask/1199/"  title="常识知识">常识知识</a></dd>
</dl>
<dl>
<dt>写作必备</dt>
<dd><a href="https://www.mshxw.com/zuowen/1128/" title="作文大全">作文大全</a></dd>
<dd><a href="https://www.mshxw.com/zuowen/1130/" title="作文素材">作文素材</a></dd>
<dd><a href="https://www.mshxw.com/zuowen/1132/" title="句子大全">句子大全</a></dd>

<dd><a href="https://www.mshxw.com/zuowen/1154/" title="实用范文">实用范文</a></dd>
</dl>
<dl class="mr0">
<dt>关于我们</dt>
<dd><a href="https://www.mshxw.com/about/index.html" title="关于我们" rel="nofollow">关于我们</a></dd>
<dd><a href="https://www.mshxw.com/about/contact.html" title="联系我们" rel="nofollow">联系我们</a></dd>
<dd><a href="https://www.mshxw.com/sitemap/" title="网站地图">网站地图</a></dd>
</dl>
<div class="dl_ewm">
<div class="wx"> <img src="https://www.mshxw.com/skin/sinaskin//kaotop/picture/gzh.jpg" alt="交流群">
<p>名师互学网交流群</p>
</div>
<div class="wx"><img src="https://www.mshxw.com/skin/sinaskin//kaotop/picture/weixin.jpg" alt="名师互学网客服">
<p>名师互学网客服</p>
</div>
</div>
</div>
</div>
<div class="copyright">
<p>名师互学网 版权所有 (c)2021-2022      ICP备案号:<a href="https://beian.miit.gov.cn" rel="nofollow">晋ICP备2021003244-6号</a>
 </p>
</div>
</div>
<!-- 手机端 -->
<div class="m_foot_top">
<img src="https://www.mshxw.com/foot.gif" width="192" height="27" alt="我们一直用心在做"><br/>
<a href="https://www.mshxw.com/about/index.html">关于我们</a>
<a href="https://www.mshxw.com/archiver/">文章归档</a>
<a href="https://www.mshxw.com/sitemap">网站地图</a>
<a href="https://www.mshxw.com/about/contact.html">联系我们</a>
<p>版权所有 (c)2021-2022 MSHXW.COM</p>
<p>ICP备案号:<a href="https://beian.miit.gov.cn/" rel="nofollow">晋ICP备2021003244-6号</a></p>
</div>
<div class="to_top" style="display:none;"><img src="https://www.mshxw.com/skin/sinaskin//kaotop/picture/to_top.png"></div>
<!--广告!-->
<script type="text/javascript" src="https://www.mshxw.com/skin/sinaskin//kaotop/js/top.js"></script>
<script src="https://www.mshxw.com/skin/sinaskin//kaotop/js/fixed.js" type="text/javascript"></script>
<!--头条搜索!-->
<script>
(function(){
var el = document.createElement("script");
el.src = "https://lf1-cdn-tos.bytegoofy.com/goofy/ttzz/push.js?018f42187355ee18d1bfcee0487fc91a76ac6319beb05b7dc943033ed22c446d3d72cd14f8a76432df3935ab77ec54f830517b3cb210f7fd334f50ccb772134a";
el.id = "ttzz";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(el, s);
})(window)
</script>
<!--头条搜索结束!-->
<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?e05fec1c87ee5ca07f1ce57d093866c4";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>
</div>
</div>
<script type="text/javascript">
$(".alert_kf").click(function() {
      mantis.requestChat();
 });
</script>
<script type="text/javascript">
var mySwiper_weixin = new Swiper('.pc_swiper_weixin', {
autoplay: 3000, //可选选项,自动滑动
loop: true,
speed: 1000,
pagination: '.swiper-pagination',
paginationClickable: true,
})
</script>
<script type="text/javascript">
$(function() {
$(window).scroll(function() {
if ($(window).scrollTop() > 100) {
$(".to_top").fadeIn(1000);
} else {
$(".to_top").fadeOut(1000);
}
});
$(".to_top").click(function() {
if ($('html').scrollTop()) {
$('html').animate({
scrollTop: 0
}, 300);
return false;
}
$('body').animate({
scrollTop: 0
}, 300);
return false;
});
});
</script>
</body>
</html>