Docker学习

系列文章目录

第一章 基础知识、数据类型学习
第二章 万年历项目
第三章 代码逻辑训练习题
第四章 方法、数组学习
第五章 图书管理系统项目
第六章 面向对象编程:封装、继承、多态学习
第七章 封装继承多态习题
第八章 常用类、包装类、异常处理机制学习
第九章 集合学习
第十章 IO流、多线程学习
第十一章 仓库管理系统JavaSE项目
第十二章 员工管理系统、多表查询、反射实现DBHelper学习
第十三章 DML、DDL、数据库对象学习
第十四章 网络编程、各种标签、CSS学习
第十五章 ECMAScript、BOM学习
第十六章 DOM、jQuery学习
第十七章 servlet、jsp、Cookie、Ajax学习
第十八章 融资管理系统JavaWeb项目
第十九章 MyBatis框架学习
第二十章 逆向工程、Spring框架IOC、AOP学习
第二十一章 SpringMVC框架学习
第二十二章 SpringBoot框架学习
第二十三章 招聘网站框架项目
第二十四章 Vue介绍、窗体内操作、窗体间操作学习
第二十六章 Vue路由配置、网络请求访问框架项目、element组件介绍学习
第二十五章 标准管理系统Vue项目
第二十六章 Linux安装、Nginx反向代理、负载均衡学习
第二十七章 Docker学习


文章目录

  • 系列文章目录
  • 前言
  • 一、Docker介绍
    • [1. Docker介绍](#1. Docker介绍)
    • [2. 沙盒机制介绍](#2. 沙盒机制介绍)
    • [3. Docker容器和虚拟机的区别](#3. Docker容器和虚拟机的区别)
    • [4. Docker的三个主要组件](#4. Docker的三个主要组件)
    • [5. Docker的两个关键词](#5. Docker的两个关键词)
      • [5.1 镜像](#5.1 镜像)
      • [5.2 容器](#5.2 容器)
    • [6. Docker的特点](#6. Docker的特点)
  • 二、部署Docker环境
    • [1. 查看Linux内核](#1. 查看Linux内核)
    • [2. 卸载老版本Docker,避免产生影响](#2. 卸载老版本Docker,避免产生影响)
    • [3. 升级yum和配置源](#3. 升级yum和配置源)
    • [4. 安装Docker](#4. 安装Docker)
    • [5. 启动HelloWorld官方自带程序项目验证](#5. 启动HelloWorld官方自带程序项目验证)
  • 三、Docker常用操作
    • [1. Docker常用操作](#1. Docker常用操作)
      • [1.1 镜像](#1.1 镜像)
      • [1.2 容器](#1.2 容器)
    • [2. 拉取tomcat镜像](#2. 拉取tomcat镜像)
    • [3. 启动容器](#3. 启动容器)
    • [4. 查看容器](#4. 查看容器)
    • [5. 移除容器](#5. 移除容器)
    • [6. 设置端口、启动容器](#6. 设置端口、启动容器)
    • [7. 启动Tomcat容器](#7. 启动Tomcat容器)
    • [8. 进入容器](#8. 进入容器)
    • [9. 拉取MySQL镜像](#9. 拉取MySQL镜像)
    • [10. 启动MySQL镜像](#10. 启动MySQL镜像)
    • [11. 创建Docker镜像](#11. 创建Docker镜像)
      • [11.1 创建目录](#11.1 创建目录)
      • [11.2 传入jar文件](#11.2 传入jar文件)
      • [11.3 安装环境](#11.3 安装环境)
      • [11.4 在该目录创建Dockerfile文件](#11.4 在该目录创建Dockerfile文件)
      • [11.5 创建镜像](#11.5 创建镜像)
      • [11.6 启动项目](#11.6 启动项目)
  • 总结

前言

本文我们要讲述:

Docker

在下攸攸太上,我有罪,我吃了无数的植物动物来维持我的生命,我的命是由无数的动植物的命堆积出来的,我很感谢他们。


一、Docker介绍

1. Docker介绍

Docker 是一个开源平台,用于自动化应用程序的开发、构建、分发和运行。它使用容器技术,使得开发者能够将应用程序及其所有依赖项打包成一个标准化的单元(称为容器),以便在不同的环境中一致地运行。

2. 沙盒机制介绍

沙盒,这里不是指那种游戏的种类,而是一种为保证计算机安全的技术,用于为运行中的程序提供隔离的环境。Docker的沙盒机制是指Docker利用Linux内核的容器化技术,在容器中隔离和限制应用程序的运行环境,以提供更高的安全性和隔离性。以下是Docker的沙盒机制的一些关键特点:

命名空间(Namespaces): Docker使用Linux内核的命名空间功能来隔离不同容器中的进程、网络、文件系统、用户等资源。每个容器都有自己独立的命名空间,使得容器中的进程无法感知到其他容器的存在。

控制组(Control Groups): Docker使用Linux内核的控制组功能来限制容器的资源使用,如CPU、内存、磁盘和网络带宽等。通过控制组,可以确保容器之间相互之间不会争夺资源,从而提高整体系统的性能和稳定性。

文件系统隔离: Docker使用镜像层和容器层的文件系统隔离机制,每个容器都有自己的文件系统视图。这意味着容器中的文件系统只能访问其自己的文件和目录,无法访问其他容器的文件。

网络隔离: Docker为每个容器提供独立的网络命名空间,使得容器可以拥有自己的网络接口、IP地址和网络配置。这样可以确保容器之间的网络流量相互隔离,提高网络安全性和隔离性。

权限管理: Docker在容器中实施严格的权限管理,每个容器都有自己的用户和用户组。这样可以确保容器中的进程只能以其拥有的权限进行操作,防止容器中的恶意进程对宿主机进行攻击。

通过这些沙盒机制,Docker实现了应用程序之间的隔离和安全性,同时提供了更高的资源利用率和性能。开发者可以在容器中运行不同的应用程序,而不必担心它们之间相互干扰或对系统造成不良影响。

3. Docker容器和虚拟机的区别

他们都采用了虚拟的技术。

不同的是,Docker少了虚拟机操作系统层,少了一层就少浪费资源,所以Docker效率较高。

4. Docker的三个主要组件

Docker客户端:Docker客户端是用户与Docker交互的命令行工具或图形界面工具。用户可以使用Docker客户端执行各种命令,如构建镜像、创建容器、管理容器等。客户端会将这些命令发送给Docker主机进行执行,并将执行结果返回给用户。

Docker主机:Docker主机是安装了Docker引擎(Docker Engine)的物理机或虚拟机。Docker主机负责管理和执行容器。它接收到Docker客户端发送的命令,然后根据命令的要求执行相应的操作,如拉取镜像、创建和管理容器、管理网络等。

远程仓库:Docker远程仓库是存储和分享Docker镜像的中央注册表。最常用的远程仓库是Docker Hub,它包含了数以万计的公共镜像供用户下载和使用。开发者可以通过远程仓库获取所需的镜像,并将自己创建的镜像上传到远程仓库供其他人使用。

Docker客户端和Docker主机是用户与Docker引擎进行交互的两个主要组件,而远程仓库则提供了大量的镜像资源。用户可以使用Docker客户端通过Docker主机来管理和执行容器,同时从远程仓库获取所需的镜像。

5. Docker的两个关键词

5.1 镜像

镜像是一个轻量级、独立、可执行的软件包,包括运行应用所需的所有内容,如代码、运行时、库、环境变量和配置文件等。镜像可以用来创建容器,类似于面向对象中的类的概念。

5.2 容器

容器是利用镜像创建的运行实例,相当于镜像的一个具体运行环境。容器包含了运行应用所需的所有组件,可以独立地运行在宿主机上。容器可以被启动、停止、删除,就像面向对象中的对象一样。

总的来说,镜像是一个静态的定义,描述了如何构建一个容器,而容器则是镜像的运行实例。这两个概念是Docker中非常核心和关键的部分。

举例子:镜像类似手机的App,容器类似App在后台的进程。

6. Docker的特点

轻量性:Docker容器共享宿主机的内核,因此相比传统虚拟化技术,Docker容器更加轻量级,可以在同一台物理机上运行更多的容器实例。

便携性:Docker容器可以在任何支持Docker的环境中运行,无论是开发、测试还是生产环境,使得应用程序在不同环境中快速部署和迁移成为可能。

灵活性:Docker提供了灵活的构建和发布机制,可以通过Dockerfile定义镜像的构建过程,并结合Docker Hub或私有仓库进行镜像的共享和分发,实现持续集成和持续部署。

隔离性:Docker利用Linux内核的命名空间和控制组等技术,提供了强大的隔离性。每个容器都拥有独立的运行环境,相互之间互不干扰。

可扩展性:Docker允许根据应用程序的需求快速创建、启动和停止多个容器,实现水平扩展或垂直扩展。通过容器编排工具,可以实现容器集群的管理和自动化扩展。

资源利用率高:Docker采用了镜像的层次化结构,不同镜像可以共享相同的基础层,减少了存储空间的占用。同时,容器的启动和停止速度快,可以在短时间内实现快速部署和扩展。

尽管有以上优点,Docker不擅长处理文件和数据,一般会以路径映射的方式讲文件或数据挂载到容器外。

二、部署Docker环境

我们本日的环境部署基于昨日第二十六章 Linux安装、Nginx反向代理、负载均衡学习基础上,请有需要的客官进入第二十六章学习

1. 查看Linux内核

uname -r

要求3.10版本以上

2. 卸载老版本Docker,避免产生影响

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

3. 升级yum和配置源

yum install -y yum-utils ##执行第一个命令,给yum升个级。

##执行的第二个命令
 yum install -y yum-utils
 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4. 安装Docker

yum install --setopt=obsoletes=0 docker-ce-20.10.8-3.el7 docker-ce-selinux-20.10.8-3.el7.noarch

5. 启动HelloWorld官方自带程序项目验证

systemctl start docker
systemctl enable docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
systemctl status docker
docker run hello-world

三、Docker常用操作

1. Docker常用操作

1.1 镜像

查看镜像:images

查找镜像:search 镜像名

拉取镜像:pull 镜像名:版本

移除镜像:rmi 镜像id或名字

1.2 容器

安装容器:run

启动容器:start 容器id或者名字

停止容器:stop 容器id或者名字

查看容器:ps -a

移除容器:rm 容器id或者名字

重启容器:restart 容器id或者名字

进入容器内部:exec 容器id或者名字

退出容器内部:exit

查看容器日志:logs

2. 拉取tomcat镜像

docker pull tomcat:8.0

等待时间较长

3. 启动容器

docker run tomcat:8.0

4. 查看容器

查看当前正在运行的容器

docker ps

查看所有容器,包括运行中的和未启动的

docker ps -a

5. 移除容器

docker rm 容器id(通过查看容器查到)

6. 设置端口、启动容器

docker run -p 8080:8080 -d --name tomcat8 tomcat:8.0

端口号看个人情况

7. 启动Tomcat容器

docker start tomcat8

run是创建时执行,是创建+启动

start是启动已经创建的容器,是启动

8. 进入容器

docker exec -it tomcat8 /bin/bash

9. 拉取MySQL镜像

docker pull mysql:8

10. 启动MySQL镜像

docker run --name mysqq -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8

然后我们就可以快乐的启动MySQL了。哦耶!!!

11. 创建Docker镜像

11.1 创建目录

/usr/local/docker/jar/demo

11.2 传入jar文件

通过网盘分享的文件:240919_DemoNginx-1.0-SNAPSHOT.jar

链接: https://pan.baidu.com/s/1QgBn1kCKKzLguf4INeYEIA?pwd=eyqa 提取码: eyqa

将如上文件传入该目录(/usr/local/docker/jar/demo)

11.3 安装环境

执行如下命令

docker pull openjdk:8

11.4 在该目录创建Dockerfile文件

无后缀名

将如下信息填入该文件

FROM openjdk:8

ADD 240919_DemoNginx-1.0-SNAPSHOT.jar /app.jar

RUN bash -c 'touch /app.jar'

ENTRYPOINT ["java","-jar","/app.jar"]

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

11.5 创建镜像

cd /usr/local/docker/jar/demo
docker build -t demo .

11.6 启动项目

docker run -d -p 8888:8888 --name demo001 demo .

进入如下网址

http://192.168.189.103:8888/test/getval

192.168.189.103是虚拟机的地址


总结

本文讲述了:

Docker:开源的应用容器引擎;

在下攸攸太上,你们的生命也是通过无数的植物动物的生命堆出来的尸山血海罢了。既然如此,不必感到负罪,而是珍惜自己的生命,就是对所有你所消灭的所有生命的最大的感恩!

相关推荐
呜呼~2251433 分钟前
前后端数据交互
java·vue.js·spring boot·前端框架·intellij-idea·交互·css3
飞的肖40 分钟前
从测试服务器手动热部署到生产环境的实现
java·服务器·系统架构
网络安全-杰克44 分钟前
《网络对抗》—— Web基础
前端·网络
周伯通*1 小时前
策略模式以及优化
java·前端·策略模式
两点王爷1 小时前
Java读取csv文件内容,保存到sqlite数据库中
java·数据库·sqlite·csv
几维安全1 小时前
出海隐私合规解决方案,一文助力中企合规出海
网络·安全
问道飞鱼1 小时前
【Springboot知识】Springboot进阶-实现CAS完整流程
java·spring boot·后端·cas
抓哇小菜鸡1 小时前
WebSocket
java·websocket
single5941 小时前
【c++笔试强训】(第四十五篇)
java·开发语言·数据结构·c++·算法
Q_19284999061 小时前
基于Spring Boot的电影网站系统
java·spring boot·后端