容器docker


文章目录

  • 前言
  • 一、docker
    • 1.1 为什么有docker
    • 1.2 docker架构
    • 1.3 docker 安装
    • 1.4 docker中央仓库
    • 1.5 docker 基本指令
    • 1.6 docker数据卷,挂载
      • 例:nginx 数据卷挂载
      • 例:mysql 本地持久化
    • 1.7 镜像制作
      • 镜像结构
      • dockerfile基础指令
      • 容器生成镜像
    • 1.8 docker 网络
    • 1.9 部署案例
      • 前端部署
      • 后端部署


前言

市电子信息产业链劳动和技能竞赛,以赛促学备战笔记,因对微服务容器框架不熟,浪费大多时间在找配置文件中.也荣幸获得三等奖

容器化
在这里插入图片描述
在这里插入图片描述


一、docker

考虑podman的生态不足,2024年7月重新整理docker
请参考2019年docker笔记 容器docker简介及基本命令

1.1 为什么有docker

在这里插入图片描述

1.2 docker架构

在这里插入图片描述

1.3 docker 安装

docker 官网:https://www.docker.com/ 点击doc文档
在这里插入图片描述

菜鸟教程:https://www.runoob.com/docker/centos-docker-install.html

# CentOS 7
# 移除旧版本docker
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 配置docker yum源。
sudo yum install -y yum-utils # yum-utils是一个提供额外功能的工具集,#用于管理YUM(Yellowdog Updater, Modified)软件包管理器。sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  
# 可在/etc/yum.repos.d/ 中查看增加的# 安装 最新 docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 启动& 开机启动docker; enable + start 二合一
systemctl enable docker --now# 配置加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker info 查看使用registy仓库。
Docker中,默认情况下镜像和容器的存储位置是/var/lib/docker。
将默认的存储路径修改为新的存储路径:
vim /etc/docker/daemon.json。在配置文件中添加以下内容:{“data-root”:”/mnt/docker”}
在这里插入图片描述

centos 8 兼容按centos7安装
在这里插入图片描述

在centos8中,dnf install docker
在这里插入图片描述

1.4 docker中央仓库

在这里插入图片描述

1.docker的官方中央仓库:这个镜像是最全的,但是下载速度最慢。
https://hub.docker.com/
2.国内的镜像网站:网易数帆, daocloud, … http://c.163.com/hub
http://hub.daocloud.io/ 不需要登录 (推荐使用)

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

1.5 docker 基本指令

在这里插入图片描述

我们来看一个案例,以提供感性认识并加深理解。

安装mysql容器案例,-e参数需到发布镜像网查看配置文档。

docker run -itd --name mysql-test -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai mysql
#-i interactive交互,-t tty终端,-d detach
docker run -d --name nginx -p 801:80 nginx:1.14.1

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

虽然我们能快速掌握案例,但不应忽视厚积薄发的理念

在这里插入图片描述

镜像基本命令

docker pull nginx #拉取镜像
docker images # 查看镜像
# 镜像打包
docker save --help
docker save -o nginx.tar nginx:latest
# 删镜像
docker rmi nginx
# 压缩包加载镜像
docker load -i /opt/nginx.tar

容器基本命令

#创建容器
docker run -d --name nginx_r -p 801:80 nginx
#查看容器
docker ps -a
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Names}}\t{{.Status}}"
#可在~./bashrc 中使用别名快捷
#容器交互 需要容器中/bin/bash
docker exec -it nginx /bin/bash
# 停容器nginx
docker stop nginx
# 重新启动容器nginx 
docker start nginx
#查看容器日志
docker logs nginx

1.6 docker数据卷,挂载

由于容器只包含应用程序和其依赖项,它们通常不包含一个完整的开发环境,例如文本编辑器vi或编译器。因此,如果你需要在容器中编辑文件,你需要使用数据卷(volume)来将主机系统上的文件或目录挂载到容器中。

在这里插入图片描述

在这里插入图片描述

例:nginx 数据卷挂载

#使用docker volume 创建,查看卷
docker volume --help
#!注意删掉容器,数据卷对应关系依然存在
# 创建run时 使用数据卷
docker run -d --name nginx -p 801:80 -v html:/usr/share/nginx/html nginx
docker run -d --name nginx -p 801:80 -v html:/usr/share/nginx/html -v config:/etc/nginx/  nginx#查看容器卷宿主机路径
docker volume inspect html
docker volume inspect html configcd /var/lib/docker/volumes/html/_data

在这里插入图片描述

宿主机目录和容器目录挂载,将宿主机目录改为数据卷名。

-v mysql:/var/lib/mysql # 识别为一个数据卷叫mysql
-v ./mysql:/var/lib/mysql #识别为当前目录下的mysql

在这里插入图片描述

例:mysql 本地持久化

官网文档:https://hub.docker.com/_/mysql查询镜像配置

$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tagdocker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/init:/docker-entrypoint-initdb.d \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql

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

命令:

#从容器里面拷文件到宿主机
#docker cp testtomcat:/usr/local/tomcat/webapps /opt
#从宿主机拷文件到容器里面
docker cp activity.sql 8300a06b704b:/opt/
#使用source命令数据恢复
mysql -uroot -p123456
>source /opt/activity.sql ;
>exit;exit;
>#删容器
docker rm mysql -f
# 重新挂载,数据仍然存在
docker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/init:/docker-entrypoint-initdb.d \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql
#重新挂载,数据仍然存在

1.7 镜像制作

在这里插入图片描述

镜像结构

在这里插入图片描述

dockerfile基础指令

在这里插入图片描述

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

 docker build -t imag:tag .

容器生成镜像

docker run -d -p 8081:8081  \
-v /home/xiaotang0711/Desktop/docker/hadoop.jar:/usr/hadoop.jar \
--name springboot java:8u111  \
java -jar /usr/hadoop.jar#或copy 从宿主机到容器
docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js
# 生成一个新的镜像
docker commit 4eb13e778da3 centos:7-ssh

1.8 docker 网络

在这里插入图片描述
因ip随机不稳定,通过自建网络,可以通过容器名连接.

在这里插入图片描述

#创建网络
network create lih
#查看网络
docker network ls
#查看容器网络
docker inspect 625ec79eee83 |grep IPAddress
#添加网络到容器
docker network  connect --help
docker network  connect lih 625ec79eee83
#再查看
docker inspect 625ec79eee83 |grep IPAddress#可以创建容器的时候添加网络

1.9 部署案例

# 生成基础镜像
docker load -i nginx.tar
#添加网络
docker network create lihnet

前端部署

需求:创建一个新的nginx容器,nginx.conf,html 目录与容器挂载。

#数据卷
#会自动本地生成目录文件
docker run -d --name nginx --network lihnet  -p 802:80 -v html:/usr/share/nginx/html -v config:/etc/nginx/  nginx
docker volume inspect  html config
#2或目录挂载
#!注意把赋值的nginx.conf到/home/nginx/html中注意把不存在的文件去掉
docker run -d --name nginx --network lihnet  -p 802:80 -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/config:/etc/nginx/  nginx#3或文件对文件推荐使用
docker run -d --name nginx --network lihnet  -p 802:80 -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/config/nginx.conf:/etc/nginx/nginx.conf  nginx#4或使用默认配置文件
docker run -d --name nginx --network lihnet  -p 802:80 -v /home/nginx/html:/usr/share/nginx/html nginxdocker exec -it nginx /bin/bash
#制作镜像
docker commit 78a96dd818af nignjingx
#重新生成
docker run -d -p 802:80 --name nginx2 --network lihnet nignjingx

dockerfile方式

vim dockerfile
......
# 基础镜像使用Nginx
FROM nginx
# 添加时区环境变量,亚洲,上海
ENV TimeZone=Asia/Shanghai
# 将前端dist文件中的内容复制到nginx目录
COPY dist  /usr/share/nginx/html/
# 用本地的nginx配置文件覆盖镜像的Nginx配置
COPY default.conf /etc/nginx/conf.d
# 暴露端口
EXPOSE 80
......

后端部署

应用程序
dockerfile方式

vim dockerfile
.....
FROM java:8
COPY *.jar /app.jar
EXPOSE 8080 #不使用expose指令,则镜像的用户无法从dockerfile直接了解到应用默认监听的端口
ENTRYPOINT ["java","-jar","app.jar"]
......
docker build -t api .
docker run -d --name javahtml -p 8080:8080 --network lihnet api

基础镜像java

#或基础镜像java生成容器docker run -d -p 8080:8080 -v /opt/depos.jar:/usr/depos.jar --name javajar java java -jar /usr/depos.jar 

mysql

docker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/init:/docker-entrypoint-initdb.d \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql#mysql 
# 创建用户和密码
create user tom@'%' identified by 'ttt'; 
#赋予权限
grant all on *.* to root@'%' identified by '123456';create database shop;
use shop;
source /var/lib/mysql/book.sql;

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

C++笔试强训3

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 如图所示&#xff0c;如图所示p-3指向的元素是6&#xff0c;printf里面的是%s&#xff0c;从6开…

带有子节点的树状表的父节点拖动排序#Vue3#Sortable插件

带有子节点的树状表的父节点拖动排序#Vue3#Sortable插件 使用Sortable插件这里要保证获取到的是父节点的下标&#xff0c;属性newDraggableIndex获取到的就是只有父节点的下标。设置子节点不能被拖动&#xff0c;最后在逐个调用接口进行数据库中顺序的更新。 <template>…

层次分析法上课笔记

欢迎来到一夜看尽长安花 博客&#xff0c;您的点赞和收藏是我持续发文的动力 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何想要讨论的问题可联系我&#xff1a;3329759426qq.com 。发布文章的风格因专栏而异&#xff0c;均自成体系&#xff0c;不足…

Profibus转ModbusTCP网关模块实现Profibus_DP向ModbusTCP转换

Profibus和ModbusTCP是工业控制自动化常用的二种通信协议。Profibus是一种串口通信协议&#xff0c;它提供了迅速靠谱的数据传输和各种拓扑结构&#xff0c;如总线和星型构造。Profibus可以和感应器、执行器、PLC等各类设备进行通信。 ModbusTCP是一种基于TCP/IP协议的通信协议…

使用八股搭建神经网络

神经网络搭建八股 使用tf.keras 六步法搭建模型 1.import 2.train, test 指定输入特征/标签 3.model tf.keras.model.Sequential 在Squential,搭建神经网络 4.model.compile 配置训练方法&#xff0c;选择哪种优化器、损失函数、评测指标 5.model.fit 执行训练过程&a…

python开发prometheus exporter--用于hadoop-yarn监控

首先写python的exporter需要知道Prometheus提供4种类型Metrics 分别是&#xff1a;Counter, Gauge, Summary和Histogram * Counter可以增长&#xff0c;并且在程序重启的时候会被重设为0&#xff0c;常被用于任务个数&#xff0c;总处理时间&#xff0c;错误个数等只增不减的指…

昇思25天学习打卡营第16天|Vision Transformer图像分类

昇思25天学习打卡营第16天|Vision Transformer图像分类 前言Vision Transformer图像分类Vision Transformer&#xff08;ViT&#xff09;简介模型结构模型特点 环境准备与数据读取模型解析Transformer基本原理Attention模块 Transformer EncoderViT模型的输入整体构建ViT 模型训…

xcode项目添加README.md文件并进行编辑

想要给xcode项目添加README.md文件其实还是比较简单的&#xff0c;但是对于不熟悉xcode这个工具的人来讲&#xff0c;还是有些陌生&#xff0c;下面简单给大家讲一下流程。 选择“文件”>“新建”>“文件”&#xff0c;在其他&#xff08;滚动到工作表底部&#xff09;下…

k8s record 20240708

一、PaaS 云平台 web界面 资源利用查看 Rancher 5台 CPU 4核 Mem 4g 100g的机器 映射的目录是指docker重启后&#xff0c;数据还在 Rancher可以创建集群也可以托管已有集群 先docker 部署 Rancher&#xff0c;然后通过 Rancher 部署 k8s 想使用 kubectl 还要yum install 安…

leetcode--验证二叉搜索树

leetcode地址&#xff1a;验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左 子树 只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必…

71.WEB渗透测试-信息收集- WAF、框架组件识别(11)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;70.WEB渗透测试-信息收集- WAF、框架组件识别&#xff08;10&#xff09;-CSDN博客 如果有…

人工智能和机器学习 (复旦大学计算机科学与技术实践工作站)20240703(上午场)人工智能初步、mind+人脸识别

前言 在这个科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;无一不彰显着AI的强大潜力。而人脸识别技术作为AI领域的一项重要应用&#xff0c;更是以其高效、便捷的特点受到了…

人工智能算法工程师(中级)课程2-Opencv视觉处理之高级操作

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程2-Opencv视觉处理之高级操作。在上一节课中的OpenCV基础操作我们了解到OpenCV是一个开源的计算机视觉软件库。它提供了各种视觉处理函数&#xff0c;并支持多种编程语言&#xff0c;如…

USB眼图eye diagram测试

前言: USB有一种测量称为EYE图或信号完整性测试。考虑数字信号从发射机传输到接收机的过程。到达接收器的信号质量可能受到许多因素的影响,包括发射器、电缆或PCB迹线以及连接器。信号质量也被称为信号完整性。眼图是一种用于快速评估数字信号质量的图形工具。眼图这个名字之…

Gymnasium 借游戏来学习人工智能

既然有了免费的linux系统GPU&#xff0c;干脆演示一下使用drivecolab套件来训练模型。 !apt-get install -y build-essential swig !pip install box2d-py !pip install gymnasium[all] !pip install gymnasium[atari] gymnasium[accept-rom-license] !pip install stable_bas…

Python函数 之 模块和包

1.模块 1, 在Python 中, 每个以 .py 结尾的 Python 代码⽂件 都可以称为是⼀个模块。 2, 在模块中 别⼈书写好的功能(变量, 函数, 类)&#xff0c;我们可以拿来直接使⽤。 3, 我们自己写的代码文件&#xff0c; 想要作为模块让别⼈使⽤, 你的代码⽂件名(模块名) 满足标识符的规…

Linux驱动开发-03字符设备驱动框架搭建

一、字符设备驱动开发步骤 驱动模块的加载和卸载&#xff08;将驱动编译模块&#xff0c;insmod加载驱动运行&#xff09;字符设备注册与注销&#xff08;我们的驱动实际上是去操作底层的硬件&#xff0c;所以需要向系统注册一个设备&#xff0c;告诉Linux系统&#xff0c;我有…

JVM是如何创建一个对象的?

哈喽&#xff0c;大家好&#x1f389;&#xff0c;我是世杰。 本文我为大家介绍面试官经常考察的**「Java对象创建流程」** 照例在开头留一些面试考察内容~~ 面试连环call Java对象创建的流程是什么样?JVM执行new关键字时都有哪些操作?JVM在频繁创建对象时&#xff0c;如何…

Studying-代码随想录训练营day33| 动态规划理论基础、509.斐波那契函数、70.爬楼梯、746.使用最小花费爬楼梯

第33天&#xff0c;动态规划开始&#xff0c;新的算法&#x1f4aa;(ง •_•)ง&#xff0c;编程语言&#xff1a;C 目录 动态规划理论基础 动态规划的解题步骤 动态规划包含的问题 动态规划如何debug 509.斐波那契函数 70.爬楼梯 746.使用最小花费爬楼梯 总结 动态…

LeetCode热题100刷题10:46. 全排列、78. 子集、17. 电话号码的字母组合、39. 组合总和、138. 随机链表的复制

回溯问题 46. 全排列 全排列问题&#xff1a; path 递归终止条件&#xff1a;path中是否已存储所有元素&#xff1b; for循环处理节点集合&#xff1a;used0未被使用的元素 class Solution { public:vector<int> path;vector<vector<int>> res;void backt…