6.3 Docker

news2024/11/25 22:35:16

目录

6.3.1 Docker概述 

6.3.1.1 什么是Docker

6.3.1.2 Docker组成 

6.3.2 Docker的安装

6.3.2.1 下载Docker依赖的环境

6.3.2.2 指定Docker镜像源

6.3.2.3 安装Docker

6.3.2.4 启动Docker并测试

6.3.3 Docker的中央仓库

6.3.4 Docker操作

6.3.4.1 镜像操作

6.3.4.2 容器操作 

 6.3.4.3 Docker的应用

6.3.4.3.1 Docker安装Tomcat

6.3.4.3.2 Docker安装MySQL

6.3.5 Docker-Compose

6.3.5.1 下载并安装Docker-Compose

 6.3.5.2 Docker-Compose管理MySQL和Tomcat容器


6.3.1 Docker概述 

6.3.1.1 什么是Docker

Docker是一个开源的应用容器引擎,Docker会将应用和依赖打包为镜像.

Docker可以将应用程序打包到容器中,容器包含了应用程序的代码、运行环境、依赖库、配置文件等资源,通过容器就可以实现方便快速并且与平台解耦的自动化部署方式,无论你部署时的环境如何,容器中的应用程序都会运行在同一种环境下

Docker与面向对象

Docker

面向对象

容器

对象

镜像

镜像类似类,跑起来的镜像才是一个容器

6.3.1.2 Docker组成 

  • 集装箱:会将所有需要的内容放到不同的集装箱中,谁需要这些环境就直接拿到这个集装箱就可以了。
  • 标准化:
    • 运输的标准化:Docker有一个码头,所有上传的集装箱都放在了这个码头上,当谁需要某一个环境,就直接指派大海去搬运这个集装箱就可以了。
    • 命令的标准化:Docker提供了一些列的命令,帮助我们去获取集装箱等等操作。
    • 提供了REST的API:衍生出了很多的图形化界面,Rancher。
  • 隔离性:Docker在运行集装箱内的内容时,会在Linux的内核中,单独的开辟一片空间,这片空间不会影响到其他程序。
  • 中央仓库|注册中心:超级码头,上面放的就是集装箱
  • 镜像:就是集装箱 类
  • 容器:运行起来的镜像 对象

6.3.2 Docker的安装

6.3.2.1 下载Docker依赖的环境

由于Docker底层是

先将依赖的环境全部下载

[root@localhost local]# yum -y install yum-utils device-mapper-persistent-data lvm2
如果安装过,执行删除
[root@localhost ~]# yum -y remove docker-ce

6.3.2.2 指定Docker镜像源

下载地设置为阿里云镜像源,速度更快

[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

6.3.2.3 安装Docker

yum的方式安装

[root@localhost ~]# yum makecache fast
[root@localhost ~]# yum -y install docker-ce

6.3.2.4 启动Docker并测试

# 关闭防火墙
[root@192 ~]# systemctl stop friewalld
# 启动Docker服务
[root@localhost ~]# systemctl start docker
# 测试 hello-world  执行后需要等待一会
[root@localhost ~]# docker run hello-world

6.3.3 Docker的中央仓库

Docker官方的中央仓库:这个仓库是镜像最全的,但是下载速度较慢。

【Docker】

国内的镜像网站:网易蜂巢,daoCloud等,下载速度快,但是镜像相对不全。

【登录】

【Hub · DaoCloud 】(推荐使用)

在公司内部会采用私服的方式拉取镜像,需要添加配置,如下……

【阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台】

6.3.4 Docker操作

6.3.4.1 镜像操作

从中央仓库拉取镜像到本地


docker pull 镜像名称[:tag]

[root@localhost ~]# docker pull daocloud.io/library/tomcat:8.5.15-jre8

查看本地已经安装过的镜像信息,包含标识,名称,版本,更新时间,大小  

[root@localhost ~]# docker images

 镜像会占用磁盘空间,可以直接手动删除,表示通过查看获取

docker rmi 镜像的标识(需要先删除该镜像创建的容器)

[root@localhost ~]# docker rmi b8

如果因为网络原因可以通过硬盘的方式传输镜像,虽然不规范,但是有效,但是这种方式导出的镜像名称和版本都是null,需要手动修改

# 将本地的镜像导出
docker save -o 导出的路径 镜像id

# 导出到当前路径,镜像命名为:mytomcat
[root@localhost ~]# docker save -o ./mytomcat b8dfe9ade316

# 加载本地的镜像文件
docker load -i 镜像文件

[root@localhost ~]# docker load -i mytomcat

# 修改镜像名称
docker tag 镜像id 新镜像名称:版本

[root@localhost ~]# docker tag b8dfe9ade316 tomcat:8.5

6.3.4.2 容器操作 

运行容器需要制定具体镜像,如果镜像不存在,会直接下载

# 简单操作
docker run 镜像的标识|镜像名称[:tag]

# 常用的参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的标识|镜像名称[:tag]
# -d:代表后台运行容器
# -p 宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
# --name 容器名称:指定容器的名称(自定义)

[root@localhost ~]# docker run -d -p 8888:8080 --name mytomcat8.5 b8dfe9ade316

# 测试:浏览器访问 虚拟机ip:8888

查看全部正在运行的容器信息

docker ps [-qa]
# -a:查看全部的容器,包括没有运行
# -q:只查看容器的标识

[root@localhost ~]# docker ps

查看容器日志,以查看容器运行的信息

docker logs -f 容器id
# -f:可以滚动查看日志的最后几行

[root@localhost ~]# docker logs -f 4411f56f1fbb

 可以进入容器内部进行操作

docker exec -it 容器id bash

[root@localhost ~]# docker exec -it 4411f56f1fbb bash

# 退出当前容器 exit
root@4411f56f1fbb:/usr/local/tomcat# exit

将宿主机的文件复制到容器内部的指定目录

docker cp 文件名称 容器id:容器内部路径

# 把主机root目录下的a.txt文件拷贝到容器的temp目录下(由于tomcat默认路径在/usr/local/tomcat)
[root@localhost ~]# docker cp /root/a.txt 441:/usr/local/tomcat/webapps

# 把容器的temp目录下的a.txt拷贝到主机root目录下
[root@localhost ~]# docker cp 441:/usr/local/tomcat/temp/a.txt /root

容器的启动,停止,删除等操作

# 重新启动容器
[root@localhost ~]# docker restart 容器id

# 启动停止运行的容器
[root@localhost ~]# docker start 容器id

# 停止指定的容器(删除容器前,需要先停止容器)
[root@localhost ~]# docker stop 容器id

# 停止全部容器
[root@localhost ~]# docker stop $(docker ps -qa)

# 删除指定容器
[root@localhost ~]# docker rm 容器id

# 删除全部容器
[root@localhost ~]# docker rm $(docker ps -qa)

 6.3.4.3 Docker的应用

6.3.4.3.1 Docker安装Tomcat

# 运行Tomcat容器
[root@localhost ~]# docker run -d -p 8080:8080 --name mytomcat b8dfe9ade316

6.3.4.3.2 Docker安装MySQL

# 拉取MySql镜像
[root@localhost ~]# docker pull daocloud.io/library/mysql:5.7.4

# 运行MySql容器
[root@localhost ~]# docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:5.7.4

6.3.5 Docker-Compose

Docker-Compose可以帮助我们批量的管理容器。这些信息只需要通过一个docker-compose.yml文件去维护即可。

6.3.5.1 下载并安装Docker-Compose

下载路径:https://github.com/docker/compose/releases/tag/1.24.1

将docker-compose-Linux-x86_64文件拷贝到/usr/local 目录下

但是docker-compose-Linux-x86_64无法运行,所以要设置文件的权限

 给文件赋所有的权限

[root@192 local]# chmod 777 docker-compose-Linux-x86_64 

 方便后期操作,配置一个环境变量

[root@192 local]# vim /etc/profile
添加内容到最后一行:export PATH=/usr/local:$PATH

执行命令使文件生效
[root@192 local]# source /etc/profile

[root@192 local]# docker-compose-Linux-x86_64

 至此,Docker安装成功

 6.3.5.2 Docker-Compose管理MySQL和Tomcat容器

 之前都是单独手动安装MySQL和Tomcat,十分麻烦,现在可以使用Docker-Compose

docker-compose.yml

version: '3.1'
services: # services中有很多应用,如mysql和tomcat
  mysql:           # 服务的名称
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: docker.io/library/mysql:5.7.40  # 指定镜像路径,去这里下载,之后安装
    container_name: mysql  # 指定容器名称
    ports:
      - 3306:3306   #  指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root   # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai        # 指定时区
    volumes:
     - /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql   # 映射数据卷,类似于快捷方式
  tomcat:
    restart: always
    image: docker.io/library/tomcat:8.5.83-jdk8-corretto-al2
    container_name: tomcat
    ports:
      - 8080:8080
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /opt/docker_mysql_tomcat/tomcat_webapps:/usr/local/tomcat/webapps
      - /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs

在使用docker-compose的命令时 ,默认会在当前目录下找docker-compose.yml文件,由于docker-compose.yml文件的volumes指定的地址是 /opt/docker_mysql_tomcat,所以我们首先需要在opt目录下创建docker_mysql_tomcat目录,然后进入该目录创建docker-compose.yml文件,并粘贴以上写好的内容

[root@iz8vbdmrir2n6xqzrbd93hz ~]# cd /opt
[root@iz8vbdmrir2n6xqzrbd93hz opt]# ls
containerd  carl
# 创建一个文件夹
[root@iz8vbdmrir2n6xqzrbd93hz opt]# mkdir docker_mysql_tomcat
[root@iz8vbdmrir2n6xqzrbd93hz opt]# ls
containerd  docker_mysql_tomcat  carl
[root@iz8vbdmrir2n6xqzrbd93hz opt]# cd docker_mysql_tomcat/
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# vim docker-compose.yml
# 将上面的内容粘贴进来


# 如果想要停止并删除之前的容器
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker stop 对应的CONTAINER ID 
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker rm 对应的CONTAINER ID 

# 如果想要停止并删除之前的所有容器
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker stop $(docker ps -qa)
0274ca45914b
f70074ae1455
2db5a3fe0a92
425b6e8e1806
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker rm $(docker ps -qa)
0274ca45914b
f70074ae1455
2db5a3fe0a92
425b6e8e1806
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES


# 使用docker-compose命令
# docker-compose.yml启动管理的容器 由于需要docker-compose.yml,所以路径必选在docker-compose.yml所在的路径执行该命令
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker-compose-Linux-x86_64 up -d


# 查看由docker-compose管理的容器
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker-compose-Linux-x86_64 ps
 Name               Command               State           Ports         
------------------------------------------------------------------------
mysql    /entrypoint.sh mysqld --da ...   Up      0.0.0.0:3306->3306/tcp
tomcat   catalina.sh run                  Up      0.0.0.0:8080->8080/tcp

# 查看日志
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker-compose-Linux-x86_64 logs -f

# 关闭并删除容器
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker-compose-Linux-x86_64 down
Stopping tomcat ... done
Stopping mysql  ... done
Removing tomcat ... done
Removing mysql  ... done
Removing network docker_mysql_tomcat_default

# 开启|关闭|重启已经存在的由docker-compose维护的容器
docker-compose-Linux-x86_64 start|stop|restart

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

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

相关文章

从url获取参数并转为对象

const getParameters URL > JSON.parse({"${decodeURI(URL.split("?")[1]).replace(/"/g, \\").replace(/&/g, ",").replace(//g, ":")}"})getParameters("https://www.google.com.hk/search?qjsmd&neww…

【深度学习】李宏毅2021/2022春深度学习课程笔记 - Self-supervised Learning(自监督式学习)

文章目录一、芝麻街与进击的巨人二、Self-supervised Learning三、BERT3.1 Masking Input3.2 Next Sentence Prediction3.3 GLUE 任务集3.4 How to use BERT3.4.1 Case13.4.2 Case23.4.3 Case33.4.4 Case43.5 Training BERT is challenging!3.6 Pre-Training a Seq2Seq Model3.…

ERP是什么意思?

“ERP到底是一个怎么样的存在?为何有那么多的方面?如何学习?” 本文从ERP起源讲起,结合制造业离散制造与流程制造的ERP系统区别,详解ERP概念。 文章有点长,但如果你耐心看完,相信你会对ERP有一…

elasticsearch 基本语法(常见的RESTFUL API)

一 . ES的基本语法 文章目录一 . ES的基本语法1.Query String 语法2.Query DSL 语法3. Full-text queries 全文检索4. Phrase search 短语搜索5.Query and filter 查询和过滤6. Compound queries 查询7.HighLight search(高亮显示)测试数据内容:PUT /product/_doc/1…

科研试剂 Dextran-DBCO;葡聚糖-二苯并环辛烯;生物可降解高分子聚合物

DBCO修饰的葡聚糖聚 Dextran-DBCO 葡聚糖-二苯并环辛烯 名称:DBCO修饰葡聚糖 英文名称:Dextran-DBCO 外观状态:白色粉末 溶剂:DMSO等常规有机溶剂。 性状:基于不同的分子量,呈白色/类白色固体粉末&…

python爬虫(一)

一、理论 (1)URL管理器:网页之间的链接很复杂,a指向b,b指向a,如果不对其进行管理则可能导致重复爬取、循环爬取,因此单独用该模块进行管理。URL管理器有两个功能,分别是URL队列管理&…

神策营销云平台化应用实践

营销云是一个业务系统,需要贴合客户的实际业务场景,以平台化 分层设计撬动场景发挥价值主张。本文将详细介绍神策营销云在数字化转型浪潮中的沉淀。点击文末“阅读原文”立即观看完整版演讲回放。一、神策营销云产品理念“营销云是一个业务系统”&#…

规范有效的需求变更管理,分7步走。

1、建立需求基线 需要提前建立需求基线,需求基线是需求变更的依据,并需制定双方皆认可的需求变更流程。 需对用户需求进行明确分析,颗粒度越小越好。基准文件定位范围越详细,双方对需求越清晰,用户交流顺畅&#xff0c…

Go语言context包源码剖析

context包的作用 context包是在go1.7版本中引入到标准库中的 context可以用来在goroutine之间传递上下文信息,相同的context可以传递给运行在不同goroutine中的函数,上下文对于多个goroutine同时使用是安全的,context包定义了上下文类型&am…

两数之和【每日一题】

⭐前言⭐ ※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入刷题模式。若有错误,请多多指教。更多有趣的代码请移步Gitee 👍 点赞 ⭐ 收藏 📝留言 都是我创作的最大的动力! 合抱之木…

MySQL数据库自动补全工具

MySQL数据库操作起来命令较多,默认无法使用tab键进行补全,所以可以安装一些实用的工具进行日常的操作 方式一:临时使用自动补全功能 mysql -u root -p --auto-rehash 方式二:永久使用自动补全功能 vi /etc/my.cnf [mysql] a…

Qt扫盲-QSqlDatabase理论总结

QSqlDatabase理论总结一、概述二、使用1. 连接数据库2. 数据库驱动3. 自定义数据驱动使用4. 注意事项三、常用的功能一、概述 QSqlDatabase类提供了通过连接访问数据库的接口。QSqlDatabase的一个实例表示一个数据库连接对象。该连接是通过Qt支持的数据库驱动程序来对数据库的…

再学C语言26:分支和跳转——goto语句

goto语句包括两个部分:goto和一个标签名称 goto point1; 为使goto语句工作,程序中必须包含由point1标签定位的其他语句 point1: printf("hello world! \n"); // 标签 冒号 一条语句 示例代码: /* test of goto */ #include &…

高一数学试题-2022年秋期末试卷

一、选择题 已知集合A{x∈N∣−2<x<52}A \{x \in \mathbf{N}| -2 < x < \frac{5}{2}\}A{x∈N∣−2<x<25​}&#xff0c;B{−2,−1,0,1,2,4}B \{-2, -1, 0, 1, 2, 4\}B{−2,−1,0,1,2,4}&#xff0c;则A∩BA \cap BA∩B A. {−1,0,1,2}\{-1, 0, 1, 2\}{−…

什么是AI预训练模型?

什么是预训练模型? 预训练 AI 模型是一种深度学习模型&#xff0c;在大型数据集上进行训练以完成特定任务&#xff0c;它可以按原样使用或定制以满足多个行业的应用需求。 想象一下&#xff0c;试图教一个蹒跚学步的孩子什么是独角兽。 一个好的起点可能是展示该生物的子图像…

[NOIP2017 提高组] 奶酪(C++,并查集)

题目背景 NOIP2017 提高组 D2T1 题目描述 现有一块大奶酪&#xff0c;它的高度为 hhh&#xff0c;它的长度和宽度我们可以认为是无限大的&#xff0c;奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系&#xff0c;在坐标系中&#xff0c;奶酪的下表面…

用纯C实现单链表

前言 什么是单链表&#xff1f;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。链表的创建 需要创建一个小项目工程 创建三个文件 ⭐SListNode.h放单链表的头文件&#xff0c;函数声明 ⭐SListNode.c放单…

springcloud之Gateway服务网关

1.Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式…

游戏行业(北区)客户沙龙丨阿里云用户组北京站

2022 年 8 月 30 日&#xff0c;阿里云在北京举办了第 9 场阿里云用户组&#xff08;AUG&#xff09;活动&#xff0c;活动主题为“游戏行业&#xff08;北区&#xff09;客户沙龙”吸引了众多技术从业者及企业管理者来到现场交流分享。 通过本次活动&#xff0c;参会企业在不同…

Java探针技术详解

简介 在JVM中运行中&#xff0c;类是通过classLoader加载.class文件进行生成的。在类加载器加载.class文件生成对应的类对象之前时&#xff0c;我们可以通过修改.class文件内容&#xff08;就是字节码修改技术&#xff09;&#xff0c;达到修改类的目的。JDK提供了对字节码进行…