docekr环境搭建配置!!!

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,1000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 本文介绍了Docker的安装部署及基本操作,包括使用国内源安装Docker CE、配置Linux内核流量转发、启动第一个容器、初体验Docker玩法、镜像命令、镜像详解、镜像分层结构、镜像实践操作、容器管理实践等内容。通过具体示例,如下载并运行MySQL、Redis、Nginx和WordPress镜像,帮助读者快速掌握Docker的基本使用方法。

[TOC]

02_docker安装部署

1.国内源安装docker-ce

配置linux内核流量转发功能

配置清华、阿里源皆可

清华的

阿里的

Docker 服务端版本

启动第一个容器

2.初体验docker玩法

镜像命令

搜索镜像

下载镜像

查看镜像列表

获取docker hub 可用镜像版本

运行镜像,生成容器(nginx容器)

1. 本地运行模式


2. 对外运行模式

3.一张图玩懂docker操作

4.docker镜像详解

一个完成的Docker镜像可以支撑容器的运行,镜像提供文件系统


内核与发行版

传统的虚拟机安装操作系统所提供的系统镜像,包含两部分:

Linux内核部分


而docker镜像是不包含内核的,只是下载了某个发行版部分。


docker镜像定义(如何生成的镜像)

我们如果自定义镜像,刚才超哥已经和大家说了,docker镜像不包含linux内核,和宿主机共用。

我们如果想要定义一个mysql5.6镜像,我们会这么做

  • 获取基础镜像,选择一个发行版平台(ubutu,centos)
  • 在centos镜像中安装mysql5.6软件

导出镜像,可以命名为mysql:5.6镜像文件。

从这个过程,我们可以感觉出这是一层一层的添加的,docker镜像的层级概念就出来了,底层是centos镜像,上层是mysql镜像,centos镜像层属于父镜像。

为什么要有docker镜像

其实就是将业务代码运行的环境,整体打包为单个的文件,就是docker镜像。

如何创建docker镜像

现在docker官方共有仓库里面有大量的镜像,所以最基础的镜像,我们可以在公有仓库直接拉取,因为这些镜像都是原厂维护,可以得到即使的更新和修护。

dockerfile

我们如果想去定制这些镜像,我们可以去编写Dockerfile,然后重新bulid,最后把它打包成一个镜像

这种方式是最为推荐的方式包括我们以后去企业当中去实践应用的时候也是推荐这种方式。

docker commit

当然还有另外一种方式,就是通过镜像启动一个容器,然后进行操作,最终通过commit这个命令commit一个镜像。

docker镜像分层结构

可以基于 docker history 查看镜像每一层信息
[root@docker-01 ~]#docker history nginx:1.17.9

base镜像

base镜像是指如各种Linux发行版,如centos,ubuntu,Debian,alpine等。

docker为什么分层镜像

例如在后面的docker优化篇有一个多阶段构建镜像

镜像1 ,centos7.9 基础镜像,我们可以在这里做环境基础配置,如yum源,防火墙,主机名,dns设置等

镜像2,以这个为基础,再构建如nginx环境,然后提交,这就是一个独立的nginx+centos的镜像。


镜像3,例如再多阶段,构建一个php-fpm镜像,以镜像2为base image,这样我们就构建了一个centos+nginx+php的镜像,并且这仨,只用同一份基础镜像,每个阶段只是额外加了一层而已。

镜像4 ,该优化手段,可以实现,任意的组合,每个阶段的镜像,都可以搭配其他环境使用,作为base image,或者叫父镜像。


因此docker镜像这种镜像分为一层一层的概念,实现的技术名字叫做 联合文件系统UnionFS。

镜像分享一大好处就是共享资源,例如有多个镜像都来自于同一个base镜像,那么在docker 主机只需要存储一份base镜像。

内存里也只需要加载一份base镜像,即可为多个容器服务。

即使多个容器共享一个base镜像,某个容器修改了base镜像的内容,例如修改/etc/下配置文件,其他容器的/etc/下内容是不会被修改的,修改动作只限制在单个容器内,这就是容器的写入时复制特性(Copy-on-write)。

5.docker镜像实践操作

镜像详细命令

1.获取镜像,docker hub里有大量高质量的镜像

2.查看所有镜像

3.docker本地镜像存储在宿主机的目录查看

# 基于docker info 查看 docker数据目录
docker info 


4.# 以基础镜像运行一个容器,添加参数
-i  Keep STDIN open even if not attached
-t  Allocate a pseudo-TTY 
--rm  Automatically remove the container when it exits
--name   Assign a name to the container
bash 指定容器运行什么

镜像增删改查管理

none镜像

none镜像(dangline image 虚悬镜像)

出现none镜像的原因:

  • 在docker hub上镜像如果更新后,名称变化,用户再docker pull就会出现该情况
  • docker build时候,镜像名重复,也会导致新旧镜像同名,旧镜像名称被取消,出现none
1. 一般用docker tag解决即可
2. 或者提取docker id 删除none镜像

列出镜像

1.根据名字列出镜像

2.查看指定镜像

3.只查看镜像id,id就代表该镜像了

4.格式化输出docker信息

5.更丰富的格式化
[root@docker-01 ~]#docker images --format "table {
  {.ID}} {
  {.Repository}} {
  {.Tag}}"

6.格式化是docker信息提取的高级语法,需要学习下go的template语法
# 基于--format="{
  {json .}}" 拿到详细字段,即可格式化

[root@docker-01 ~]#docker images --format="{
  {json .}}"

[root@docker-01 ~]#docker images --format="{
  {.CreatedAt}} {
  {.ID}}  {
  {.Repository}} {
  {.Size}} {
  {.Tag}}" |column -t

删除本地镜像

# 删除镜像,可以用 ID,名字

# 删除镜像,要先干掉使用该镜像的容器(无论是否存活)


# 不加tag版本的话,默认latest


# 清理挂掉的容器实例记录


# 根据id删除(最短3位)


# 清理所有镜像(危险命令)
# 删除命令,包括了删除,以及取消tag两个步骤



# 提示,不要随便用 docker rmi -f 强制参数

导出、导入镜像

常用于公司的离线环境使用镜像

默认导出的是tar归档文件

导出镜像

导入镜像
# 环境清理

# 导入本地镜像

查看镜像详细信息

[root@docker-01 /images_save_all]#docker inspect nginx:1.17.9  | jq 

# 查看无论是镜像,还是容器的详细信息,都是维护容器的重要手段

6.docker容器管理实践

启动容器

docker run等于创建+启动

注意:容器内的进程必须处于前台运行状态,否则容器就会直接退出

我们运行如centos基础镜像,没有运行任何程序,因此容器直接挂掉

# 交互式的运行,可以进入容器空间


# 非交互式运行,容器会直接挂掉(一般用于测试让容器执行某个命令,或者将某个镜像当做一个调试环境,执行xxx命令)

# 查看容器历史记录

运行可以活着的容器

-d 对于宿主机,后台运行容器
-p 端口映射

# 直接访问宿主机即可

# 宿主机上访问容器ip也可以

# 提取容器ip

# 访问容器


# 运行容器且指定名字

停止容器(并非删除)


监控容器资源状态


进入容器空间


访问容器应用(redis)

由于我们做了端口映射,可以基于宿主机的端口访问


查看容器内日志


删除容器


查看容器记录(挂掉,运行中)


批量干掉容器进程

-q 只显示id

-a 显示所有记录

1. 下载mysql5.7.38镜像,确保可以远程访问,创建库表
2. 下载redis最新镜像,确保可以远程访问,读写key
3. 下载nginx 1.21.5 ,确保可以远程访问,修改首页内容为,"云原生!我来了!"
4. 下载wordpress最新镜像,运行,确保可以访问,发表文章。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
分布式计算 大数据 Apache
【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)
【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)
706 0
|
Shell 数据安全/隐私保护
执行jobs命令查看不到任务的原因终于找到了
背景 执行nohup command &后,断开终端,执行jobs命令查看不到任务的原因,终于找到了。 首先执行完如下步骤: 1.nohup scp user@server:path/file localpath 2.输入密码 3.按Ctrl+Z挂起当前进程 4.使用命令bg让挂起的进程继续运行
|
Ubuntu NoSQL Linux
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
这篇文章详细介绍了Docker的基本使用,包括Docker的安装、常用命令、架构概念等,并通过图解和实践帮助读者快速掌握Docker的使用方法。
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
|
12月前
|
缓存 Linux Docker
【最新版正确姿势】Docker安装教程(简单几步即可完成)
之前的老版本Docker安装教程已经发生了变化,本文分享了Docker最新版安装教程,其他操作系统版本也可以参考官 方的其他安装版本文档。
11154 3
【最新版正确姿势】Docker安装教程(简单几步即可完成)
|
机器学习/深度学习 数据可视化 TensorFlow
探索Python在数据科学中的应用
这篇文章深入探讨了Python编程语言在数据科学领域的强大应用。从数据处理、分析到可视化,再到机器学习和深度学习,Python因其丰富的库和框架而成为数据科学家的首选工具。文章不仅介绍了Python的基本语法和数据结构,还详细讨论了如何使用Pandas进行数据清洗和预处理,以及NumPy和SciPy在数值计算中的重要性。此外,文章还涵盖了使用Matplotlib和Seaborn进行数据可视化的技巧,以及Scikit-learn和TensorFlow在构建预测模型中的应用。通过综合运用这些工具,数据科学家能够更有效地分析大量复杂的数据集,从而洞察趋势、模式和关联性,支持决策制定和策略优化。
240 20
|
Java C# Swift
Java Stream中peek和map不为人知的秘密
本文通过一个Java Stream中的示例,探讨了`peek`方法在流式处理中的应用及其潜在问题。首先介绍了`peek`的基本定义与使用,并通过代码展示了其如何在流中对每个元素进行操作而不返回结果。接着讨论了`peek`作为中间操作的懒执行特性,强调了如果没有终端操作则不会执行的问题。文章指出,在某些情况下使用`peek`可能比`map`更简洁,但也需注意其懒执行带来的影响。
608 2
Java Stream中peek和map不为人知的秘密
|
人工智能 数据可视化 Python
【2024美赛】C题 Problem C: Momentum in Tennis网球运动中的势头26页完整论文
本文是关于2024美国大学生数学建模竞赛C题"网球运动中的势头"的完整论文,由一位自称对网球规则和比赛数据非常熟悉的计算机博士撰写,提供了问题分析、数学模型、实现代码和26页的完整论文。
1226 2
【2024美赛】C题 Problem C: Momentum in Tennis网球运动中的势头26页完整论文
|
设计模式 Java 程序员
拜托!别再滥用 != null 判空了!!——优化你的代码,提升开发效率
【8月更文挑战第20天】在软件开发的世界里,null 值的存在如同一把双刃剑,既提供了灵活性,也带来了复杂性。而!= null 的判空操作,几乎成了每个程序员日常编码中的“标配”。然而,过度依赖这种简单直接的判空方式,往往会导致代码可读性下降、逻辑冗余、甚至引入难以察觉的bug。今天,我们就来探讨一下如何优雅地减少或避免滥用!= null判空,从而提升代码质量和开发效率。
433 3
|
存储 网络协议 Unix
docker的底层原理一:客户端-服务器架构
本文详细解释了Docker的客户端-服务器架构,包括常驻后台的Docker守护进程、通过命令行接口发送请求的Docker客户端、以及它们之间通过Unix socket或网络接口进行的通信。
207 0
|
JavaScript 前端开发
node.js 导入导出模块(CommonJS模块化规范,ES6模块化规范)
node.js 导入导出模块(CommonJS模块化规范,ES6模块化规范)
257 1