Docker全家桶:从0到加载本地项目

安装docker,我们选择的是CentenOS 7。

目录

Docker安装

命令

命令别名

数据卷挂载

Dockerfile

容器网络互联


Docker安装

1. 先删除本机旧的或者残留的docker

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

2.安装依赖

sudo yum update -y && sudo yum install -y yum-utils \device-mapper-persistent-data \lvm2

3.配置镜像源

到这一步需要注意了,以前使用的很多都是这个https://download.docker.com/linux/centos/docker-ce.repo,现在需要换成国内的,执行如下命令:

# 阿里源
yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# or
# 清华源
yum-config-manager \--add-repo \https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

4.安装

yum install docker-ce docker-ce-cli containerd.io

5.验证docker

docker --version

6.启动并且设置开机自启动

systemctl start docker
systemctl enable --now docker

并且最好配置好镜像加速器,防止网络原因导致的加载缓慢。

{"registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc"]
}

当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)。

类似于windows上的免安装软件,只需要有相关的文件就能够运行。并且修改了端口,可以直接再次运行一遍启动命令,同时开两个mysql。

docker配置完成了后,很方便的就能够把mysql安装好并且打开。

docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql
//安装mysql

安装好mysql后,通过Navicat能够连接到这个位于我们云服务器上的数据库了。

命令

docker run命令中常见的参数:

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

  • docker run:创建并运行一个容器,-d是让容器在后台运行
  • --name mysql:给容器起名,名字唯一
  • -p 3306:3306 :设置端口映射
  • -e KEY=VALUE :设置环境变量
  • mysql:代表着镜像名称结构

常用命令:

  • docker官方维护了docker hub,镜像仓库。我们只需要通过 docker pull 命令就可以拉取到上面的所有仓库
  • 并且可以通过 docker push 命令上传本地的镜像
  • 除了镜像仓库,还可以用本地的文件,通过docker build来完成构建镜像
  • 本地镜像通过docker save 能够提取文件,方便转移
  • 别的文件通过 docker load 能够加载到本地镜像
  • docker images 列出本地的镜像
  • docker rmi 删除本地镜像
  • docker run 创建并且运行一个容器
  • docker stop 停止一个正在运行的容器
  • docker start 开始运行一个容器(但是不重新创建)
  • docker logs 获取容器的日志输出
  • docker exec 可以执行一些命令,来进入到容器的内部
  • docker ps 列出当前正在运行的容器
  • docker rm 删除一个或者多个容器

命令别名

很多时候,docker中原始的操作会比较复杂,我们可以通过设置这些命令的一些别名的方式来简化,以后用这些简化的别名就能够运行这些命令。

通过  vi ~/.bashhrc可以打开这个文件

数据卷挂载

数据卷是一个虚拟目录,是容器内目录与宿主机之间映射的桥梁。

以nginx为例,在容器内,如果要修改添加文件到conf目录和html目录下,是很麻烦的。我们通过数据卷挂载,把容器里面的目录映射到linux中真实的目录中,这样修改、添加文件就很方便快捷了。

此时,操作宿主机相关的目录就等于操作容器中的目录。

关于数据卷的命令:

在执行docker run命令时,使用    -v 数据卷:容器内目录    可以完成数据卷挂载

当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷

也就是说,只有在创建容器的时候才能够挂载数据卷。

此时,容器就创建好了,数据卷也完成挂载。

本地目录挂载

使用  -v 数据卷:容器内目录  可以完成数据卷挂载。

通过  -v 本地目录:容器内目录 可以完成本地目录挂载。

本地目录必须以  ./   或者  /   开头,如果直接以 名称开头,会被识别为数据卷而非本地目录。

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

为什么要用本地目录挂载而不是数据卷呢?大体上还是数据卷隐藏的比较深,不方便管理。并且本地目录挂载和docker没有关系,不会因为docker受到影响,性能很高。

假设我们有一个mysql容器,把数据都挂在到本地目录后,只需要把这些文件拷贝就能够万和城呢个数据库的迁移和复制,很方便。

Dockerfile

对于上述镜像,都是官网提供给我们,我们在docker hub里面自己拉取到。但是实际应用场景中,我们可能需要自己部署自己的java应用到镜像中。

部署一个Java应用的步骤:

  1. 准备一个Linux服务器
  2. Ja
  3. 安装JRE并配置环境变量
  4. 拷贝
  5. r包
  6. 运行Jar包

但是呢,Linux服务器还需要配置,JRE环境变量也需要重新配置。这样做还不如重新构建一个Java镜像:

  1. 准备一个Linux运行环境
  2. 安装JRE并配置环境变量
  3. 拷贝Jar包
  4. 编写运行脚本

并且docker镜像结构是一层一层(Layer)的,每次添加安装包、依赖、配置等等都会形成新的一层。如果在拉取docker hub上的镜像的时候,发现有一层或者几层,本地主机上已经有了,就不会下载已经有的重复的层了,而是会下载没有的层级。

FROM

说明:指定基础镜像。
示例:FROM centos:6
ENV

说明:设置环境变量,可在后续指令中使用。
示例:ENV key value
COPY

说明:将本地文件拷贝到镜像的指定目录。
示例:COPY ./jre11.tar.gz /tmp
RUN

说明:执行 Linux 的 shell 命令,通常是安装过程中的命令。
示例:RUN tar -zxvf /tmp/jre11.tar.gz && export PATH=/tmp/jre11:$PATH
EXPOSE

说明:指定容器运行时监听的端口,是给镜像使用者看的。
示例:EXPOSE 8080
ENTRYPOINT

说明:镜像中应用的启动命令,容器运行时调用。
示例:ENTRYPOINT java -jar xx.jar

这就是指定的一个ubuntu镜像的Dockerfile文件,Dockerfile 是一个文本文件,它包含了一系列的指令,这些指令用于指定如何构建一个 Docker 镜像。

# 指定基础镜像
FROM ubuntu:16.04# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar# 安装JDK
RUN cd $JAVA_DIR && tar -xf ./jdk8.tar.gz && mv ./jdk1.8.0_144/ java8# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/tmp/app.jar"]

但是我们需要的是一个java应用,很多java应用在jdk层面都是一样的,所以我们只需要在前几步用现成的就能够完成。

# 基础镜像
FROM openjdk:11.0-jre-buster# 拷贝jar包
COPY docker-demo.jar /app.jar# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

这个镜像帮我们把除了拷贝jar包之外的步骤都完成了。

当我们编写好了Dockerfile,用下面这个命令来构建镜像:

docker build -t myImage .
  • -t    这个选项用于给构建的镜像指定一个名称和标签(tag)。格式遵循 repository:tag 的格式。如果不指定标签,Docker 默认使用 latest 作为标签。

  •  .  这个点表示 Docker 应该在当前目录查找 Dockerfile 文件。如果 Dockerfile 位于当前执行命令的目录,就使用 . 作为参数。

加载自己项目的流程:

  1. 先把项目(docker-demo)、dockerfile和jdk.tar包导入linux中;
  2. 通过 docker load(本地镜像加载) 命令,加载jdk.tar包;
  3. 通过 docker build -t docker-demo(此处为自己取的名字) .
  4. 通过 docker run -d --name dd -p 端口号:端口号 docker-demo 命令,读取dockerfile文件,构建并且运行docker-demo

容器网络互联

默认情况下,宿主机内所有的容器都是通过bridge的方式连接在docker的一个虚拟网桥上的:

但是这种通过ip地址连接的方式并不是很好,如果被某个容器占用了,就需要重新分配并且解决冲突。更多情况下,会采用自定义网桥的方式,并且让需要的容器都加入到这个自定义网桥中。但是需要注意:如果容器加入了一个网桥后,是不能与处于另一个网桥的容器相互通信的,只有处在同一个网桥的情况下才能够进行容器间相互通信。

并且容器访问另一个容器用的可以是ip地址,也可以是容器名。不管ip地址怎么变化,容器名不变访问到的就是同一个容器。

并且容器默认构建的时候,会加入默认的bridge网桥。通过 --network  命令可以加入到其他网桥,这样的话就不会加入默认的bridge网桥了。

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

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

相关文章

前端——js基础

一、JavaScript (简称js)——js可以给网页实现一个动态效果 1.JavaScript 组成 - 核心语法 ECMScipt 简称(es): 规范js的基本语法 1.es是js的语法规范 管理者 2.js是es的实现 操作者 - DOM > 文档对象 提供js操作 (例如…

再也不用担心内容重复!在线伪原创工具,让创作更自由!

大家好,今天我们将讨论一个对网络写作非常有益的辅助工具——在线内容转换工具。不论您是需要更新您的博客,还是希望在社交平台上保持活跃,我们都频繁面临着迅速生成新内容的挑战。利用一个有效的工具来改写现有内容,可以极大地提…

什么是网络安全自动化以及优势与挑战

目录 网络安全自动化的工作原理 网络安全自动化的好处 增强的安全功能 改善表现和姿势 降低安全成本 简化的安全合规性和审计 更好的端点管理 网络安全自动化的挑战 耗时且容易出错的安全流程 可见性降低,风险和成本增加 合规管理 有用的网络安全自动化…

算法题之每日温度

每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入…

基于Java的建筑节能监测系统+能源管理+公共建筑能耗监测系统+建筑能耗监测系统+节能监测系统+能源管理系统

介绍 建筑节能监测系统是基于计算机网络、物联网、大数据和数据可视化等多种技术融合形成的一套节能监测系统 系统实现了对建筑电、水、热,气等能源、资源消耗情况的实时监测和预警、动态分析和评估,为用户建立了科学、系统的节能分析方法,…

14年408-计算机网络

第一题: 解析:OSI体系结构 OSI由下至上依次是:物理层-网络链路层-网络层-运输层-会话层-表示层-应用层。 因此直接为会话层提供服务的是运输层。答案选C 第二题: 解析:数据链路层-交换机的自学习和帧转发 主机a1向交换…

webshell-HTTP常见特征

一、总体特点 二、蚁剑 数据中可以看到一些明文字符串函数,响应中可以看到响应的明文数据。 ant特征以及对数据base64可以解码 chr类别的会出现大量的chr编码 大量的百分号字符 三、哥斯拉 第一个请求包很大 响应为0 密钥被拆分到数据前后 响应包cookie带&#xf…

C#和数据库高级:虚方法

文章目录 一、抽象方法和抽象类中的思考1.1、回顾抽象方法的特点1.2、针对抽象方法问题的引出 二、虚方法的使用步骤2.1、虚方法重写方法的调用2.2、系统自带的虚方法2.3、重写Equals方法2.4、虚方法和抽象方法的比较 三、虚方法和抽象方法的联系3.1、ToString()方法的应用 一、…

Python爬虫APP程序:构建智能化数据抓取工具

在信息爆炸的时代,数据的价值日益凸显。Python作为一种强大的编程语言,与其丰富的库一起,为爬虫程序的开发提供了得天独厚的优势。本文将探讨如何使用Python构建一个爬虫APP程序,以及其背后的思维逻辑。 什么是Python爬虫APP程序&…

php thinkphp 小程序发送订阅模板消息通知

小程序需要在我的模板中先选用模板 小程序需要先订阅模板 wx.requestSubscribeMessage({tmplIds: ["XII_0By8D9WabnUjVPB_8S1itsm2d4_xxx"],success:

springboot实战学习(7)(JWT令牌的组成、JWT令牌的使用与验证)

接着上篇博客的学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验的基础上,基本完成用户模块的登录接口的主逻辑以及提到了问题:"用户未登录,需要通过登录,获取到令牌进行登录认证,…

DRF实操学习——收货地址的设计

DRF实操学习——收货地址的设计 1.行政区划表的设计2. 行政区划表接口演示1.返回所有的省份2. 查询指定上级行政区划的所有子区划,以及展示自身区划 3.行政区划表接口重写补充:前端请求逻辑4. 优化5.收货地址的设计6. 收货地址表接口重写7.优化1. 优化返…

示例说明:elasticsearch实战应用

Elasticsearch 是一个基于 Lucene 的分布式搜索和分析引擎,广泛应用于日志分析、全文搜索、数据可视化等领域。以下是 Elasticsearch 实战应用的一些关键点和步骤: 1. 环境搭建 首先,你需要在你的环境中安装和配置 Elasticsearch。 安装 E…

一个 Java 语言简化处理 PDF 的框架,提供了一套简单易用的 API 接口,满足多样化需求又能简化开发流程的处理方案(附教程)

前言 当前市面上处理 PDF 文件的工具众多,但它们往往存在一定的局限性,比如复杂交互、功能单一等问题。尤其对于那些需要频繁生成或编辑 PDF 文档的应用场景来说,找到一个既能满足多样化需求又能简化开发流程的处理方案显得尤为重要。那么&a…

中国的互联网电商,终于还是“连上了”

什么才是更好的互联网? 答案很简单:真正的互联。 9月26日,据市场消息,京东物流和菜鸟速递将分别接入淘天、京东平台。同时,京东也将在“双11”前开通支付宝支付,时隔13年再度携手阿里支付体系。 消息一出…

【x**3专享#2】编译 uboot 和 kernel 的文件结构

虚拟机交叉编译环境配置及内核编译步骤说明书 请先查看前篇文章内容 1. 获取虚拟机 IP 地址 打开虚拟机终端,执行以下命令查看虚拟机 IP 地址:ifconfig或者ip addr记录 eth0 或 ens33 等网络接口的 inet 后面的 IP 地址 2. 使用 Xftp 连接虚拟机 打开…

Springboot中yml文件不生效原因分析及解决

在Spring Boot项目中,YML文件是常用的配置文件格式。然而,有时你可能会遇到YML文件中的配置不生效的问题。本文将分析可能的原因并提供解决方案。 1. 格式错误 YML文件非常敏感,任何缩进或语法错误都可能导致配置不被解析。确保使用两个空格…

基于YOLOv5s的无人机航拍输电线瓷瓶检测(附数据集与操作步骤)

本文主要内容:详细介绍了无人机航拍输电线瓷瓶检测的整个过程,从创建数据集到训练模型再到预测结果全部可视化操作与分析。 文末有数据集获取方式,请先看检测效果 现状 输电线路绝缘瓷瓶的检测主要依赖人工巡检。巡检人员需携带专业设备,攀…

Python:百度贴吧实现自动化签到

早知道,还是python。 Github项目仓库在这。 相关API 签到贴吧列表 签到分为两个接口,PC端签到一次经验2,而移动端签到则是一次经验6。该用哪个接口已经很明显了。不过这里还是列出PC端的签到API。 # PC端签到接口 # sign_url "https:…

ROS理论与实践学习笔记——2 ROS通信机制之通信机制实践

5.1 话题发布 需求描述:编码实现乌龟运动控制,让小乌龟做圆周运动。 实现分析: ①乌龟运动控制实现,关键节点有两个,一个是乌龟运动显示节点 turtlesim_node,另一个是控制节点,二者是订阅发布模…