您的位置:首页 > 健康 > 养生 > 域名停靠网站下载大全免费工能_网络营销公司网络推广_seo云优化方法_想要网站推广版

域名停靠网站下载大全免费工能_网络营销公司网络推广_seo云优化方法_想要网站推广版

2024/12/22 23:22:22 来源:https://blog.csdn.net/mzz715/article/details/144181176  浏览:    关键词:域名停靠网站下载大全免费工能_网络营销公司网络推广_seo云优化方法_想要网站推广版
域名停靠网站下载大全免费工能_网络营销公司网络推广_seo云优化方法_想要网站推广版

目录

1.Linux系统目录结构

2.处理目录的常用命令

3.Docker概述

4.Docker历史

5.Docker基本组成

6.Docker底层原理

7.Docker修改镜像源

8.Docker基本命令

9.Docker创建Nginx实战

10.数据卷

11.镜像和dockerfile


在学习docker之前我们先要熟悉Linux系统,推荐阅读:Linux笔记(狂神说) - 你我不在年少 - 博客园

1.Linux系统目录结构

以下是对这些目录的解释:

  • /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。
  • /boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /dev : dev是Device(设备)的缩写, 存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
  • /etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。
  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
  • /opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
  • /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。
  • /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
  • /srv:该目录存放一些服务启动之后需要提取的数据。
  • /sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
  • /tmp:这个目录是用来存放一些临时文件的。
  • /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
  • /usr/bin: 系统用户使用的应用程序。
  • /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。
  • /usr/src: 内核源代码默认的放置目录。
  • /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
  • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除

2.处理目录的常用命令

  • ls: 列出目录
  • cd:切换目录
  • pwd:显示目前的目录
  • mkdir:创建一个新的目录
  • rmdir:删除一个空的目录
  • cp: 复制文件或目录
  • rm: 移除文件或目录
  • mv: 移动文件与目录,或修改文件与目录的名称

你可以使用 man [命令] 来查看各个命令的使用文档,如 :man cp

3.Docker概述

想象一个场景,公司的开发和运维是两个环境,所以对于开发人员电脑上运行得很好的程序可能到了运维人员手中就运行不了了,要重新配置环境和端口;配置环境是十分费时费力的,所以如果能发布一个项目,jar包+(Redis、MySQL、jdk...)一起上线就会方便很多,也就是项目带着环境安装打包,以上问题的解决方案就是Docker!

Docker的思想来自于集装箱,Docker的核心思想就是隔离,不同开发环境(集装箱)相互隔离

java——打包成apk——应用商店——手机下载apk——安装使用

java——打包成镜像(jar+环境)——镜像仓库——下载镜像——安装使用

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

ps:Docker是基于Go语言开发的

4.Docker历史

2010年,几个搞IT的年轻人,就在美国成立了一家公司dotCloud,做一些 pass 的云计算服务,也就是Linux虚拟机有关的容器技术。他们将自己的技术(容器化技术)命名就是 Docker。Docker 刚刚诞生的时候,没有引起行业的注意,公司就快活不下去了。于是,他们决定开源Docker,也就是开放源代码。2013年,Docker开源,于是越来越多的人发现了docker的优点,Docker 每个月都会更新一个版本,直到2014年4月9日,Docker1.0发布。

Docker为什么这么火?轻巧,比如说只需要打包Linux虚拟机的核心kernel

在容器技术出来之前,我们都是使用虚拟机技术,但是缺点是占用资源(模拟了很多不需要的软硬件)、步骤多、启动慢

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

docker:隔离,只需要最核心的环境即可,十分小巧,并不是模拟整个操作系统

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

官方文档地址:Docker Docs

仓库地址(dockerhub类似于github):Docker Hub Container Image Library | App Containerization

5.Docker基本组成

镜像(image):docker镜像就好比是一个模板(类似Java中一个类),可以通过这个模板来创建容器服务(类似Java中一个实例),tomcat镜像===>run ==>tomcat01 容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
容器(container):Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的
基本命令有启动,停止,删除,,目前就可以把这个容器理解为就是一个简易的linux系统
仓库(renository):仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库,Docker Hub(默认是国外的)、阿里云…..都有容器服务器(但是需要配置镜像加速)

6.Docker底层原理

docker run ...

Docker Engine是一个客户端-服务器(CS)应用程序,具有以下主要组件:

  • 一个服务器,它是一种长期运行的程序,称为守护进程
  • 一个REST API,它指定程序可以用来与守护进程对话并指示它做什么的接口

Docker是一个Client Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户 端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境就是我们所说的集装箱。

为什么docker比虚拟机快?

  • docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势
  • docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个 容器时,docker不需要和虚拟机一样重新加载一个操作系统内核

7.Docker修改镜像源

1.ping一下自己的网通不通

ping www.baidu.com
ctrl c退出

2.修改镜像地址问题件daemon.json文件,添加可用的镜像源(自己搜)

vim /etc/docker/daemon.json

3.在Linux系统下编辑daemon.json文件,通常使用的是文本编辑器,如vi或nano,如下是vi编辑器编辑步骤:

  1. 按下i键进入插入模式,此时可以编辑文件内容
  2. 使用键盘输入或删除内容来修改daemon.json文件
  3. 按下Esc键退出插入模式
  4. 输入:wq命令,然后按Enter键保存文件并退出vi编辑器

4.重新加载服务并重启docker服务

systemctl daemon-reload 
systemctl restart docker 

5.查看docker镜像配置是否生效

docker info

8.Docker基本命令

推荐阅读blog.csdn.net/qq_21197507/article/details/115071715

帮助命令

docker version  # docker版本信息
docker info     # 系统级别的信息,包括镜像和容器的数量
docker 命令 --help 

镜像命令

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

[root@iZ7xv-----------01rav5Z ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        7 months ago        13.3kB# 解释
REPOSITORY      # 镜像的仓库
TAG             # 镜像的标签
IMAGE ID        # 镜像的ID
CREATED         # 镜像的创建时间
SIZE            # 镜像的大小# 可选项
--all , -a      # 列出所有镜像
--quiet , -q    # 只显示镜像的id

docker search 查找镜像

NAME                              DESCRIPTION                                     STARS               OFFICIAL         AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   9822                [OK]                
mariadb                           MariaDB is a community-developed fork of MyS…   3586                [OK]                
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   719                                     [OK]# 可选项
--filter=STARS=3000     # 搜素出来的镜像就是STARS大于3000的[root@iZ2zeg4ytp0whqtmxbsqiiZ ~]# docker search mysql --filter=STARS=3000
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql               MySQL is a widely used, open-source relation…   9822                [OK]                
mariadb             MariaDB is a community-developed fork of MyS…   3586                [OK]     

docker pull 拉取镜像

# 下载镜像,docker pull 镜像名[:tag]
[root@iZ2zeg4ytp0whqtmxbsqiiZ ~]# docker pull mysql
Using default tag: latest           # 如果不写tag,默认就是latest
latest: Pulling from library/mysql
bf5952930446: Pull complete         # 分层下载,dockerimages的核心,联合文件系统
8254623a9871: Pull complete 
938e3e06dac4: Pull complete 
ea28ebf28884: Pull complete 
f3cef38785c2: Pull complete 
894f9792565a: Pull complete 
1d8a57523420: Pull complete 
6c676912929f: Pull complete 
ff39fdb566b4: Pull complete 
fff872988aba: Pull complete 
4d34e365ae68: Pull complete 
7886ee20621e: Pull complete 
Digest: sha256:c358e72e100ab493a0304bda35e6f239db2ec8c9bb836d8a427ac34307d074ed     # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest      # 真实地址# 等价于
docker pull mysql
docker pull docker.io/library/mysql:latest# 指定版本下载
[root@iZ2zeg4ytp0whqtmxbsqiiZ ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
bf5952930446: Already exists 
8254623a9871: Already exists 
938e3e06dac4: Already exists 
ea28ebf28884: Already exists 
f3cef38785c2: Already exists 
894f9792565a: Already exists 
1d8a57523420: Already exists 
5f09bf1d31c1: Pull complete 
1b6ff254abe7: Pull complete 
74310a0bf42d: Pull complete 
d398726627fd: Pull complete 
Digest: sha256:da58f943b94721d46e87d5de208dc07302a8b13e638cd1d24285d222376d6d84
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7# 查看本地镜像
[root@iZ2zeg4ytp0whqtmxbsqiiZ ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 718a6da099d8        6 days ago          448MB
mysql               latest              0d64f46acfd1        6 days ago          544MB
hello-world         latest              bf756fb1ae65        7 months ago        13.3kB

docker rmi 删除镜像

[root@iZ2zeg4ytp0whqtmxbsqiiZ ~]# docker rmi -f IMAGE ID                        # 删除指定镜像
[root@iZ2zeg4ytp0whqtmxbsqiiZ ~]# docker rmi -f IMAGE ID1 IMAGE ID2 IMAGE ID3   # 删除多个镜像
[root@iZ2zeg4ytp0whqtmxbsqiiZ ~]#  docker rmi -f $(docker images -aq)           # 删除所有镜像

容器命令

列出所有的运行的容器

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

9.Docker创建Nginx实战

docker run -d --name nginx -p 80:80 nginx
两个端口,前面一个是宿主机,后面一个是容器内,注意检查别被占用了

推荐阅读:‍‌‌​‌​⁠​​​​⁠​​‍‬⁠⁠​​‬‍​‌‍‌‍​​​‌​​​‌​​​​‌‌‍​day02-Docker - 飞书云文档

10.数据卷

容器是隔离环境,容器内程序的文件、配置、运行时产生的数据都在容器内部,我们要读写容器内的文件非常不方便,所以就引出了问题:

  • 如果要升级MySQL版本,需要销毁旧容器,那么数据岂不是跟着被销毁了?
  • MySQL、Nginx容器运行后,如果我要修改其中的某些配置该怎么办?
  • 我想要让Nginx代理我的静态资源怎么办?

因此,容器提供程序的运行环境,但是程序运行产生的数据、程序运行依赖的配置都应该与容器解耦,数据卷就是要解决这个问题的。

数据卷(volume)是一个虚拟目录,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据,是容器内目录宿主机目录之间映射的桥梁。以Nginx为例,我们想要让Nginx代理我们的静态资源,最好是放到html目录;如果我们要修改Nginx的配置,最好是找到conf下的nginx.conf文件。但遗憾的是,容器运行的Nginx所有的文件都在容器内部。所以我们必须利用数据卷将两个目录与宿主机目录关联,方便我们操作。如图:

这样以来,容器内的confhtml目录就 与宿主机的confhtml目录关联起来,我们称为挂载

11.镜像和dockerfile

镜像之所以能让我们快速跨操作系统部署应用而忽略其运行环境、配置,就是因为镜像中包含了程序运行需要的系统函数库、环境、配置、依赖。

因此,自定义镜像本质就是依次准备好程序运行的基础环境、依赖、应用本身、运行配置等文件,并且打包而成,制作镜像的每一次操作其实都是在生产一些文件(系统运行环境、函数库、配置最终都是磁盘文件),所以镜像就是一堆文件的集合

但需要注意的是,镜像文件不是随意堆放的,而是按照操作的步骤分层叠加而成,每一层形成的文件都会单独打包并标记一个唯一id,称为Layer)。这样,如果我们构建时用到的某些层其他人已经制作过,就可以直接拷贝使用这些层,而不用重复制作。例如,第一步中需要的Linux运行环境,通用性就很强,所以Docker官方就制作了这样的只包含Linux运行环境的镜像。我们在制作java镜像时,就无需重复制作

那么具体如何打包制作镜像呢?

由于制作镜像的过程中,需要逐层处理和打包,比较复杂,所以Docker就提供了自动打包镜像的功能。我们只需要将打包的过程,每一层要做的事情用固定的语法写下来,交给Docker去执行即可。而这种记录镜像结构的文件就称为Dockerfile,其对应的语法可以参考官方文档:Dockerfile reference | Docker Docs

常用语法有:

指令说明
FROM

指定基础镜像

ENV

设置环境变量,可在后面指令使用

COPY

拷贝本地文件到镜像的指定目录

RUN

执行Linux的shell命令,一般是安装过程的命令

EXPOSE

指定容器运行时监听的端口,是给镜像使用者看的

ENTRYPOINT

镜像中应用的启动命令,容器运行时调用

例如,要基于Ubuntu镜像来构建一个Java应用,其Dockerfile内容如下:

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
ENV TZ=Asia/Shanghai
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 设定时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 安装JDK
RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 指定项目监听的端口
EXPOSE 8080
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

由于前两层镜像重复率很高(Linux系统环境、JDK环境),所以有人提供了基础的系统加JDK环境,我们在此基础上制作java镜像,就可以省去JDK的配置了:

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

制作docker镜像手把手教学:Docker-12.项目部署-部署Java应用_哔哩哔哩_bilibili

12.容器互联与自定义网络

此部分看视频讲得更明白:Docker-11.Docker基础-容器网络互连_哔哩哔哩_bilibili

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com