推广 热搜: page  小红  红书  数据  论文  考试  数据分析  关键词  哪些  搜索 

docker基础篇

   日期:2025-01-01     移动:https://sicmodule.kub2b.com/mobile/quote/17838.html

1、docker的作用

程序员在本地开发的代码依赖于本地的开发环境如:java版本、mysql版本等等,开发好后将代码提交到测试环境,如何保证测试环境和本地的开发环境、相关依赖一致的问题。
docker就可以解决这个问题,开发人员将代码打包成镜像,内含代码和开发环境,将环境一模一样的复制到其他环境,保证环境依赖一致性,解决因为版本环境问题产生的:在我的电脑上可以运行,换个机子就跑不起来的问题。
通过镜像运行在docker容器上的实例,而docker容器在任何操作系统都是一致的,这就实现了跨平台、跨服务,只需要一次配置好环境,打包成镜像,运行在别的机子上就可以一键部署,大大简化操作。

2、容器与传统虚拟技术的比较

  • 对比
    1、传统虚拟技术是虚拟一套硬件后,在其上运行一个完整的操作系统,在该系统上再运行所需应用进程
    2、容器的应用直接运行在服务器的内核,又没进行硬件虚拟,因此更为轻便,且每个容器之间互相隔离,每个容器都有自己的文件系统,容器之间不会相互影响,区分计算资源。

3、docker能干什么

  • 1、一次构建,处处运行

  • 2、更快速的交付和部署
    开发完成后,只需要交付少量的容器镜像文件,在正式生产环境加载镜像并运行即可,不必再提供安装程序和配置说明文档等复杂的配置,节省部署配置和测试验证的时间

  • 3、更便捷的升级和扩缩容
    当现有容器不足以支撑业务处理,通过镜像运行新的容器进行扩容。

  • 4、更高效的计算资源利用
    一台物理机上可运行很多容器实例,提高cpu和内存的利用率

4、去哪下

·docker官网:http://www.docker.com
·Docker Hub官网(主要下载镜像): https://hub.docker.com/

1、前提

2、容器的组成:镜像、容器、仓库

在java角度: 镜像就是 Book 这个类,它可以通过new 来创建容器 也就是b1;
在 docker角度:Redis是一个镜像文件,通过 docker run镜像来创建一个容器。
一个镜像可以创建多个容器,仓库就是存放这些镜像的地方

容器是镜像运行的实例,可以把容器看作一个简易版的Linux环境(包括root权限、进程空间、用户空间等和运行在其中的应用程序

3、安装

1、卸载旧版本

 

2、安装gcc

 

3、yum相关

 

4、安装docker

 

5、启动

 

6、版本

 

7、hello world

 

8、卸载

 
 
 

根据上图下方提示配置加速器

1、镜像是什么

镜像是一个轻量、可执行的独立软件包,包含运行某个软件所需的所有内容,把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行需要的依赖,这个打包好的运行环境就是 镜像文件。

2、分层镜像

1、docker在本机寻找镜像,有的话直接生成容器实例运行
2、本机没有的话,回到 docker hub查找该镜像,如果有就下载到本地 后生成容器实例运行,hub找不到就返回错误。

1、虚拟机他将一整套操作系统全部安装下来,包括用到和用不到的,并且进行硬件虚拟化,在宿主机的操作系统上运行一个操作系统,较于繁重,效率慢
2、容器是在与宿主机共用一个操作系统,docker相当于是一个软件,不需要虚拟化硬件,而是直接使用物理机的硬件资源,因此在效率高,且轻便。

·启动docker: systemctl start docker

·停止docker: systemctl stop docker

·重启docker: systemctl restart docker

·查看docker状态: systemctl status docker

·开机启动: systemctl enable docker

·查看docker概要信息: docker info

·查看docker总体帮助文档: docker --help

·查看docker命令帮助文档: docker 具体命令 --help

1、查看、下载、删除镜像命令

  • 5、删除镜像
    ·docker rmi 某个XXX镜像名字ID :普通删除,运行中的镜像不允许删除
    docker rmi -f 镜像ID :强制删除
    docker rmi -f $(docker images -qa):全部删除

运行镜像才能生成容器,镜像是容器的前提

1、启动一个交互式容器

1、首先下载一个 ubuntu 镜像,以此为例,运行ubuntu,生成的容器就是Ubuntu虚拟机 交互式 就是打开Ubuntu的终端进行命令输入
命令 docker run [选项] 镜像名 [命令]

  • 1、-i: 交互式操作。
  • 2、-t: 终端。
  • 3、Ubuntu:镜像
  • 4、/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

2、列出正在运行的容器

1、docker ps [选项]
选项:

  • 1、-a :列出当前所有正在运行的容器+历史上运行过的
  • 2、-l :显示最近创建一个的容器
  • 3、-n:显示最近n个创建的容器。
  • 4、-q :静默模式,只显示容器编号

3、退出容器

  • 1、exit :容器停止
  • 2、ctrl+p+q(手动) : 退出容器,不停止

4、启动、停止、重启、删除容器

  • 1、启动已经停止的容器:docker start 容器Id或者容器名
  • 2、重启 容器:docker restart 容器Id或者容器名
  • 3、停止容器:docker stop 容器Id或者容器名
  • 4、强制停止容器:docker kill 容器Id或者容器名
  • 5、删除容器 docker rm -f 容器Id
  • 6、一次性强制删除多个容器 :·docker rm -f $(docker ps -a -q) 或者 ·docker ps -a -q | xargs docker rm

5、启动守护式容器

6、查看容器日志、容器进程、容器细节

  • 1、查看容器日志:docker logs 容器Id
  • 2、查看容器运行的进程:docker top 容器Id
  • 3、查看容器内部细节:docker inspect 容器Id
  • 4、备份容器文件

7、进入已经退出命令终端但是正在运行的容器

  • 1、docker exec -it 容器ID bash 建议使用
    此命令打开会开启一个新的终端,启动新的进程,exit命令不会导致容器停止
  • 2、docker attach 容器ID
    此命令 直接进入原本的命令终端,不会启动新的进程,exit 导致容器停止

8、容器文件备份

镜像是一个轻量、可执行的独立软件包,包含运行某个软件所需的所有内容,把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行需要的依赖,这个打包好的运行环境就是 镜像文件。

我们 pull的镜像,如Ubuntu,当我们run这个镜像并进入bash命令交互时,使用vim会发现这个容器并没有vim插件,因为我们pull的Ubuntu镜像内只有最基本的内核环境,其他需要用到的,要自己去下载。

简单理解:最基础的base镜像只有基本的运行内核环境,当开发者在此基础上一次次的累加新的功能,然后提交新的版本号,就形成了多个层次(版本镜像,我们可以下载所有的版本号获取自己需要的版本环境。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。

比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像
同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

1、安装vim

2、提交容器副本成为新的镜像

docker commit -m=“备注说明” -a=“作者” 容器id 新的镜像名称:版本号

3、将本地镜像发布到阿里云仓库

3、创建完成后 出现以下界面,根据提示命令,将本机镜像推送到阿里云仓库。

4、本地镜像推送到docker 私有仓库

为什么要用私有库呢

  1. 阿里云不安全,并且可能会收费,主动权不在自己
  2. dockerHub 中国访问太慢

默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调—可以先看下面的容器卷相关点,再回来

2、查看 私有库内容
curl -XGET http://localhost:5000/v2/_catalog

3、将新镜像zzyyubuntu:1.2修改符合私服规范的Tag
docker tag 镜像:tag Host:Post/repository:tag

4、修改配置文件 使其支持 http的推送
docker默认不允许http方式推送镜像,通过配置选项来取消这个限制。====> 修改完后如果不生效,建议重启docker【systemctl restart docker】 – 重启后要再运行registry镜像

! 容器卷记得加入 privileged=true

还记得 运行docker私有库镜像的命令吗
docker run -d -p 5000:5000 -v /var/lib/registry:/tmp/registry --privileged=true registry
现在重点理解 加粗地方的内容

宿主机绝对路径目录和容器内目录 做一个映射进行数据同步并持久化

·docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

将docker容器数据以数据卷的方式完成数据的持久化。 ===容器的数据同步 + 持久化到本地主机目录中

特点
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接实时生效,爽
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止

1、宿主机和容器之间映射添加容器卷,实现数据互通

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

docker run -it --privileged=true -v /host_data:/docker_data ubuntu
定义的目录会自动创建,当 设置的容器目录中的数据变化也会同步到 宿主机的数据变化
相同 宿主机的数据变化 也会同步到容器目录中。

2、查看数据卷是否挂载成功

注意 :当容器停掉后,在宿主机目录下进行数据修改 后再启动容器,数据一样是同步的。

3、容器卷的只读规则限制

容器卷默认是 rw 双方可读可写,数据共享,但有些情况只允许读,我们就要做限制。

此时如果宿主机写入内容,可以同步给容器内,容器可以读取到。

4、容器卷的继承和共享

docker run -it --privileged=true --volumes-from 容器ID --name u2 镜像名
上述已经创建一个容器并与本主机的容器数据卷,再次创建一个容器使其继承 上个容器,这样就是 主机 和容器1 和容器2 三个都进行数据共享。

搜索镜像、拉取镜像、查看镜像、启动镜像、停止容器、移除容器

1、免修改版,可以用 tomcat8

·docker pull billygoo/tomcat8-jdk8
·docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8

1、配置 mysql 容器数据卷

避免删除容器后,mysql数据库数据就没了

1、命令
docker run -d -p 3306:3306 --privileged=true -v /mysql_info/mysql/log:/var/log/mysql -v /mysql_info/mysql/data:/var/lib/mysql -v /mysql_info/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7

2、配置文件解决:docker 配置的mysql 插入中文会报错的问题**

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
skip-grant-tables

重启mysql docker restart 容器ID

3、容器数据卷配置好后,删除容器后,再次使用上面的命令 运行一个mysql后,可以看到 所有数据都在。

1、配置redis容器数据卷

1、首先在 centos上创建文件夹
mkdir -p /app/redis
2、新建redis配置文件

 

上述配置文件 在redis 6.2版本可以直接使用不需要修改
如有其他版本,需要修改的有
1、开启redis密码验证 (可选)
requireoass 123

2、允许redis外地连接 必须注释掉 bind 127.0.0.1(必须)

3、daemonize no 设置为no(必须)

4、开启redis数据持久化((可选)
appendonly yes

2、执行命令

1、运行redis

 

2、进入redis容器
docker exec -it 容器名/id /bin/bash

本文地址:https://sicmodule.kub2b.com/quote/17838.html     企库往 https://sicmodule.kub2b.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号