你熟悉Docker吗?

news2024/11/29 20:38:09

你熟悉Docker吗?

文章目录

  • 你熟悉Docker吗?
    • 快速入门
      • Docker安装
        • 1.卸载旧版
        • 2.配置Docker的yum库
        • 3.安装Docker
        • 4.启动和校验
        • 5.配置镜像加速
          • 5.1.注册阿里云账号
          • 5.2.开通镜像服务
          • 5.3.配置镜像加速
      • 部署MySQL
      • 镜像和容器
      • 命令解读
    • Docker基础
      • 常用命令
      • 数据卷
        • 数据卷挂载
        • 本地目录挂载
      • 自定义镜像
        • 镜像结构
        • Dockerfile
        • 构建镜像
      • 容器网络
    • 项目部署
      • 部署Java
      • 部署前端
      • DockerCompose

Docker是用来快速构建、运行、管理应用的工具,是用来帮助部署项目及项目所需要依赖的组件。

快速入门

Docker安装

安装教程参考Docker官方文档

1.卸载旧版

首先如果系统中已经存在旧的Docker,则先卸载:

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
2.配置Docker的yum库

首先要安装一个yum工具

yum install -y yum-utils

安装成功后(出现 “完毕” 字样),执行命令,配置Docker的yum源:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.安装Docker

最后,执行命令,安装Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4.启动和校验
# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
5.配置镜像加速

这里以阿里云镜像加速为例。

5.1.注册阿里云账号

首先访问阿里云网站注册一个账号。

5.2.开通镜像服务

在首页的产品中,找到阿里云的容器镜像服务

在这里插入图片描述

点击后进入控制台:

在这里插入图片描述

首次可能需要选择立刻开通,然后进入控制台。

5.3.配置镜像加速

找到镜像工具下的镜像加速器

在这里插入图片描述

页面向下滚动,即可找到配置的文档说明:

在这里插入图片描述

具体命令如下:

# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

部署MySQL

先停掉虚拟机中的MySQL,确保虚拟机已经安装了Docker,且网络开通的情况下,执行下面的命令即可安装MySQL

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

镜像和容器

  • 利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。
  • 镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。
  • Docker会在运行镜像时创建一个隔离环境,称为容器(container)。
  • 存储和管理镜像的服务就是镜像仓库DockerHub是目前最大的镜像仓库,其中包含各种常见的应用镜像

命令解读

  • docker run:创建并运行一个容器,-d是让容器在后台运行
  • --name mysql:给容器起个名字,必须唯一
  • -p 3306:3306:设置端口映射
  • -e KEY=VALUE:是设置环境变量
  • mysql:指定运行的镜像的名字
    • 镜像命名规范:一般分两部分组成:[repository]:[tag]repository是镜像名,tag是镜像的版本。没有指定tag时,默认是latest,代表最新版本的镜像

Docker基础

常用命令

Docker最常见的命令就是操作镜像、容器的命令,详见官方文档

在这里插入图片描述

命令说明
docker pull将远端镜像拉取到本地
docker images查看所有本地镜像
docker rmi删除指定镜像
docker build自定义构建镜像
docker save将打包镜像保存到本地
docker load加载镜像
docker push推送本地镜像到远端镜像仓库
docker run创建并运行容器
docker stop停止容器
docker start启动容器
docker rm删除容器
docker ps查看当前容器运行状态
docker logs查看容器日志
docker exec进入容器内部

数据卷

数据卷( volume ):是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。它将宿主机目录映射到容器内目录,方便操作容器内文件,或者方便迁移容器产生的数据

数据卷挂载
  • 在创建容器时,利用-v 数据卷名:容器内目录,完成挂载
  • 容器创建时,如果发现挂载的数据卷不存在时,会自动创建
命令说明
docker volume create创建数据卷
docker volume ls查看所有数据卷
docker volume rm删除指定数据卷
docker volume inspect查看某个数据卷的详情
docker volume prune清除数据卷
本地目录挂载
  • 在执行docker run命令时,使用-v 本地目录∶容器内目录,可以完成本地目录挂载
  • 本地目录必须以 “/”“./" 开头,如果直接以名称开头,会被识别为数据卷而非本地目录
    • -v mysql:/var/lib/mysql会被识别为一个数据卷叫 mysql
    • -v ./mysql:/var/lib/mysql会被识别为当前目录下的 mysql目录

自定义镜像

镜像中包含了应用程序所需要的运行环境、函数库、配置、以及应用本身等各种文件。这些文件分层打包而成,构建镜像的过程就是把上述文件打包的过程。

镜像结构
  • 入口( Entrypoint ):镜像运行入口,一般是程序启动的脚本和参数
  • 层( Layer ):添加安装包、依赖、配置等,每次操作都形成新的一层
  • 基础镜像( Baselmage ):应用依赖的系统函数库、环境、配置、文件等
Dockerfile

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。常见指令如下:

指令说明示例
FROM指定基础镜像FROM centos:6
ENV设置环境变量,可在后面指令使用ENV key value
COPY拷贝本地文件到镜像的指定目录COPY ./jrell.tar.gz /tmp
RUN执行Linux的shell命令,一般是安装过程的命令RUN tar -zxvf /tmp/jrell.tar.gz && EXPORTS path=/tmp/jrell:$path
EXPOSE指定容器运行时监听的端口,是给镜像使用者看的EXPOSE 8080
ENTRYPOINT镜像中应用的启动命令,容器运行时调用ENTRYPOINT java -jar xx.jar

更多详细语法说明,请参考官方文档

举例:

基于Ubuntu基础镜像,利用Dockerfile描述镜像结构

#指定基础镜像
FROM ubuntu:16.04
#配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
#拷贝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
#配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
#入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

也可以直接基于jdk为基础镜像,省略上述步骤

#指定基础镜像
FROM openjdk:11.0-jre-buster
#拷贝jar包
COPY docker-demo.jar /app.jar
#入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]
构建镜像

编写好了Dockerfile,可利用下面的命令来构建镜像

docker build -t myImage:1.0 . 
  • -t:是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest
  • .:是指定Dockerfile所在目录,如果就在当前目录,则指定为 “.”

格式docker build -t 镜像名 Dockerfile目录

容器网络

默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上:

在这里插入图片描述

加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下:

命令说明
docker network create创建一个网络
docker network ls查看所有网络
docker network rm删除指定网络
docker network prune清除未使用的网络
docker network connect使指定容器连接加入某网络
docker network disconnect使指定容器连接离开某网络
docker network inspect查看网络详细信息

项目部署

部署Java

Dockerfile

#基础镜像
FROM openjdk:11.0-jre-buster
#设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#拷贝jar包
COPY liner-service.jar /app.jar
#入口
ENTRYPOINT ["java","-jar","/app.jar"]
#构建镜像
docker build -t mall .
#运行镜像
docker run -d --name linmall -p 8080:8080 --network liner mall

部署前端

docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/ngin/html:/usr/share/nginx/ html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--rTetwork liner \
nginx

DockerCompose

Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署

在这里插入图片描述

docker compose命令格式如下:

docker compose [OPTIONS] [COMMAND]
类型参数或指令说明
Options-f指定compose文件的路径和名称
Options-p指定projcct名称
Commandsup创建并启动所有service容器
Commandsdown停止并移除所有容器、网络
Commandsps列出所有启动的容器
Commandslogs查看指定容器的日志
Commandsstop停止容器
Commandsstart启动容器
Commandsrestart重启容器
Commandstop查看运行的进程
Commandsexec在指定的运行中容器中执行命令

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

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

相关文章

Linux常见指令(1)

Linux常见指令[1] 一.前言1.操作系统简述 二.Linux常见指令1.登录Xshell2.Linux下的常见命令1.pwd2.ls1.ls -a2.ls -d3.ls -l 3.cd Linux中的文件系统1.文件的相关知识2.Linux下目录结构的认识1.什么叫做路径?2.Linux的整体目录结构3.为什么要有路径呢?4.绝对路径与相对路径 …

2023彩虹全新SUP模板,知识付费模板,卡卡云模板

源码介绍&#xff1a; 2023彩虹全新SUP模板/知识付费模板/卡卡云模板&#xff0c;首页美化&#xff0c;登陆页美化&#xff0c;修复了pc端购物车页面显示不正常的问题。 请自行查毒。感觉彩虹不少源码可能都有不干净的东西 安装教程&#xff1a; 1.将这俩个数据库文件导入数据…

队列的各个函数的实现

1.第一个结构是存放链表的数据&#xff0c;第二个结构体是存放头节点和尾节点的以方便找到尾节点&#xff0c;存放头节点的是phead&#xff0c;尾节点的是ptail typedef struct QueueNode {struct QueueNode* next;//单链表QDataType data;//放数据 }QNode;typedef struct Queu…

使用U3D、pico开发VR(二)——添加手柄摇杆控制移动

一、将unity 与visual studio 相关联 1.Edit->Preference->External tool 选择相应的版本 二、手柄遥控人物转向和人物移动 1.添加Locomotion System组件 选择XR Origin&#xff1b; 2.添加Continuous Move Provider&#xff08;Action-based&#xff09;组件 1>…

26962-2011 高频电磁场综合水处理器技术条件

声明 本文是学习GB-T 26962-2011 高频电磁场综合水处理器技术条件. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了高频电磁场综合水处理器(以下简称处理器)的术语和定义、分类和型号、结构型式、 要求及检验、标志、包装和贮运…

Opengl之抛光物

我们目前使用的光照都来自于空间中的一个点。它能给我们不错的效果,但现实世界中,我们有很多种类的光照,每种的表现都不同。将光投射(Cast)到物体的光源叫做投光物(Light Caster) 平行光 当一个光源处于很远的地方时,来自光源的每条光线就会近似于互相平行。不论物体和/或…

基于Java的会员管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

【李沐深度学习笔记】图片分类数据集

课程地址和说明 图片分类数据集p3 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。本文还参考了【李沐3】3.5、图像分类数据集 图片分类数据集 MNIST数据集是图像分类中广泛使用的数据集之一&#xff0c;但作为基…

C语言——动态内存管理详解(内存结构、动态内存函数、易错题、柔性数组)

本篇概要 本篇文章从基本出发讲述为什么要存在动态内存分配&#xff0c;动态内存函数有哪些&#xff0c;常见的动态内存错误&#xff0c;一些关于内存分配的练习题以及柔性数组的相关知识。 文章目录 本篇概要1.为什么存在动态内存分配1.1为什么要动态分配内存1.2内存结构 2.常…

Unity实现设计模式——状态模式

Unity实现设计模式——状态模式 状态模式最核心的设计思路就是将对象的状态抽象出一个接口&#xff0c;然后根据它的不同状态封装其行为&#xff0c;这样就可以实现状态和行为的绑定&#xff0c;最终实现对象和状态的有效解耦。 在实际开发中一般用到FSM有限状态机的实现&…

idea Springboot 教师标识管理系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 教师标识管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统 具有完整的源代码和数据库&…

8个居家兼职,帮助自己在家搞副业

越来越多的人开始追求居家工作的机会&#xff0c;无论是为了获得更多收入以改善生活质量&#xff0c;还是为了更好地平衡工作和家庭的关系&#xff0c;居家兼职已成为一种趋势。而在家中从事副业不仅能够为我们带来额外的收入&#xff0c;更重要的是&#xff0c;它可以让我们在…

c#中的接口

使用IEnumerable统一迭代变量类型 class Program {static void Main(string[] args){int[] nums1 new int[] { 1, 2, 3, 4, 5 };ArrayList nums2 new ArrayList { 1, 2, 3, 4, 5 };Console.WriteLine(Sum(nums1));Console.WriteLine(Sum(nums2));Console.WriteLine(Avg(nums…

ConcurrentHashMap 并发

1 ConcurrentHashMap 并发 1.1 减小锁粒度 减小锁粒度是指缩小锁定对象的范围&#xff0c;从而减小锁冲突的可能性&#xff0c;从而提高系统的并发能力。减小锁粒度是一种削弱多线程锁竞争的有效手段&#xff0c;这种技术典型的应用是 ConcurrentHashMap(高性能的 HashMap)类的…

【分布式计算】二、架构 Architectures

1.中心化架构&#xff08;Centralized Architectures&#xff09; 1.1.经典C/S模型 服务器&#xff1a;一个或多个进程提供服务 客户端&#xff1a;一个或多个进程使用服务 客户端和服务器可以在不同的机器上 客户端遵循请求/回复模型 1.2.传统三层视图 用户界面层&#x…

并查集LRUCache

文章目录 并查集1.概念2. 实现 LRUCache1. 概念2. 实现使用标准库实现自主实现 并查集 1.概念 并查集是一个类似于森林的数据结构&#xff0c;并、查、集指的是多个不相干的集合直接的合并和查找&#xff0c;并查集使用于N个集合。适用于将多个元素分成多个集合&#xff0c;在…

Python分支结构和循环结构

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一.分支结构 分支结构是根据判断条件结果而选择不同向前路径的运行方式&#xff0c;分支结构分为&#xff1a;单分支&#xff0c;二分支和多分支。 1&#xff0…

No154.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

关于Java的IO流里面的方法read()的细究

我们会经常看到上面的代码&#xff0c;很显然read(b)&#xff0c;是把字节读入到b这个字节数组里&#xff0c;然后read()返回一个成功读取的字节长度&#xff0c;如果现在用不带参的read()去一个一个字节的读了&#xff1f;那么len bInput.read()就是把这一个节字读入到len&am…

消息队列实现进程间通信

write.c #include<myhead.h>typedef struct {long msgtype; //消息类型char data[1024]; //消息正文 }Msg_s;#define SIZE sizeof(Msg_s)-sizeof(long) //消息正文的大小int main(int argc, const char *argv[]) {key_t key; //定义一个键值if((key ftok("./&q…