Docker学习笔记

学习的视频地址: https://www.bilibili.com/video/BV1og4y1q7M4

Docker

Docker 为什么要学它

  1. 高级工程师必备
  2. DevOps开发模式

学前准备:

  1. Linux(必备)
  2. SpingBoot

Docker 学习

学习路线

  • Docker 概述

  • Docker 安装

  • Docker 命令

    • 镜像命令
    • 容器命令
    • 操作命令
    • … .
  • Docker 镜像

  • 容器数据卷

  • DockerFile

  • Docker 网络原理

  • IDEA整合Docker

    上面这些对于一个开发者一家够用了

  • 集群管理:Docker Compose

  • 集群管理:Docker Swarm(简化版的k8s)

  • Ci\CD Jenkins

    下面才是考验功底的

Docker概述

Docker为什么出现?

一款产品:

开发:上线 两套环境!应用环境,应用配置!

开发——>运维 问题:在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大? 环境配置是十分的麻烦,每一个机器要部署环境(集群Redis、ES、Hadop…)!费时费力。


​ 发布一个项目(jar + (Redis MySQL jdk ES)),项目能不能都带上环境安装包! 之前在服务配置一个应用的环境Redis MySQL jdk ES Hadop,配置超麻烦了,不能够跨平台。 Windows,最后发布到Linux!

传统:开发jar,运维来做!

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

java — apk — 发布(应用商城) —张三使用apk — 安装即可用! java — jar(环境) — 打包项目带上环境(镜像) — (Docker 仓库:商店) — 下载我们发布的镜像 —直接运行即可!

Docker给以上的问题,提出了解决方案!https://www.docker.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-52BYEQQP-1653723132472)(docker学习笔记.assets/image-20220525165042809.png)]

Docker的思想就是来自于集装箱 JRE --多个应用(多个端口冲突)–原来都是交叉的! 隔离:Docker核心思想!打包装箱!每个箱子是相互隔离的。 水果 生化武器 Docker 通过隔离机制,可以将服务器利用到极致!

Docker的历史

历史:

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

做一些pass的云计算服务!LXC 有关的容器技术(pass:is基础设计服务,平台服务,以及最终的应用级服务、软件服务)

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

Docker 刚刚诞生的时候,没有引起行业的注意!dotCloud,就活不下去!

开源

开源代码!

2013年,Docker开源!

Docker越来越多的人发现了Docker的优点!火了,Docker每个月都会更新一个版本

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

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

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

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

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

聊聊Docker

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

官网:https://www.docker.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t03WJLr2-1653723132473)(docker学习笔记.assets/image-20220525165836628.png)]

文档地址:https://docs.docker.com/

仓库地址:https://hub.docker.com/

Docker能做什么

kernel:内核

Lib:运行所需要的库

之前的虚拟机技术

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xAeU10Cl-1653723132475)(docker学习笔记.assets/image-20220525170117628.png)]

虚拟机技术的缺点:

1、资源占用十分多

2、冗余步骤多

3、启动很慢

容器化技术

容器化技术不是模拟一个完整的操作系统(每个容器都是个独立的个体)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7bzu68QX-1653723132475)(docker学习笔记.assets/image-20220525170258527.png)]

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

  • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后再这个系统上安装和运行软件
  • 容器内的应用直接运行再宿主机的内容,容器时没有自己的内核的,也没有虚拟我i们的硬件,所以轻巧了
  • 每个容器间时相互隔离,每个容器内都有一个属于自己的文件系统互不影响。

DevOps(开发\运维)

应用更快捷的交付部署

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

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

更便捷的升级和扩缩容

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

项目打包为一个镜像,扩展 服务器A! 服务器B!

更简单的系统运维

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

更高效的计算机资源利用

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

Docker安装

Docker的基本组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GENqfIvn-1653723132476)(docker学习笔记.assets/image-20220525174519486.png)]

镜像(image):

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

容器(container):

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

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

仓库(repository):

仓库就是存放镜像的地方!

仓库分为共有仓库和私有仓库!

Docker Hub(默认是国外的)

阿里云…都有容器服务器(配置镜像加速!)

安装Docker

环境准备

  1. 需要会一点点的Linux的基础
  2. CenOS7
  3. 我们使用Xshell连接远程服务器进行操作

阿里云服务器的购买

  1. 入口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zxfb58ci-1653723132478)(docker学习笔记.assets/购买服务器的入口.png)]

  1. 选择自己需要的服务器类型(看经济情况和使用场景)

    2.1修改阿里云连接服务器的密码设置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WXvi5raM-1653723132479)(docker学习笔记.assets/修改阿里云连接服务器的密码设置.png)]

  2. 新增或编辑端口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vRZcLiAt-1653723132480)(docker学习笔记.assets/新增或编辑端口.png)]

  1. 容器加速的配置

    4.1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-41GY0b52-1653723132482)(docker学习笔记.assets/容器加速的配置地方1.png)]

​ 4.2

容器加速的配置地方2

查看环境

# 系统内核是3.10以上
[admin@localhost /]$ uname -r
2.6.32-642.el6.x86_64
# 系统版本
[root@localhost ~]# 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"

安装

帮助文档:

# 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  # 默认是从国外的!比较慢

yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  # 建议用国内阿里云的,比较快

# 更新yum软件包索引
yum makecache fast

# 4、安装docker    docker-ce 社区   ee 企业版
yum install docker-ce docker-ce-cli containerd.io

# 5、启动docker
systemctl start docker

# 6、使用docker version

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ch7LwrtB-1653723132483)(docker学习笔记.assets/image-20220525224110730.png)]

# 7.测试hello -world
docker run hello-world

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x1gpPIAB-1653723132484)(docker学习笔记.assets/image-20220525224726471.png)]

# 8、查看一下下载的这个hello-world镜像
[root@localhost ~]# docker images
REPOSITORY    TAG        IMAGE ID       CREATED        SIZE
hello-world   latest     feb5d9fea6a5   8 months ago   13.3kB

了解:卸载docker

# 1、卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

# 2、删除资源(要谨慎)
rm -rf /var/lib/docker
# /var/lib/docker  docker的默认工作路径!

1、登录阿里云找到容器服务,并找到镜像加速地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uFbBTr3u-1653723132485)(docker学习笔记.assets/image-20220525230908378.png)]

2、配置使用

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://l9bydpdt.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

回顾Hello-World执行流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BJoIC9J5-1653723132486)(docker学习笔记.assets/image-20220525224726471.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gbI2MMK2-1653723132487)(docker学习笔记.assets/image-20220525231634938.png)]

Docker底层原理

Docker是什么工作原理

Docker是一个Client - Server结构的系统,Docker的守护进行运行在主机上。通过Socket从客户端访问!

DockerServer接收到Docker-Client的指令,就会执行这个命令!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VbXDQRZW-1653723132488)(docker学习笔记.assets/image-20220525232000844.png)]

备注:Linux守护进程

守护进程是一个在后台运行并且不受任何终端控制的进程。Unix操作系统有很多典型的守护进程(其数目根据需要或20—50不等),它们在后台运行,执行不同的管理任务。

用户使守护进程独立于所有终端是因为,在守护进程从一个终端启动的情况下,这同一个终端可能被其他的用户使用。例如,用户从一个终端启动守护进程后退出,然后另外一个人也登录到这个终端。用户不希望后者在使用该终端的过程中,接收到守护进程的任何错误信息。同样,由终端键人的任何信号(例如中断信号)也不应该影响先前在该终端启动的任何守护进程的运行。虽然让服务器后台运行很容易(只要shell命令行以&结尾即可),但用户还应该做些工作,让程序本身能够自动进入后台,且不依赖于任何终端。

守护进程没有控制终端,因此当某些情况发生时,不管是一般的报告性信息,还是需由管理员处理的紧急信息,都需要以某种方式输出。Syslog 函数就是输出这些信息的标准方法,它把信息发送给 syslogd 守护进程。

Docker为什么比VM快?

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

2、Docker利用的是宿主的内核,vm需要Guest OS。

  • 如果要在vm上面跑两个服务,就需要虚拟两个centos出来
  • docker是直接在主机上安装docker engine服务,然后实例镜像,产生容器(每一个容器都是一个小的linux系统)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n3sKUE7J-1653723132489)(Docker学习笔记.assets/image-20220526160618393.png)]

所以说,新建一个容器的时候,docker不需要像虚拟机一样加载操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别,而docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YtfuzT2B-1653723132490)(docker学习笔记.assets/image-20220525234936246.png)]

Docker的常用命令

帮助命令

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

镜像命令

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

[root@localhost ~]# docker images
REPOSITORY    TAG        IMAGE ID       CREATED        SIZE
hello-world   latest     feb5d9fea6a5   8 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@yebin ~]# 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@yebin ~]# 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@yebin ~]# 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@yebin ~]# 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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-usiNU5fS-1653723132491)(docker学习笔记.assets/image-20220526000649735.png)]

docker rmi 删除镜像

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

容器命令

说明: 我们有了镜像才可创建容器,linux,下载一个centos镜像来测试学习

docker pull centos

新建容器并启动

docker run [可选参数] image
 
# 参数说明
--name=“Name”   容器名字    tomcat01    tomcat02    用来区分容器
-d      后台方式运行
-it     使用交互方式运行,进入容器查看内容
-p      指定容器的端口     -p 8080:8080
    -p  ip:主机端口:容器端口
    -p  主机端口:容器端口(常用)
    -p  容器端口
    容器端口
-p      随机指定端口
 
 
# 测试,启动并进入容器
[root@yebin ~]# docker run -it centos /bin/bash
[root@74e82b7980e7 /]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值