Docker从入门到实战

Docker基本概念

1、解决的问题

1、统一标准

  • 应用构建
    ○ Java、C++、JavaScript
    ○ 打成软件包
    ○ .exe
    ○ docker build … 镜像
  • 应用分享
    ○ 所有软件的镜像放到一个指定地方 docker hub
    ○ 安卓,应用市场
  • 应用运行
    ○ 统一标准的 镜像
    ○ docker run

容器化技术 VS 虚拟化技术
在这里插入图片描述

在这里插入图片描述

2、资源隔离

  • cpu、memory资源隔离与限制
  • 访问设备隔离与限制
  • 网络隔离与限制 用户、用户组隔离限制

2、架构

在这里插入图片描述

  • Docker_Host:
    ○ 安装Docker的主机
  • Docker Daemon:
    ○运行在Docker主机上的Docker后台进程
  • Client:
    ○操作Docker主机的客户端(命令行、UI等)
  • Registry:
    ○ 镜像仓库
    ○ Docker Hub
  • Images:
    ○ 镜像,带环境打包好的程序,可以直接启动运行
  • Containers:
    ○ 容器,由镜像启动起来正在运行中的程序

交互逻辑
装好Docker,然后去 软件市场 寻找镜像,下载并运行,查看容器状态日志等排错

3、安装

1、centos下安装docker

其他系统参照如下文档
参照文档

1、移除以前docker相关包

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

2、配置yum源

sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、安装docker

sudo yum install -y docker-ce docker-ce-cli containerd.io#以下是在安装k8s的时候使用
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7  containerd.io-1.4.6

4、启动

systemctl enable docker --now

5、配置加速

这里额外添加了docker的生产环境核心配置cgroup

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker命令实战

在这里插入图片描述

常用命令

基础实战

1、找镜像

去docker hub,找到nginx镜像

docker pull nginx  #下载最新版镜像名:版本名(标签)docker pull nginx:1.20.1docker pull redis  #下载最新
docker pull redis:6.2.4## 下载来的镜像都在本地
docker images  #查看所有镜像redis = redis:latestdocker rmi 镜像名:版本号/镜像id

2、启动容器

启动nginx应用容器,并映射88端口,测试的访问

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]【docker run  设置项   镜像名  】 镜像启动运行的命令(镜像里面默认有的,一般不会写)# -d:后台运行
# --restart=always: 开机自启
docker run --name=mynginx   -d  --restart=always -p  88:80   nginx# 查看正在运行的容器
docker ps
# 查看所有
docker ps -a
# 删除停止的容器
docker rm  容器id/名字
docker rm -f mynginx   #强制删除正在运行中的#停止容器
docker stop 容器id/名字
#再次启动
docker start 容器id/名字#应用开机自启
docker update 容器id/名字 --restart=always

在这里插入图片描述

3、修改容器内容

修改默认的index.html 页面

1、进容器内部修改

# 进入容器内部的系统,修改容器内容
docker exec -it 容器id  /bin/bash
echo <h1>welcome to chongqin</h1> >index.html

2、挂载数据到外部修改

注意!!!
事先在外面建好文件夹,写好nginx配置文件再启动,否则启动失败。

docker run --name=mynginx   \
-d  --restart=always \
-p  88:80 -v /data/html:/usr/share/nginx/html:ro  \
nginx# 修改页面只需要去 主机的 /data/html 例如在该目录下执行echo <h1>welcome to chongqin</h1> >index.html

目的是将docker容器中的某个目录,挂载到主机的某个目录
-v 后的内容就是指挂载内容,ro指的是主机可修改,但是容器内部不能修改。rw指的是容器内部也可以改

4、提交改变

将自己修改好的镜像提交

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]docker commit -a "yuze"  -m "首页变化" 341d81f7504f gnginx:v1.0

1、镜像传输

# 离线安装# 将镜像保存成压缩包
docker save -o abc.tar gnginx:v1.0# 别的机器加载这个镜像
docker load -i abc.tar也可以压缩成功后,将镜像传给别的主机:
scp abc.tar root@139.198.186.134:/root输入密码即可

5、推送远程仓库

推送镜像到docker hub;应用市场

docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname
# 把旧镜像的名字,改成仓库要求的新版名字
docker tag gnginx:v1.0 yuze/gnginx:v1.0# 登录到docker hub
docker login       docker logout(推送完成镜像后退出)# 推送
docker push yuze/gnginx:v1.0# 别的机器下载
docker pull yuze/gnginx:v1.0

6、补充

docker logs 容器名/id   排错docker exec -it 容器id /bin/bash# docker 经常修改nginx配置文件
docker run -d -p 80:80 \
-v /data/html:/usr/share/nginx/html:ro \
-v /data/conf/nginx.conf:/etc/nginx/nginx.conf \
--name mynginx-02 \
nginx#把容器指定位置的东西复制出来 
docker cp 5eff66eec7e1:/etc/nginx/nginx.conf  /data/conf/nginx.conf
#把外面的内容复制到容器里面
docker cp  /data/conf/nginx.conf  5eff66eec7e1:/etc/nginx/nginx.conf

进阶实战

1、编写自己的应用

编写一个HelloWorld应用
用脚手架快速创建

2、将应用打包成镜像

编写Dockerfile将自己的应用打包镜像

1、以前

Java为例
● SpringBoot打包成可执行jar
● 把jar包上传给服务
● 服务器运行java -jar

2、现在

所有机器都安装Docker,任何应用都是镜像,所有机器都可以运行

3、怎么打包-Dockerfile

FROM openjdk:8-jdk-slim
LABEL maintainer=yuzeCOPY target/*.jar   /app.jarENTRYPOINT ["java","-jar","/app.jar"]

COPY target/.jar /app.jar 将linux中的.jar复制到docker容器中并命名app.jar

docker build -t java-demo:v1.0 .

最后的. 表示基础目录是本目录,这里和dockerfile中的Copy命令 后面的参数相对应

3、启动容器

启动应用容器

docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0 

docker run -d 参数在后台运行容器。这个参数使得容器在启动后不会占用终端窗口,并且可以持续运行

分享镜像

# 登录docker hub
docker login#给旧镜像起名
docker tag java-demo:v1.0  yuze/java-demo:v1.0# 推送到docker hub
docker push yuze/java-demo:v1.0# 别的机器
docker pull yuze/java-demo:v1.0# 别的机器运行
docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0 

4、部署中间件

部署一个Redis应用,尝试应用操作Redis产生数据

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]#redis使用自定义配置文件启动docker run -v /data/redis/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data \
-d --name myredis \
-p 6379:6379 \
redis:latest  redis-server /etc/redis/redis.conf

在这里插入图片描述

redis-server /etc/redis/redis.conf 指的是启动redis的命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小插曲 -- 使用Visual Studio Code远程连接香橙派

在之前的学习中&#xff0c;代码的修改和保存都依赖于“vi”指令&#xff0c;而不得不承认vi指令的编辑界面非常原始&#xff0c;所以&#xff0c;如果可以将代码编辑放到更友好的环境里进行无疑是一件大快人心的事情。 本节介绍如何通过Visual Studio Code来进行远程连接: Vi…

[SpringCloud] Eureka 与 Ribbon 简介

目录 一、服务拆分 1、案例一&#xff1a;多端口微服务 2、案例二&#xff1a;服务远程调用 二、Eureka 1、Eureka 原理分析 2、Eureka 服务搭建&#xff08;注册 eureka 服务&#xff09; 3、Eureka 服务注册&#xff08;注册其他服务&#xff09; 4、Eureka 服务发现…

计算机视觉与深度学习 | 非线性优化理论:图优化、高斯牛顿法和列文伯格-马夸尔特算法

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 计算机视觉与深度学习 | SLAM国内外研究现状 计算机视觉与深度学习 | 视…

Nginx负载均衡和备份和故障转移

如果你想要两台 Nginx 服务器配置访问同一个链接&#xff0c;通常意味着你可能想要以下几种配置&#xff1a; 负载均衡&#xff1a;两台 Nginx 服务器都工作&#xff0c;当访问者请求资源时&#xff0c;流量会在这两台服务器之间进行均衡分配。备份和故障转移&#xff1a;其中…

Flask 上传文件,requests通过接口上传文件

这是一个使用 Flask 框架实现文件上传功能的示例代码。该代码定义了两个路由&#xff1a; /upload&#xff1a;处理文件上传请求。在该路由中&#xff0c;我们首先从请求中获取上传的文件&#xff0c;然后将文件保存到本地磁盘上&#xff0c;并返回一个字符串表示上传成功。 /…

JavaScript中的模板直面量

模板直面量 const book {name: 你爱的书籍为};console.log(${book.name});//注意使用来输出name的属性值 我们可以省去function关键字&#xff0c;只用>来表示 let circle r > {const name 3.14;const area name * r * r;return area;}console.log(circle(2)); 还…

模仿企业微信界面

备注&#xff1a;未实现相关功能&#xff0c;仅模仿界面&#xff0c;不能作为商业用途&#xff0c;若有侵权&#xff0c;请联系删除。 <Window x:Class"模仿企业微信界面.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"…

xcode The document “...“ could not be saved

Today when I tried to save a file on my project I get an error message saying: The document “nameOfFile.m” could not be saved. I tried reinstalling xcode but no luck. The file can be edited with other editors and I see the same behavior on all my project…

【Python数据挖掘 基础篇】Python数据挖掘是个啥?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 梦想从未散场&#xff0c;传奇永不落幕&#xff0c;博主会持续更新优质网络知识、Python知识、Linux知识以及各种小技巧&#xff0c;愿你我共同在CSDN进步 目录 一、了解数据挖掘 1. 数据挖掘是什么&#xff…

人工智能三要数之算法Transformer

1. 人工智能三要数之算法Transformer 人工智能的三个要素是算法、数据和计算资源。Transformer 模型作为一种机器学习算法&#xff0c;可以应用于人工智能系统中的数据处理和建模任务。 算法: Transformer 是一种基于自注意力机制的神经网络模型&#xff0c;用于处理序列数据的…

局域网内无法连接时间源?使用Chrony服务搭建时间源

1.安装chrony yum install -y chrony2.启动和设置配置文件 systemctl start chronyd3.设置为系统自动启动 systemctl enable chronyd以上服务器都需要安装 4.服务器192.168.1.63配置&#xff1a; 打开配置文件 /etc/chrony.conf 配置 allow 192.168.0.0/24 systemct…

Python---for循环中的两大关键字break和continue

之前在while循环中&#xff0c;也是用到两个关键字。 相关链接&#xff1a; 所以&#xff0c;在循环结构中都存在两个关键字&#xff1a;break和continue break&#xff1a;主要功能是终止整个循环 break&#xff1a;代表终止整个循环结构 continue&#xff1a;代表中止当…

ModbusTCP 转 Profinet 主站网关在博图配置案例

兴达易控ModbusTCP转Profinet网关&#xff0c;在 Profinet 侧做为 Profinet 主站控制器&#xff0c;接 Profinet 设备&#xff0c;如伺服驱动器&#xff1b;兴达易控ModbusTCP 和 Profinet网关在 ModbusTCP 侧做为 ModbusTCP 从站&#xff0c;接 PLC、上位机、wincc 屏等。 拓…

Docker harbor私有仓库部与管理

目录 搭建本地私有仓库 Docker容器的重启策略 Harbor 简介 什么是Harbor Harbor的特性 Harbor的构成 Docker harbor私有仓库部署 Harbor.cfg配置文件中的参数 维护管理Harbor 总结 搭建本地私有仓库 #首先下载 registry 镜像 docker pull registry#在 daemon.json …

Uniapp 原生设置的动态tabbar如何传参数动态 ?

在 UniApp 中设置原生 TabBar 并实现动态传参&#xff0c;可以通过使用Vue的响应式机制或者Vuex状态管理来实现。 以下是一个简单的示例&#xff1a; 以上这就是一个大概代码框架示例&#xff0c;具体实现应该根据项目需求做相应调整。欢迎来 注册 体验

四边形不等式

iai 冲突分段 套路题&#xff0c;基于单调性的分治优化。 记 f ( i , j ) f(i,j) f(i,j) 表示分 i i i 段&#xff0c;前 j j j 个的最小花费。 f ( i , j ) min ⁡ 0 ≤ k < j { f ( i − 1 , k ) c a l c ( k 1 , j ) } f(i,j) \min_{0 \le k < j}\{ f(i-1,k)…

nginx负载均衡(动静分离)

nginx负载均衡&#xff08;动静分离&#xff09; 文章目录 nginx负载均衡&#xff08;动静分离&#xff09;工作原理&#xff1a;环境说明&#xff1a;部署nginx负载均衡步骤&#xff1a;在负载均衡&#xff08;NGINX&#xff09;主机上做配置&#xff1a;测试&#xff1a;在浏…

0基础学习PyFlink——流批模式在主键上的对比

假如我们将《0基础学习PyFlink——使用PyFlink的Sink将结果输出到外部系统》中的模式从批处理&#xff08;batch&#xff09;改成流处理&#xff08;stream&#xff09;&#xff0c;则其在print连接器上产生的输出是不一样。 批处理 env_settings EnvironmentSettings \.new_…

两个list中存放相同的对象,一个是页面导入,一个是从数据库查询,外部传入一个集合存放的是对象的属性名称,根据属性名称处理两个list

需求:两个list中存放相同的对象,一个是页面导入,一个是从数据库查询,外部传入一个集合存放的是对象的属性名称.要求根据传入的属性(多个)判断两个list中是否有重复的对象, 如果重复则删除数据库的list, 然后合并两个list. /*** 处理导入和数据库重复数据* param list* param l…

网络协议--IGMP:Internet组管理协议

13.1 引言 12.4节概述了IP多播给出&#xff0c;并介绍了D类IP地址到以太网地址的映射方式。也简要说明了在单个物理网络中的多播过程&#xff0c;但当涉及多个网络并且多播数据必须通过路由器转发时&#xff0c;情况会复杂得多。 本章将介绍用于支持主机和路由器进行多播的In…