IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> docker快速入门-docker系列一 -> 正文阅读

[系统运维]docker快速入门-docker系列一

1. Docker概述

1.1 Docker为很么会出现

一套产品:开发–上线 两套环境!应用环境, 应用配置!
开发–运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大?
环境配置是十分麻烦的,每一个机器都要部署环境(集群redis,ES,Hadoop…)!费时费力
发布一个项目(jar+(redis mysql jdk es)),项目能不能都带上环境安装打包!
之前在服务器配置一个应用的环境,redis mysql jdk es hadoop,配置超麻烦了,不能跨平台。
windows,最后发布到Linux!

传统:开发jar,运维来做!
现在:开发打包部署上线,一套流程昨晚!

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

docker给以上的问题,提出了解决方案!
在这里插入图片描述
dokcer的思想来源于集装箱!

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

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

1.2 Docker的历史

在这里插入图片描述
Docker是基于Go语言开发的!开源项目!
官网:https://www.docker.com/
文档地址:https://docs.docker.com/ Docker的文档是超级详细的!
仓库地址:https://hub.docker.com

简介
在这里插入图片描述

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。官网:https://docs.docker.com/

1.3 Docker能干嘛

之前的虚拟机技术
在这里插入图片描述

虚拟机技术缺点:

1.资源占用十分多
2. 冗余步骤多
3. 启动很慢

容器化技术

容器化技术不是模拟的一个完整的操作系统
在这里插入图片描述
比较docker和虚拟机技术的不同

在这里插入图片描述
在这里插入图片描述

2. Docker 安装

2.1 Docker的基本组成

在这里插入图片描述
在这里插入图片描述

2.2 安装Docker

环境准备

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

环境查看

查看系统内核

uname -r

在这里插入图片描述
系统版本

cat  /etc/os-release

在这里插入图片描述

安装

官网安装地址:https://docs.docker.com/engine/install/centos/
在这里插入图片描述

非root权限,命令前加sudo
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  #国内的地址

在这里插入图片描述
更新yum软件包索引

yum makecache fast

4. 安装docker docker-ce 社区版 ee企业版

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

在这里插入图片描述
5.启动docker

systemctl start docker

开机自启动

systemctl enable docker

6.使用docker version查看是否安装成功
在这里插入图片描述
7.下载hello-world镜像测试

docker run hello-world

此命令下载测试映像并在容器中运行它。
在这里插入图片描述
8.查看一下下载的hello-world镜像

docker images

在这里插入图片描述

2.3 卸载docker

1.卸载 Docker Engine、CLI 和 Containerd 包

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

2.删除资源

rm -rf /var/ib/docker

/var/ib/docker docker的默认工作路径
在这里插入图片描述

2.4 阿里云镜像加速

进入阿里云,搜索容器镜像服务
在这里插入图片描述
执行下面四条命令

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://5aleeac1.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

回顾hello-world流程

2.5 容器运行流程图

在这里插入图片描述

2.6 底层原理

Docker是怎么工作的?
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问!DockerServer接收到Docker-Client的指令,就会执行这个指令!
在这里插入图片描述
Docker为什么比VM快?
1、Docker有着比虚拟机更少的抽象层。

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

3. docker的常用命令

帮助命令

docker version            # docker版本信息
docker info                  # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help       # 帮助命令,(可查看某个命令的可选参数)

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

3.1 镜像命令

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

docker images

 docker images

在这里插入图片描述

# 解释
REPOSITORY  镜像的仓库源
TAG  镜像的标签
MAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小

# 可选项
  -a, --all             Show all images (default hides intermediate images)
  							显示所有镜像(默认隐藏中间镜像)
  							
      --digests         Show digests
      						显示摘要
      						
  -f, --filter filter   Filter output based on conditions provided
  							根据所提供的条件过滤输出
  							
      --format string   Pretty-print images using a Go template
      							格式化输出
      							
      --no-trunc        Don't truncate output
      							不间断输出
      							
  -q, --quiet           Only show image IDs
							只显示镜像id

常用 -a -q 可同时使用 -aq

在这里插入图片描述

3.1.2 镜像搜索

docker search 镜像名:[tag]

可以在https://hub.docker.com上直接搜索
这是docker镜像的仓库,开发者将自己的镜像发布到仓库供他人使用,相当于github
也可以使用命令搜索

docker search mysql

在这里插入图片描述
可以看到搜出一堆,STARS类似于github上的star
在这里插入图片描述
通过help可以看到有个–filter的可选项
我们可以通--filter=STARS=3000条件过滤出STARS大于3000的

可选项,通过STARS来过滤
--filter=STARS=3000          # 搜索出来的镜像就是STARS大于3000的

在这里插入图片描述

3.1.3 镜像下载

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

docker pull mysql

在这里插入图片描述
如果不写tag,默认就是latest
上面多个pull complete,意思是分层下载, docker images的核心 ;联合文件系统

这是签名,防伪
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 # 
docker.io/library/mysql:latest  # 这是镜像的真实地址

docker pull mysql等价于docker pull docker.io/library/mysql:latest

下载mysql指定版本

docker pull mysql:5.7

在这里插入图片描述
可以看到,只有四个pull complete ,其余的在上个命令已经下载了,这就是分层下载的好处。共用,节省内存

3.1.4 镜像删除

在这里插入图片描述

删除镜像可以通过镜像名和镜像id
先查看有哪些镜像

docker iamges

在这里插入图片描述
通过镜像id删除mysql5.7

docker rmi  -f  c20987f18b13

i表示镜像,-f表示强制删除
在这里插入图片描述
可以看到只删除刚刚下载的,并没有删除mysql:lastet版本下载的内容

删除所有镜像

docker rmi -f $(docker images -aq)

在这里插入图片描述

3.2 容器命令

知识

docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,
只需要使用命令docker start 即可。
docker run相当于执行了两步操作:将镜像放入容器中(docker create),
然后将容器启动,使之变成运行时容器(docker start)。

而docker start的作用是,重新启动已存在的镜像。也就是说,
如果使用这个命令,我们必须事先知道这个容器的ID,或者这个容器的名字,
我们可以使用docker ps找到这个容器的信息。

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

docker pull centos

在这里插入图片描述

新建容器并启动

docker run [可选参数] image
# 参数说明 
--name="Name"           容器名字   tomcat01  tomcat02  用来区分容器
-d              					后台方式运行
-it									使用交互方式运行,进入容器查看内容
-p 								指定容器的端口 -p  8080:8080
				四种方式
				-p  ip:主机端口:容器端口
				-p  主机端口:容器端口(常用)
				-p  容器端口
				容器端口
				
-P								随机指定端口

3.2.1 run运行容器

docker run [可选参数]  容器名

运行centos

docker run -it centos /bin/bash

在这里插入图片描述

docker run -it centos 的意思是,为centos这个镜像创建一个容器
-it就等于 -i和-t,这两个参数的作用是,为该docker创建一个伪终端,
这样就可以进入到容器的交互模式(也就是直接进入到容器里面)

后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,
要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash。

查看容器内的centos
ls
在这里插入图片描述

3.2.2 退出容器

exit         #容器停止并退出(后台方式运行则仅退出)
ctrl + P + Q  # 容器不停止并退出

在这里插入图片描述

3.2.3 列出所有运行的容器

# docker ps 命令
					列出所用正在运行的容器
-a					列出所用正在运行的容器+带出历史运行过的容器
-n=?				显示最近创建的容器
-q					只显示容器的编号
[root@cent /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@cent /]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                     PORTS     NAMES
3e191afc47d3   centos    "/bin/bash"   10 minutes ago   Exited (0) 4 minutes ago             serene_sinoussi
[root@cent /]# docker ps -n=1
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                     PORTS     NAMES
3e191afc47d3   centos    "/bin/bash"   13 minutes ago   Exited (0) 7 minutes ago             serene_sinoussi
[root@cent /]# docker ps -aq
3e191afc47d3
[root@cent /]# 

3.2.4 删除容器

docker rm 容器id      #删除容器,不能删除正在运行的容器
docker rm -f 容器id      #删除容器,能删除正在运行的容器
docker rm -f $(docker ps -aq)  #删除所有容器
docker ps -aq | xargs docker rm  # 删除所有容器

3.2.5 启动和停止容器

docker start 容器id          #启动已有的容器
docker restart 容器id      #重启已有的容器
docker stop 容器id         #停止正在运行的容器
docker kill 容器id          #强制停止当前容器

3.3 其他常用命令

3.3.1 后台启动容器

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

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

3.3.2 查看日志

# 命令
docker logs -f -t --tail 10 容器id  
发现没有日志 

# 自己编写一段脚本  每隔一秒输出kuangshen
[root@cent /]# docker run -d centos /bin/bash -c "while true;do echo kuangshen;sleep 1;done"
ce52156179726c019f8037bfa7257ec6283c3587e8e77686ae2adaed71dfe3a0
[root@cent /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
ce5215617972   centos    "/bin/bash -c 'while…"   7 seconds ago   Up 6 seconds             youthful_chaplygin
[root@cent /]# 


# 查看日志
-tf            # 显示日志并显示时间戳
-tail number  #要显示的日志条数
[root@cent /]# docker logs -tf --tail 10 ce5215617972

3.3.3 查看容器中进程信息

# 命令 
docker top 容器id

[root@cent /]# docker top ce5215617972
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3451                3432                0                   11:43               ?                   00:00:00            /bin/bash -c while true;do echo kuangshen;sleep 1;done
root                4546                3451                0                   12:00               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

3.3.4 查看容器的元数据

# 命令
docker inspect 容器id

# 测试  可以看到容器id只是id属性的缩写
[root@cent /]# docker inspect ce5215617972
[
    {
        "Id": "ce52156179726c019f8037bfa7257ec6283c3587e8e77686ae2adaed71dfe3a0",
        "Created": "2021-12-22T03:43:22.928043776Z",
        "Path": "/bin/bash",
        "Args": [
            "-c",
            "while true;do echo kuangshen;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 3451,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-12-22T03:43:23.521780276Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
       省略。。。。。。。。。。。。。。    
    }
]

3.3.5 进入当前正在运行的容器

# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
################## 方式一
# 命令
docker exec -it 容器id /bin/bash

# 测试
[root@cent /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS     NAMES
ce5215617972   centos    "/bin/bash -c 'while…"   5 hours ago   Up 5 hours             youthful_chaplygin
[root@cent /]# docker exec -it ce5215617972 /bin/bash
[root@ce5215617972 /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@ce5215617972 /]# 


################## 方式二
# 命令
docker attach 容器id
# 测试
[root@ce5215617972 /]# exit
exit
[root@cent /]# docker attach ce5215617972

#######################################
# docker exec       # 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach     # 进入容器正在执行的终端,不会启动新的进程 

3.3.6 容器内文件拷贝到主机上

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

# 1.查看当前主机容器
[root@cent /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS     NAMES
ce5215617972   centos    "/bin/bash -c 'while…"   6 hours ago   Up 6 hours             youthful_chaplygin

# 2.进入docker容器内部,在home下创建文件
[root@cent /]# docker exec -it ce5215617972 /bin/bash
[root@ce5215617972 /]# cd /home
[root@ce5215617972 home]# touch test.java
[root@ce5215617972 home]# exit
exit
# 3.容器内文件拷贝到主机上
[root@cent /]# docker cp ce5215617972:/home/test.java /home
[root@cent /]# cd /home
[root@cent home]# ls
test.java
[root@cent home]# 

小结

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
练习

Docker 安装Nginx

# 1、搜索镜像 docker search nginx 建议去dockerhub搜索,可以看到帮助文档
# 2、下载镜像 docker pull nginx
# 3、运行测试

# -d 后台运行
# --name 给容器取名
# -p 宿主机端口:容器内部端口
[root@cent home]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    f6987c8d6ed5   31 hours ago   141MB
centos       latest    5d0da3dc9764   3 months ago   231MB
[root@cent home]# docker run -d --name nginx01 -p 8080:80 nginx
feafe98a092e6c442f0c238243e0128b6dca994ca632e3a3a51943551d5aaef8
[root@cent home]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES
feafe98a092e   nginx     "/docker-entrypoint.…"   9 seconds ago   Up 8 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   nginx01
ce5215617972   centos    "/bin/bash -c 'while…"   6 hours ago     Up 6 hours                                             youthful_chaplygin
[root@cent home]# curl localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<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
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@cent home]# 


# 进入容器,查看nginx配置文件
[root@cent home]# docker exec -it nginx01 /bin/bash
root@feafe98a092e:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@feafe98a092e:/# cd /etc/nginx
root@feafe98a092e:/etc/nginx# ls
conf.d	fastcgi_params	mime.types  modules  nginx.conf  scgi_params  uwsgi_params
root@feafe98a092e:/etc/nginx# 

# 退出容器,停止容器
root@feafe98a092e:/etc/nginx# exit
exit
[root@cent home]# docker stop nginx01
nginx01
[root@cent home]# 

端口暴露的概念
在这里插入图片描述
我用到外网的8080端口,如果要用别的端口,一是需要在安全组设置;二是防火墙设置该端口的访问或者关闭防火墙
浏览器访问 阿里云外网ip:8080
在这里插入图片描述

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

docker安装一个tomcat

# 官网的使用
docker run -it --rm tomcat:9.0
# 我我们之前的启动都是后台运行,停止了容器之后,使用docker ps -a 还是可以查的到停止运行的容器。但是docker run -it --rm  ,是用完即删除(类似于删除历史访问记录),一般用来测试

# 1.下载镜像
docker pull tomcat

# 2.启动运行如果用别的端口进行映射例如,3344:8080 ,就需要去阿里云服务台设置安全组同时关闭防火墙
docker run -d -p 8080:8080 --name tomcat01 tomcat

# 3.访问阿里云ip:8080  测试访问没有问题,只是404,因为webapps里面啥也没有

# 4.进入容器
[root@cent home]# docker exec -it tomcat01 /bin/bash
root@d9c956a4d549:/usr/local/tomcat# ls
BUILDING.txt	 NOTICE		RUNNING.txt  lib	     temp	   work
CONTRIBUTING.md  README.md	bin	     logs	     webapps
LICENSE		 RELEASE-NOTES	conf	     native-jni-lib  webapps.dist
root@d9c956a4d549:/usr/local/tomcat# cd webapps
root@d9c956a4d549:/usr/local/tomcat/webapps# ls
root@d9c956a4d549:/usr/local/tomcat/webapps# cd ..

# 5.将webapps.dist下的所有文件复制到webapps目录下
root@d9c956a4d549:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@d9c956a4d549:/usr/local/tomcat# 

6.再次访问访问阿里云ip:8080  ,可以看到那只猫
# 发现问题 1.linux 命令少了 2.没有webapps 。 阿里云镜像的原因,默认是最小的镜像,所有不必要的都被剔除掉了
# 包装最小可运行的环境

  • 思考问题:我们以后要部署项目,每次需要进入容器内部,十分麻烦,要是可以在容器外部提供一个映射路径,webapps,我们在外部部署项目,就自动同步到内部就好了!

部署es+kibana

# es 暴露的端口很多!
# es 十分地耗内存
# es 的数据一般需要放置到安全目录!挂载
#  --net somework ? 网络配置,暂时不用

# 启动 elasticsearch
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
# 查看 docker stats

在这里插入图片描述

# 增加内存限制 修改配置文件 -e 环境配置修改

# 1.正式启动
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node"  -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
# 2.查看 docker stats

在这里插入图片描述

# 3.curl localhost:9200
 测试一下es是否成功了
 
^C
[root@cent ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                                                                                  NAMES
7b60ad766823   elasticsearch:7.6.2   "/usr/local/bin/dock…"   4 minutes ago   Up 4 minutes   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch
[root@cent ~]# curl localhost:9200
{
  "name" : "7b60ad766823",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "OYMJGjzPRymdAGmvnub2UQ",
  "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"
}
[root@cent ~]# 

  • 使用kibana连接es,思考网络如何猜呢连接过去?
    在这里插入图片描述

3.3.7 docker可视化

  • portainer(先用这个)
docker run -d -p 8088:9000  --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

访问测试 阿里云外网ip:8088

首次登陆需要设置密码
在这里插入图片描述
选择本地的
在这里插入图片描述

进入之后
在这里插入图片描述
在这里插入图片描述

  • Rancher(CI/CD再用)

4. docker 镜像

4.1 镜像是什么

在这里插入图片描述

4.2 镜像加载原理

UnionFS(联合文件系统)

在这里插入图片描述

Docker镜像加载原理
在这里插入图片描述
在这里插入图片描述

4.3 分层理解

分层的镜像
我们可以去下载一个镜像,注意观察下载的日志输出,可以看到是一层一层的在下载!
在这里插入图片描述
在这里插入图片描述

[root@cent ~]# docker image inspect redis:latest
[
    {
        "Id": "sha256:7614ae9453d1d87e740a2056257a6de7135c84037c367e1fffa92ae922784631",
        "RepoTags": [
            "redis:latest"
        ],
      省略
    }
]

理解
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

特点
Docker镜像都是可读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!

在这里插入图片描述
如何提交一个自己的镜像

4.4 commit镜像

docker commit 提交容器成为一个新的副本
# 命令和git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]

实战测试

1.启动一个默认的tomcat

[root@cent ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
redis                 latest    7614ae9453d1   26 hours ago    113MB
nginx                 latest    f6987c8d6ed5   35 hours ago    141MB
tomcat                latest    24207ccc9cce   13 days ago     680MB
centos                latest    5d0da3dc9764   3 months ago    231MB
portainer/portainer   latest    580c0e4e98b0   9 months ago    79.1MB
elasticsearch         7.6.2     f29a1ee41030   21 months ago   791MB
[root@cent ~]# docker run -it -p 8080:8080 tomcat

然后去访问ip:8080,发现404
2. 另起一个窗口进行查看,发现这个默认的tomcat 里webapps是空的,镜像的原因,官方的镜像默认webapps下面是没有文件的!

  1. 我们自己把webapps.dist下的文件拷贝到webapps下
[root@cent ~]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED         STATUS         PORTS                                       NAMES
3f013e9d7680   tomcat    "catalina.sh run"   7 minutes ago   Up 7 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   distracted_turing
[root@cent ~]# docker exec -it 3f013e9d7680 /bin/bash
root@3f013e9d7680:/usr/local/tomcat# ls
BUILDING.txt	 NOTICE		RUNNING.txt  lib	     temp	   work
CONTRIBUTING.md  README.md	bin	     logs	     webapps
LICENSE		 RELEASE-NOTES	conf	     native-jni-lib  webapps.dist
root@3f013e9d7680:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@3f013e9d7680:/usr/local/tomcat# 

4.将我们操作过的容器通过commit 提交为一个镜像!我们以后就可以用我们修改过的镜像tomcat02。以后启动就可以用docker run -it -p 8080:8080 tomcat:1.0

docker commit -a="wly" -m="add webapps app" 3f013e9d7680 tomcat02:1.0

在这里插入图片描述

如果你想保持当前容器的状态,就可以通过commit来提交,获得一个镜像,就好比学习VM时,快照!

到了这里才是入门Docker!
狂神视频教程:https://www.bilibili.com/video/BV1og4y1q7M4

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 16:04:59  更:2021-12-23 16:05:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:24:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码