day02 -- docker

news2024/10/20 0:52:15

1.docker的介绍

Docker 是一个开源的应用容器引擎,基于 Go语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
镜像:将应用所需的函数库、依赖、配置等与应用一起打包得到的就是镜像(模板)
容器:为每个镜像的应用进程创建的隔离运行环境就是容器(实例)
镜像仓库:存储和管理镜像的地方就是镜像仓库,DockerHub是目前最大的镜像仓库,其中包含各种常见的应用镜像

2.docker的安装

2.1 卸载旧版本

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

2.2 设置Docker仓库

yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2

sudo yum install -y yum-utils

截图如下:
在这里插入图片描述

官方docker仓库

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

华为源

sudo yum-config-manager --add-repo https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

阿里docker仓库

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

清华docker仓库

sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

腾讯源

yum-config-manager --add-repo=https://mirrors.cloud.tencent.com/docker-ce/linux/centos/docker-ce.repo

建议使用国内源等

2.3 安装 Docker Engine-Community

yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

在这里插入图片描述
2.4 配置docker hub加速器(国内源)

sudo vi /etc/docker/daemon.json

修改内容如下:

{  
  "registry-mirrors": [  
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://hub.geekery.cn",
    "https://dockerpull.com",
    "https://docker.m.daocloud.io",
    "https://docker.mirrors.ustc.edu.cn"
  ]  
}

加载配置,启动Docker服务,查看镜像是否配置成功

sudo systemctl daemon-reload  
sudo systemctl start docker
sudo docker info

在输出信息中,你应该能看到Registry Mirrors部分,并且列出了你添加的镜像源地址
在这里插入图片描述
在这里插入图片描述

2.5 设置docker开机自启

systemctl enable docker

也有停止(stop),重启(restart),检查状态(status)命令

2.6 创建mysql容器

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

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

3.docker的常见命令

所有命令都可以通过--help进行查看

3.1 命令解读

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

命令解释

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

镜像命名规范
镜像名称一般分两部分组成:[repository]:[tag]
其中repository就是镜像名,tag是镜像的版本
在没有指定tag时,默认是latest,代表最新版本的镜像
常见命令图
在这里插入图片描述
详见官方文档

3.2 镜像命令

可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址

3.2.1 查看镜像 – docker images
docker images

在这里插入图片描述

3.2.2 仓库拉取镜像 – docker pull
docker pull 镜像名称

例:拉取nginx

docker pull nginx

在这里插入图片描述

3.2.3 保存镜像文件 – docker save
docker save -o 文件名.tar 镜像名称

例:将nginx镜像保存到本地

docker save -o nginx.tar nginx:latest
3.2.4 加载镜像文件 – docker load
docker load -i 镜像文件

注:镜像文件中的镜像在docker中没有拉取才能成功加载进去,否则需要删除镜像后,再把外部的镜像加载进去

docker load -i nginx.tar

在这里插入图片描述

3.2.5 构建镜像 --docker build

需要自己编写Dockerfile文件,实例参照自定义镜像

docker build -t 镜像名 Dockerfile目录
3.2.6 删除镜像 --docker rmi
docker rmi 镜像名称

例:删除nginx

docker rmi nginx

3.3 容器命令

3.3.1 查看容器状态

默认只查看运行中的容器状态,可加-a查看所有容器的状态

docker ps
3.3.2 格式输出
docker ps --format "table {{.Names}}\t{{.ID}}\t{{.Ports}}\t{{.Status}}\t{{.Image}}"
3.3.3 查看容器运行日志

默认后台运行,可加-f实现前台运行,ctrl+C退出

docker logs 容器名

在这里插入图片描述

3.3.4 进入容器
docker exec -it 容器名 bash

例:进入mysql容器,退出exit

 docker exec -it mysql bash

进入数据库

mysql -uroot -p

输入密码,即可进入数据库

3.3.5 停止容器
docker stop 容器名
3.3.6 启动容器
docker start 容器名
3.3.7 删除容器
docker rm 容器名

在这里插入图片描述

3.4 别名

实际上就是相当于设置快捷键

 vi ~/.bashrc

第一次打开会有默认的配置
在这里插入图片描述
也可以自己加进去

alias dps='docker ps --format "table {{.Names}}\t{{.ID}}\t{{.Ports}}\t{{.Status}}\t{{.Image}}"'

重新加载

source ~/.bashrc

在这里插入图片描述

4.docker数据卷与本地目录的挂载

4.1 数据卷挂载

在这里插入图片描述

数据卷是一个虚拟目录,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据
挂载数据卷
在创建容器时,利用 -v 数据卷名:容器内目录完成挂载
容器创建时,如果发现挂载的数据卷不存在时,会自动创建
常见命令

# 查看数据卷
docker volume ls
# 删除数据卷
docker volume rm
# 查看数据卷详情
docker volume inspect
# 删除未使用的数据卷
docker volume prune

例:利用Nginx容器部署静态资源

  • 创建Nginx容器,修改nginx容器内的html目录下的index.html文件内容
  • 将静态资源部署到nginx的html目录

注:在执行docker run命令时,使用 -v 数据卷:容器内目录 可以完成数据卷挂载;当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷
1.将静态资源上传
在这里插入图片描述

2.创建容器

docker run -d \
--name nginx \
-p 80:80  \
-v html:/usr/share/nginx/html \
nginx

在这里插入图片描述
3.查看卷

docker volume ls
docker volume inspect html

在这里插入图片描述
只要本地文件系统的挂载文件变化对应的容器里的文件也会发送变化

4.2 本地目录挂载

与挂载数据卷类似,
挂载本地目录
在创建容器时,利用 -v 本地目录:容器内目录完成挂载
例如:
mysql容器的数据挂载
查看mysql容器,判断是否有数据卷挂载
基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载(查阅官方镜像文档)

  1. 挂载/root/mysql/data到容器内的/var/lib/mysql目录
  2. 挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录,携带课前资料准备的SQL脚本
  3. 挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录,携带课前资料准备的配置文件

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

  • -v mysql : /var/lib/mysql 会被识别为一个数据卷叫mysql
  • -v ./mysql : /var/lib/mysql 会被识别为当前目录下的mysql目录
  1. 上传资源
  2. 创建容器
docker run -d --name mysql -p 3306:3306  -v /root/mysql/data:/var/lib/mysql -v /root/mysql/init:/docker-entrypoint-initdb.d -v /root/mysql/conf:/etc/mysql/conf.d --network heima -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123456 mysql

在这里插入图片描述
3.连接数据库查看
在这里插入图片描述

5.自定义镜像

5.1 镜像结构

在这里插入图片描述

5.2 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 hm-service.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

例:
Java项目先打包(maven中package),在把打包后的jar包和Dockerfile上传到同一个目录下,在这个目录下再进镜像构建,创建容器

1. 上传资源

2. 构建镜像

docker build -t hmall .

3. 创建容器

docker run --name hmall --network heima -p 8080:8080 -d  hmall

在这里插入图片描述
在这里插入图片描述
参考博客:docker快速入门

6.容器网络互连

默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥(docker0 172.17.0.1/16)上
在这里插入图片描述

6.1 相关命令

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

加入自定义网络的容器才可以通过容器名互相访问,默认网络下容器间不能相互访问

6.2 案例

例:创建自定义网络,创建容器加入此网络

 docker network create cat
 docker network ls
docker run --name hmall -p 8080:8080 -d --network cat  hmall

注:容器名不能与现有的容器名重复
在这里插入图片描述

7.项目部署

部署前请先清空容器与镜像,防止创建时冲突
例:黑马商城

7.1 自定义网络

 docker network create catgod007

在这里插入图片描述

7.2 数据库容器部署

1.上传资源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.创建容器

docker run -d --name mysql -p 3306:3306  -v /root/mysql/data:/var/lib/mysql -v /root/mysql/init:/docker-entrypoint-initdb.d -v /root/mysql/conf:/etc/mysql/conf.d --network catgod007 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123456 mysql

在这里插入图片描述
也可以用数据库可视化工具查看数据库表是否都在

7.3 后端项目容器部署

1.资源上传
把hmall项目用idea打开,用maven中的package进行打包(会在与src同级的target目录中出现);把dockerfile和jar包上传
在这里插入图片描述

2.构建镜像

docker build -t hmall .

3.创建容器

docker run --name hmall --network catgod007 -p 8080:8080 -d  hmall

在这里插入图片描述

7.4 前端项目容器部署

1.上传资源
将资料提供的nginx.conf、html目录与容器挂载(nginx整个文件夹上传)
nginx的配置文件(nginx.conf)中的8080前域名要与后端部署的容器名保持一致(默认hmall)
2.创建容器

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

在这里插入图片描述

7.5 最终展示

浏览器输入ip地址:18080

在这里插入图片描述

8.docker compose 部署容器

8.1 Docker Compose介绍

Docker Compose通过一个单独的docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署
常见命令
在这里插入图片描述
上面的项目部署可以改成通过docker-compose.yml一键部署

version: "3"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - cat-net
  hmall:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - cat-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - cat-net
networks:
  cat-net:
    name: catgod007

注:

  • docker-compose.yml主要分为项目(Project)与服务(Services)
  • 服务相关参数与docker构建容器差不多,部分如下:
    • depends_on ;依赖,及前端依赖后端,后端依赖数据库

8.2 案例:一键部署项目

1.上传docker-compose.yml到/root
在这里插入图片描述

2.清空容器和镜像
在这里插入图片描述
在这里插入图片描述

3.通过docker-compose.yml部署容器

docker compose up -f ./docker-compose.yml -p catgod007 -d

docker-compose.yml在当前目录下,可省略-f ./docker-compose.yml
-p catgod007指定名字,不指定默认root
-d后台运行

docker compose up -d

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

4.通过浏览器进行访问
浏览器输入ip地址:18080
在这里插入图片描述
感谢大家的支持,关注,评论,点赞!

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

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

相关文章

androidStudio编译导致的同名.so文件冲突问题解决

files found with path lib/arm64-v8a/libserial_port.so from inputs: ...\build\intermediates\library_jni\debug\jni\arm64-v8a\libserial_port.so C:\Users\...\.gradle\caches\transforms-3\...\jni\arm64-v8a\XXX.so 解决方式如下: 1.将gradle缓存文件删…

mysql 10 单表访问方法

01.优化的过程 对于我们这些 MySQL 的使用者来说, MySQL 其实就是一个软件,平时用的最多的就是查询功能。DBA时不时丢过来一些慢查询语句让优化,我们如果连查询是怎么执行的都不清楚还优化个毛线,所以是时候掌握真正的技术了。我…

推荐?还是踩雷?3款中英互译软件大盘点,你真的选对了吗?

作为一个爱到处跑的人,我特别明白旅行的时候能说会道有多重要。不管是跟当地人聊天,还是看路标、菜单,有个好用的翻译软件是肯定少不了的。今天,我打算给你们介绍3款中英文互译的翻译工具,帮你挑出最适合自己的那一个。…

图论day62|拓扑排序理论基础、117.软件构建(卡码网)、最短路径之dijkstra理论基、47.参加科学大会(卡码网 第六期模拟笔试)

图论day62|拓扑排序理论基础、117.软件构建(卡码网)、最短路径之dijkstra理论基、47.参加科学大会(卡码网 第六期模拟笔试) 拓扑排序理论基础117.软件构建(卡码网)最短路径之dijkstra理论基础47.参加科学大…

大数据-173 Elasticsearch 索引操作 增删改查 详细 JSON 操作

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

面试题:Redis(七)

1. 面试题 2. 缓存预热 当Redis暂时没有数据,但MySQL中有数据时,由程序员、中间件、写段程序提前访问该数据,使得数据进行回写进Redis,从而达到缓存预热的效果,这样可以使得一开始访问页面程序的用户也没有卡顿&#x…

力扣 简单 876.快慢指针

文章目录 题目介绍题解 题目介绍 题解 class Solution {public ListNode middleNode(ListNode head) {ListNode slow head, fast head;while(fast ! null && fast.next ! null){slow slow.next;fast fast.next.next;}return slow;} }

JCO发表加州大学团队最新医学AI研究,从常规HE染色切片预测同源重组缺陷和铂类药物反应|顶刊精析·24-10-18

小罗碎碎念 这篇文章是关于一项名为DeepHRD的深度学习平台的研究,该平台能够从常规的苏木精-伊红(H&E)染色组织切片中预测同源重组缺陷(HRD)和铂类药物反应。 作者角色姓名单位第一作者Erik N. Bergstrom加州大学圣…

c4d好用的渲染软件有哪些?c4d各个渲染器的优缺点

在3D设计和动画制作领域,Cinema 4D(C4D)是一款备受欢迎的软件。它强大的建模、动画和渲染功能,使其成为许多设计师和艺术家的首选工具。然而,C4D的内置渲染器可能无法满足所有项目的需求,因此许多用户会选择…

31. 问题 - GPIO调试

1. 概述 gpio调试过程中,个别gpio出现,波形干扰 2. gpio配置表 GPIO 功能 备注

AP上线的那些事儿(1)capwap建立过程、设备初始化以及二层上线

1、了解FITAP与AC的建立过程 之前我们已经知道了FATAP与FIT是一对双胞胎一样的兄弟,FAT哥哥能够直接独立使用当AP桥接、路由器等,而弟弟FIT则比较薄弱,独自发挥不出功效,需要一位师傅(AC)来带领&#xff0c…

Java21虚拟线程:我的锁去哪儿了?

0 前言 最近的文章中,我们详细介绍了当我们迁移到 Java 21 并将代际 ZGC 作为默认垃圾收集器时,我们的工作负载是如何受益的。虚拟线程是我们在这次迁移中兴奋采用的另一个特性。 对虚拟线程新手,它们被描述为“轻量级线程,大大…

word建立目录以及修改页码

1、为word建立新的目录 (1)选中word中的标题设置为第几级标题,将所有的标题均设置完成。最后可以鼠标右击标题,对不同的标题字体大小等进行设置。右击-->修改-->格式-->段落 (2)在word中插入新的…

springboot039基于Web足球青训俱乐部管理后台系统开发(论文+源码)_kaic

毕业设计(论文) 基于Web的足球青训俱乐部管理后台系统的设计与开发 学生姓名 XXX 学 号 XXXXXXXX 分院名称 XXXXXXXX 专业班级 XXXXX 指导教师 XXXX …

12.个人博客系统(Java项目基于spring和vue)

目录 1.系统的受众说明 2.相关技术介绍 2.1 B/S 简介 2.2 JAVA 简介 2.3 vue简介 2.4 SSM和Springboot简介 3.可行性分析 3.1 技术可行性分析 3.2 经济可行性分析 3.3 操作可行性 4.系统设计 4.1 系统总流程 4.2 博主用例 4.3 游客用例 4.4 系统类 4.…

llm 论文淘金,大模型精选论文解读,让你从大模型零基础到进阶

技术报告 没啥说的,当下最最最有含金量的论文,值得反复阅读。重点留意:数据清洗方法、pretrain 数据配比、pretrain 超参数、退火阶段、sft 的 task 种类、sft 的数据量级、dpo / ppo 训练技巧,合成数据方法等。 我个人觉着&…

Java项目实战II基于Spring Boot的毕业就业信息管理系统设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着高校扩…

014_django基于大数据运城市二手房价数据可视化系统的设计与实现2024_3ahrxq75

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…

【C++】编码最全详解

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 🔥 所属专栏:C深入学习笔记 💫 欢迎来到我的学习笔记! 一、什么编码? 编码&am…

DDR Study - LPDDR Initial

参考来源:JESD209-4B 在之前的DDR Study - Basic Understanding中介绍了DDR的基础概念,从这篇文章开始,会基于LPDDR4依次按照如下顺序对LPDDR内容进行简单分析: LPDDR Initial → LPDDR Write Leveling and DQ Training → LPDDR …