2024年Linux最全Docker教程,复习指南

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

以上问题,可以通过数据卷解决。

数据卷 如下图:


数据卷是宿主机中的一个目录或文件


当容器目录和数据卷目录绑定后,对方的修改会立即同步


一个数据卷可以被多个容器同时挂载


一个容器也可以被挂载多个数据卷

数据卷作用


容器数据持久化


外部机器(或者叫客户端)和容器间接通信


容器之间数据交换

 配置数据卷

创建启动容器时,使用 –v 参数 设置数据卷

docker run …
–v
宿主机目录
(
文件
):
容器内目录
(
文件
) …

例如:

docker run -it --name=c2 -v /root/data:/root/data_container  centos:7 /bin/bash

如果命令太长,可以分行写,用反斜杠连接:

docker run -it --name=c3 \
> -v ~/data2:/root/data2 \
> -v ~/data3:/root/data3 \
> centos:7 /bin/bash

注意事项:

目录必须是绝对路径

如果目录不存在,会自动创建

可以挂载多个数据卷

 数据卷容器

多容器进行数据交换,两种方式:

多个容器挂载同一个数据卷

数据卷容器,如下图:

配置数据卷容器

创建一个容器,挂载一个目录,让其他容器继承自该容器( --volumes-from )。

1. 创建启动c3数据卷容器,使用 –v 参数 设置数据卷

docker run –it --name=c3
–v /volume
centos:7 /bin/bash

创建启动
c1 c2
容器,使用
–-volumes-from
参数 设置数据卷

docker run –it --name=c1
–volumes-from c3
centos:7 /bin/bash

docker run –it --name=c2
–volumes-from c3
centos:7 /bin/bash

 Docker 应用部署

 Dockerfile

 Docker 镜像原理

思考:

  1. Docker
    镜像本质是什么?


是一个分层文件系统。

  1. Docker
    中一个
    centos
    镜像为什么只有
    200MB
    ,而一个
    centos
    操作系统的
    iso
    文件要几个个
    G

• Centos

iso
镜像文件包含
bootfs

rootfs
,而
docker

centos
镜像复用操作系统的
bootfs
,只有
rootfs
和其他镜像层。

  1. Docker
    中一个
    tomcat
    镜像为什么有
    500MB
    ,而一个
    tomcat
    安装包只有
    70

    MB


由于
docker
中镜像是分层的,
tomcat
虽然只有
70

MB,但他需要依赖于父镜像和基础镜像,所以整个对外暴露的tomcat
镜像大小
500

MB。

操作系统组成部分:

• 进程调度子系统


进程通信子系统


内存管理子系统


设备管理子系统


文件管理子系统


网络通信子系统


作业控制子系统

Linux
文件系统由
bootfs

rootfs
两部分组成,如下图:

• bootfs
:包含
bootloader
(引导加载程序)和
kernel
(内核)

• rootfs

root
文件系统,
包含的就是典型
Linux
系统中的
/dev,/proc

/bin

/etc
等标准目录和文件


不同的
linux
发行版,
bootfs
基本一样,而
rootfs
不同,如ubuntu,
centos

Docker镜像原理:

• Docker镜像是由特殊的文件系统叠加而成。


最底端是
bootfs
,并使用宿主机的
bootfs。


第二层是
root
文件系统
rootfs,
称为
base image。


然后再往上可以叠加其他的镜像文件。

• 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。

• 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。


当从一个镜像启动容器时,
Docker会在最顶层加载一个读写文件系统作为容器。

 Dockerfile概念及作用

镜像制作

Docker
镜像如何制作?

  1. 容器转为镜像,再做成压缩文件,传给对方,对方再从压缩文件里获取镜像,如下图:

具体操作步骤如下:

docker
commit
容器
id
镜像名称
:
版本号

docker
save
-o
压缩文件名称 镜像名称
:
版本号

docker
load
–i
压缩文件名称

2. dockerfile

Dockerfile 概念

• Dockerfile
是一个文本文件


包含了一条条的指令


每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像


对于开发人员:可以为开发团队提供一个完全一致的开发环境


对于测试人员:可以直接拿开发时所构建的镜像或者通过
Dockerfile文件构建一个新的镜像开始工作了


对于运维人员:在部署时,可以实现应用的无缝移植

示例:

FROM centos:7
MAINTAINER itheima
RUN yum install –y vim
CMD ["/bin/bash"]

也可从docker hub上学习别人写好的dockerfile。

 Dockerfile关键字

| 关键字      | 作用                     | 备注                                                         |
| ----------- | ------------------------ | ------------------------------------------------------------ |
| FROM        | 指定父镜像               | 指定dockerfile基于那个image构建                              |
| MAINTAINER  | 作者信息                 | 用来标明这个dockerfile谁写的                                 |
| LABEL       | 标签                     | 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看 |
| RUN         | 执行命令                 | 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"] |
| CMD         | 容器启动命令             | 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"] |
| ENTRYPOINT  | 入口                     | 一般在制作一些执行就关闭的容器中会使用                       |
| COPY        | 复制文件                 | build的时候复制文件到image中                                 |
| ADD         | 添加文件                 | build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务 |
| ENV         | 环境变量                 | 指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value |
| ARG         | 构建参数                 | 构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数 |
| VOLUME      | 定义外部可以挂载的数据卷 | 指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"] |
| EXPOSE      | 暴露端口                 | 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp |
| WORKDIR     | 工作目录                 | 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径 |
| USER        | 指定执行用户             | 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户 |
| HEALTHCHECK | 健康检查                 | 指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制 |
| ONBUILD     | 触发器                   | 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大 |
| STOPSIGNAL  | 发送信号量到宿主机       | 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。       |
| SHELL       | 指定执行脚本的shell      | 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell            |

 案例1

需求

自定义
centos7
镜像。要求:

默认登录路径为
/usr

可以使用
vim

实现步骤

① 定义父镜像:
FROM
centos:7

② 定义作者信息:
MAINTAINER
itheima itheima@itcast.cn

③ 执行安装
vim
命令:
RUN
yum install -y vim

④ 定义默认的工作目录:
WORKDIR
/usr

⑤ 定义容器启动执行的命令:
CMD
/bin/bash

⑥ 通过
dockerfile
构建镜像:
docker bulid –f dockerfile
文件路径
–t
镜像名称
:
版本 .,例如:

docker build -f ./df_mycentos -t mycentos:1 .

测试

docker run -it --name=c6 mycentos:1

 案例2

需求

定义
dockerfile
,发布
springboot
项目

案例:实现步骤

① 定义父镜像:
FROM
java:8

② 定义作者信息:
MAINTAINER
itheima itheima@itcast.cn

③ 将
jar
包添加到容器:
ADD
springboot.jar app.jar

④ 定义容器启动执行的命令:
CMD
java–jar app.jar

⑤ 通过
dockerfile
构建镜像:
docker bulid –f dockerfile
文件路径
–t
镜像名称
:
版本 .

docker build -f ./df_springboot -t myspringboot:1 .

测试

docker run -id --name=c7 -p 8090:8080 myspringboot:1

 Docker 服务编排

 服务编排概念

微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停 ,维护的工作量会很大。


要从
Dockerfile build image
或者去
dockerhub
拉取
image


要创建多个
container


要管理这些
container
(启动停止删除)

服务编排:
按照一定的业务规则批量管理容器

 Docker Compose 概述

Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建 ,启动和停止。使用步骤:

利用
Dockerfile
定义运行环境镜像

使用
docker-compose.yml
定义组成应用的各服务

运行
docker-compose up
启动应用

安装Docker Compose

Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。

下面我 们以编译好的二进制包方式安装在Linux系统中。 
1、去这个网址下载二进制包

https://github.com/docker/compose/releases/

2.上传二进制包到Linux服务器上

3、移动二进制包到/usr/local/bin/

mv 二进制包 /usr/local/bin/docker-compose

4、设置文件可执行权限 
chmod +x /usr/local/bin/docker-compose
5、查看版本信息

docker-compose version

有可能是-version ,直接docker-compose,查看

卸载Docker Compose

二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose

使用docker compose编排nginx+springboot项目

  1. 创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose
  1. 编写 docker-compose.yml 文件
version: '3'
services:
  nginx:


![](https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png)


最全的Linux教程,Linux从入门到精通

======================

1.  **linux从入门到精通(第2版)**

2.  **Linux系统移植**

3.  **Linux驱动开发入门与实战**

4.  **LINUX 系统移植 第2版**

5.  **Linux开源网络全栈详解 从DPDK到OpenFlow**



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png)



第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值