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.1


docker pull redis  #下载最新
docker pull redis:6.2.4

## 下载来的镜像都在本地
docker images  #查看所有镜像

redis = redis:latest

docker 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=yuze

COPY target/*.jar   /app.jar

ENTRYPOINT ["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的命令

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32:TTL串口调试

一.TTL串口概要 TTL只需要两个线就可以完成两个设备之间的双向通信&#xff0c;一个发送电平的I/O称之为TX&#xff0c;与另一个设备的接收I/O口RX相互连接。两设备之间还需要连接地线(GND)&#xff0c;这样两设备就有相同的0V参考电势。 二.TTL串口调试 实现电脑通过STM32发送…

current file is not included in a workspace moduleg 存在多个 main函数的 Go项目 无法成功导包

报错缘由 学习 hystria, 尝试自测案例,使用了 go get “github.com/afex/hystrix-go/hystrix” 进行导入包&#xff0c; 导入成功后&#xff0c;在代码里利用 import 导入&#xff0c;但遇到了以下报错 could not import github.com/afex/hystrix-go/hystrix (current file i…

【前端性能】性能优化手段-高频面试题

持续更新.............................最近更新2023/10/24 1. 讲一下png8、png16、png32的区别&#xff0c;并简单讲讲 png 的压缩原理 PNG8、PNG16、PNG32 是 PNG 图像格式的不同变种&#xff0c;它们主要区别在于颜色深度和透明度支持的不同。 区别 PNG8&#xff1a; PN…

指定顺序输出

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

Django 注册及创建订单商品

注册功能的实现 user/views from rest_framework.generics import GenericAPIView from rest_framework.views import APIViewfrom apps.user.models import User from apps.user.serializers import UserSerializer from utils import ResponseMessage from utils.jwt_auth …

C++前缀和算法的应用:从仓库到码头运输箱子原理、源码、测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 双指针 单调双向队列 题目 你有一辆货运卡车&#xff0c;你需要用这一辆车把一些箱子从仓库运送到码头。这辆卡车每次运输有 箱子数目的限制 和 总重量的限制 。 给你…

JAVA基础(JAVA SE)学习笔记(八)面向对象编程(高级)

前言 1. 学习视频&#xff1a; 尚硅谷Java零基础全套视频教程(宋红康2023版&#xff0c;java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 第二阶段&#xff1a;Java面向对象编程 6.面向对象编程&#xff08;基础&#xff09; 7.面向对象编程&…

【干货】FMEA的实施流程——SunFMEA

DFMEA和PFMEA的实施流程基本一致&#xff0c;都是先定义过程/功能、故障模式分析、故障原因分析、预防/探测措施的制定、风险风险&#xff0c;最后到制定补偿措施&#xff0c;具体如下图&#xff1a; FMEA实施流程——SunFMEA 一、定义过程/功能 FMEA工作的第一步&#xff0c;…

IDEA配置HTML和Thymeleaf热部署开发

IDEA配置HTML和Thymeleaf热部署开发 1.项目配置2. IDEA配置3. 使用 需求&#xff1a;现在我们在开发不分离项目的时候&#xff08;SpringBootThmeleaf&#xff09;经常会改动了类或者静态html文件就需要重启一下服务器&#xff0c; 这样不仅时间开销很大&#xff0c;而且经常重…

APP 专项测试之兼容性测试

1、APP 兼容性测试认识 随着 APP 应用范围越来越广&#xff0c;用户群体越来越大&#xff0c;终端设备的型号也越来越多&#xff0c;移动终端碎片化加剧&#xff0c;使得 APP 兼容性测试成为测试质量保障必须要考虑的环节。 APP 兼容性测试通常会考虑&#xff1a;操作系统、厂…

IOS屏幕旋转监听

IOS屏幕旋转 1.设计窗口,添加三个按钮 2.添加事件连接 3.按钮点击事件实现 先添加三个IBAction 实现IBAction 使用旋转立刻生效 -(IBAction)btnFixPortrait:(id)sender{//访问应用程序委托成员_app.mask UIInterfaceOrientationMaskPortrait;//设置窗口旋转属性[self setN…

【Lua语法】字符串

Lua语言中的字符串是不可变值。不能像在C语言中那样直接改变某个字符串中的某个字符&#xff0c;但是可以通过创建一个新字符串的方式来达到修改的目的 print(add2(1 , 2 ,15,3))a "no one"b string.gsub(a , "no" , "on1111")print(a) print…

VisualStudio[WPF/.NET]基于CommunityToolkit.Mvvm架构开发

一、创建 "WPF应用程序" 新项目 项目模板选择如下&#xff1a; 暂时随机填一个目标框架&#xff0c;待会改&#xff1a; 二、修改“目标框架” 双击“解决方案资源管理器”中<项目>CU-APP, 打开<项目工程文件>CU-APP.csproj, 修改目标框架TargetFramew…

关于 LLM 和知识图谱、图数据库,大家都关注哪些问题呢?

自 LLM 系列文章《知识图谱驱动的大语言模型 Llama Index》、《Text2Cypher&#xff1a;大语言模型驱动的图查询生成》、《Graph RAG: 知识图谱结合 LLM 的检索增强》陆续和大家见面&#xff0c;以及《夜谈 LLM》主题直播同大家交流一番 LLM 和知识图谱、图数据库之后&#xff…

Shiro框架详解

权限管理 权限管理&#xff0c;一般指根据系统设置的安全策略或者安全规则&#xff0c;用户可以访问而且只能访问自己被授权的资源。 权限管理包括用户身份认证和授权两部分&#xff0c;简称认证授权。对于需要访问控制的资源用户首先经过身份认证&#xff0c;认证通过后用户…

NFS性能瓶颈分析

前言 atop – run it with -d option or press d to toggle the disk stats view. iostat – try it with the -xm 2 options for extended statistics, in megabytes, and in two-second intervals. iotop – top-like I/O monitor. Try it with the -oPa options to show the…

vue 数据劫持代理原理

function lianxi(){// vue 数据劫持代理let data {username:curry,age:33}//模拟组件的实例let _this {}//利用Object.defineProperty()for( let item in data){//console.log(item,data[item])Object.defineProperty(_this,item,{//get:用来获取扩展属性值的,当获取该属性值…

个人创业新机遇,零成本开启真人手办定制项目

桌上的日历变薄&#xff0c;2023年已经接近尾声&#xff0c;浅观这一年&#xff0c;您是否发现大家日常关注的重点有明显的变化&#xff0c;诸多社会事件和宏观数字的背后&#xff0c;潜藏着对经济的“不托底”&#xff0c;而当我们真正开始关注起用个人经济积累去对冲未来的不…

CMake 坑之添加文件后不修改CMakeList.txt,则文件加不进来

问题&#xff1a; 我在一个文件夹中加了一个.h和对应的cpp。 这里.h中的类会被导出。 但是怎么都导不出来。 我试了无数次的 clean and rebuild 都没用。 分析&#xff1a; 做了很多实验。发现是新建的文件没有被读取进来。 解决方法&#xff1a; 改进了下对应的CMakeL…

C语言:实现对单链表的反转 函数封装

需求&#xff1a; 实现对单链表的反转 代码实现&#xff1a; #include <stdio.h>typedef struct node{int data;struct node* next; }NODE;void PrintLink(NODE* phead) {NODE* p phead;while(p ! NULL){printf("%d ",p->data);p p->next;}printf(&…