Docker容器

news2024/11/16 3:50:59

1.什么是Docker?

1.为什么会出现docker?

我们写的代码会接触到好几个环境:开发环境、测试环境以及生产环境等等。多种环境去部署同一份代码,由于环境原因往往会出现软件跨环境迁移的问题(也就是“水土”不服)‘

也就是说如果在不同环境下跑相同代码,但JDK或TomCat等不一致,那么就可能出现报错等问题。

 针对这种情况 ,我们可以将工程及此工程依赖的所有软件打包到一个容器中统一部署

 

 2.docker概念

  • Docker 是一个开源的应用容器引擎

  • Docker 可以让开发者打包他们的应用以及依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。

  • 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc)

  • 容器是完全使用沙箱机制,相互隔离

就是相当于linux系统中起好多容器,每个容器都是相互隔离的

  • 容器性能开销极低。

  • Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)

docker是一种容器技术,解决软件跨环境迁移问题。

 2.安装docker

Docker可以运行在MAC、Windows、CentOS、UBUNTU等操作系统上,

官网:Docker: Accelerated, Containerized Application Development

# 1、yum 在线安装 
yum install docker -y 
#2、启动docker
systemctl start docker   启动
systemctl stop docker    停止
systemctl restart docker  重启
#3、查看docker状态
systemctl status docker

 虚拟机要联网下载

3.docker架构

 镜像:一个独立软件的各种组成文件

 容器:执行镜像会产生容器,一个镜像可以生成多个容器

 仓库:镜像的来源    docker提供的应用商店

 镜像加速: 从docker hub上下载docker镜像太慢,一般都会配置镜像加速

 1.配置镜像加速:

默认从   Docker Hub  下载  这里配置中科大镜像  https://docker.mirrors.ustc.edu.cn

 在linux中打开:/etc/docker/daemon.json文件,并导入镜像地址

直接 vi /etc/docker/daemon.json

{
 "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}

4.docker相关的命令

#重启
systemctl restart docker
#查看docker信息
docker info

#启动docker服务:
systemctl start docker 
#停止docker服务:
systemctl stop docker 
#重启docker服务:
systemctl restart docker
#查看docker服务状态:
systemctl status docker 
#设置开机启动docker服务:
systemctl enable docker

5.从docker仓库下载镜像到宿主机--镜像相关的命令

 

#1 查看镜像: 查看本地所有的镜像
docker images

#2 搜索镜像:从网络中查找需要的镜像
docker search 镜像名称

#3 拉取镜像:从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号
如果版本号不指定则是最新的版本。如果不知道镜像版本,可以去docker hub 搜索对应镜像查看。
地址:https://hub.docker.com/
docker pull 镜像名称:版本号  /  docker pull 镜像名称(默认的版本号是latest)
		docker pull mysql:5.7  /  docker pull mysql

#4 删除镜像: 删除本地镜像
docker rmi 镜像id # 删除指定本地镜像

以上内容是操作docker的流程

6.通过镜像启动生成容器环境--容器相关命令  *****

#查看容器
docker ps # 查看正在运行的容器
docker ps -a #查看所有容器,包括未运行的容器

#创建并启动容器  
docker run -id --name=自定义容器名称 -p 映射端口:镜像端口 镜像名称 
run:启动
-id/-di:  创建容器
--name:  为创建的容器起别名
-p: 端口映射

#停止容器
docker stop 容器名称
#删除容器(容器是停止状态才能删除)
docker rm 容器名称

#启动容器
docker start 容器名称

7. 数据卷(linux中的文件夹)****

1.什么是数据卷?

数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步,一个数据卷可以被多个容器同时挂载,一个容器也可以挂载多个数据卷。

 数据卷的作用:容器数据持久化、容器之间数据交换

 2.配置数据卷:  创建启动容器时,使用 –v 参数 设置数据卷

#先在root目录先创建一个文件夹 ,因为要做数据卷映射
cd ~
mkdir data
#启动容器,挂载数据卷
docker run -di --name=自定义容器名称 -p 33307:3306 -v /root/data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456  mysql:5.7 

 注意:

        1.目录必须是决定路径

        2.如果目录不存在,会自动创建

        3.可以挂载多个数据卷

 

 

查看mysql的日志会发现有权限不足的问题:docker logs my_mysql

--privileged :容器内的root拥有真正的root权限.否则,容器内的root只是外部的一个普通用户权限

docker run -id --name=mymysql888 --privileged=true -p 33308:3306  -v /root/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456  mysql:5.7   

 8.Docker服务编排

服务编排:批量管理所有容器进行统一启动/统一停止且统一删除

8.1 服务编排

微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大。

  • 要从Dockerfile build image 或者去dockerhub拉取image

  • 要创建多个container

  • 要管理这些container(启动停止删除)

服务编排:按照一定的业务规则批量管理容器

8.2 Docker Compose(服务编排) 概述

Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。使用步骤:

  1. 利用 Dockerfile 定义运行环境镜像

  2. 使用 docker-compose.yml 定义组成应用的各服务

  3. 运行 docker-compose up 启动应用

 

 8.3安装

# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。(以安装) 
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 查看版本信息 
docker-compose -version
# 设置文件可执行权限 
chmod +x /usr/local/bin/docker-compose

卸载Docker Compose

# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose

 案例:

通过docker compose进行容器批量管理:一次性启动三个容器(nginx,tomcat,redis)

步骤:

(1) 定义一个Docker Compose配置文件

  • docker-compose.yml

  • 定义需要的容器

  • 每个容器的配置

(2) 进入docker-compose.yml所在的目执行docker-compose up -d 命令批量执行

操作:

创建docker-compose目录

mkdir ~/docker-compose
cd ~/docker-compose 

 定义docker-compose.yml 文件  vi docker-compose.yml 内容如下

version: '3'
services: 
  nginx:
   container_name: my_nginx
   image: nginx
   ports:
    - 80:80
    
  tomcat:
   container_name: my_tomcat
   image: tomcat:8.5
   ports:
    - 8080:8080    
  
  redis:
   container_name: my_redis
   image: redis
   ports:
    - 6379:6379   

  启动容器   

执行此命令的时候,需要和配置文件再同一个目录下

docker-compose up -d

关闭容器并且删除

docker-compose down 

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

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

相关文章

Android车载应用开发——DLNA开发浅析

DNLA的建立 DLNA 成立于2003 年6 月24 日, 其前身是DHWG (Digital Home Working Group 数字家庭工作组),由Sony、Intel、Microsoft等发起成立、旨在解决个人PC ,消费电器,移动设备在内的无线网络和有线网络的互联互通…

基于x86架构的CentOS7虚拟机通过qemu安装ARM架构OpenEuler虚拟机

【原文链接】基于x86架构的CentOS7虚拟机通过qemu安装ARM架构OpenEuler虚拟机 (1)首先需要有一台CentOS虚拟机,如没有可参考 VMWare安装CentOS7操作系统的虚拟机 安装一台CentOS虚拟机 (2)安装基础命令 yum install…

17:00面试,17:09就出来了 ,问的实在是太...

从外包出来,没想到算法死在另一家厂子 自从加入这家公司,每天都在加班,钱倒是给的不少,所以也就忍了。没想到8月一纸通知,所有人不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有个兄弟内…

java基于PHP+MySQL教务选课管理系统的设计与实现

基于PHP的教务管理系统主要高校内部提供服务,系统分为管理员,教师用户和学生用户三部分。 在基于PHP的教务管理系统中分为管理员用户,教师用户和学生用户三部分,其中管理员用户主要是用来管理教师信息,学生信息,公告信息,课程信息,专业信息和班级信息等内容,教师用户主要是用来…

Cartesi 2022 年 11 月回顾

查看你不想错过的更新2022年12月1日 ,欢迎新的建设者加入Cartesi 生态系统并认识更多的新的开发者社区。 从紧张繁忙的11月到12月,11月 ETH Global 因为在旧金山举办了迄今为止最盛大的黑客马拉松活动而轰动一时。有13位才华横溢的学者加入了我们的 Hack…

原生JS的拖拽属性draggable(详解)

摘要 作为h5新增的属性draggable,它能够给与一切的html元素拖动的效果。而在这个属性之下,也有着关于拖动效果的各个方法。 而这一篇文章,主要就是说一下关于draggable属性的使用以及工作场景。 1.了解draggable属性的使用 对我来讲&#…

【单片机基础】初始51单片机

文章目录学习单片机需要掌握的基础知识1、用一句话说透什么是单片机:2、单片机上集成了什么?3、STC89C51/52单片机过时了吗?4、STC89C51和STC89C52有什么区别?5、单片机时序的概念(基础知识很重要)6、单片机…

基于功能安全的车载计算平台开发:系统层面

相对于功能安全概念阶段,系统阶段更专注于产品的详细设计,涉及系统工程、安全工程和架构设计等不同技术领域。同时,系统阶段也经常扮演着供应链上、下游功能安全的DIA交互阶段,是功能安全中非常重要且考验技术水平的阶段。 01 应…

微服务框架 SpringCloud微服务架构 8 Gateway 网关 8.6 过滤器链执行顺序

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构8 Gateway 网关8.6 过滤器链执行顺序8.6.1 过滤器执行顺序8.6.2 总结8 Gat…

【毕业设计】大数据房价数据分析可视化 - python

文章目录0 前言1 课题背景2 数据爬取2.1 爬虫简介2.2 房价爬取3 数据可视化分析3.1 ECharts3.2 相关可视化图表4 最后0 前言 🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两…

深度讲解风险策略的调优|附实操案例

量化风控审核过程中的通过率在贷前策略中是一大重要的内容,另外一个是逾期率。二者之间的因果关系就是通过率高低变化决定了逾期率风险的走势,通过率决定了逾期率的结果,而逾期率又对通过率起到了一个制衡的作用。 我们在本周早前详细谈过这个…

先验 后验 似然估计

一、完备事件组 设E是随机试验,Ω是相应的样本空间,A1,A2,...An为Ω的一个事件组,若 (1)AiAj(ij) (2)A1A2...AnΩ 则称A1A2...An为样本空间的…

web安全之MySQL手工注入的原理讲解和实验分析

目录 前提知识 靶场搭建 手工注入 高权限注入 sql注入之文件读写 基础防御 前提知识 数据库及sql语句知识,web相关知识。union合并查询的两个特征:前后查询互不干扰,前后查询的字段可以不同但是数量必须一致。order by 通过测试来猜解表…

解决SpringBoot整合Mybatis和Mybatis-Plus不能公用(版本兼容性问题)

1 前言 虽然Mybatis-Plus很好使,可以帮助我们生成CRUD的接口,但是有的情况下我们需要联合其他表进行多表查询,这时候Mybatis可以手写SQL的优势就体现出来了,一般在开发中,很多项目都是Mybatis和Mybatis-Plus公用的&am…

Markdowm使用手册

Markdown使用手册 目录Markdown使用手册一、基础语法1.1 书写各级标题1.2 字体加粗/斜体1.2.1 字体加粗1.2.2 字体倾斜1.3 线条使用1.3.1 删除线1.3.2 高亮线1.3.3 下划线二、插入工具2.1 插入代码2.1.1 插入某一行的代码2.1.2 插入整块的代码2.2 插入链接2.3 插入数学公式2.4 …

1546_AURIX_TC275_CPU子系统_指令耗时以及程序存储接口

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这里接触到了几种测试的方式。其中一个是反复执行同一个命令,看看执行之间的间隔。执行的时候,命令是有一定顺序的。这样,有时候流水线等特性会导致效率…

【Java并发入门】03 互斥锁(上):解决原子性问题

原子性问题的源头是线程切换 Q:如果禁用 CPU 线程切换是不是就解决这个问题了? A:单核 CPU 可行,但到了多核 CPU 的时候,有可能是不同的核在处理同一个变量,即便不切换线程,也有问题。 所以&a…

C++代码基本内存操作及原理

文章目录前言操作系统内存地址空间基本数据类型sizeof运算符指针运算内存分配与回收堆与栈malloc/new与free/delete基本类型的指针操作类定义中的内存使用前言 ​ C凭借其指针变量可以直接操作内存而得到了非常高的效率和程序性能,在一种编程语言里独树一帜。当然&…

网络变压器工厂:了解POE POE+ 网络变压器(网络隔离滤波器)

Hqst盈盛(华强盛)电子导读:这一节给大家分享:POE POE POE 网络变压器(网络滤波器,网络隔离变压器)的相关知识--poe poe 与POE简介及相关标准; 一、网络变压器 POE、 POE 与POE简介 POE 是Power …

Day17-购物车页面-收货地址-把address信息存储到vuex中

1.将address信息存储到vuex中: 我的操作: 1》在 store 目录中,创建用户相关的 vuex 模块,命名为 user.js: ①:新建user.js文件 ②:为user.js编写内容 2》在 store/store.js 模块中&#xff0c…