学习笔记--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

而使用Docker安装,仅仅需要一步即可,在命令行输入下面的命令(建议采用CV大法):

docker run -d \--name mysq3 \-p 3308:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql
docker run -d \--name mysql2 \-p 3307:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysqltee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://p2kc3337.mirror.aliyuncs.com"]
}
EOF# 重新加载配置
systemctl daemon-reload# 重启Docker
systemctl restart docker

Docker的镜像仓库:Dockers Hub

命令解读

小结

docker基础

常见命令

官网查阅:https://docs.docker.com/

补充:

默认情况下,每次重启虚拟机我们都需要手动启动Docker和Docker中的容器。通过命令可以实现开机自启:

# Docker开机自启
systemctl enable docker# Docker容器开机自启
docker update --restart=always [容器名/容器id]

案例

# 第1步,去DockerHub查看nginx镜像仓库及相关信息# 第2步,拉取Nginx镜像
docker pull nginx# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB
mysql        latest    3218b38490ce   17 months ago   516MB# 第4步,创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx# 第5步,查看运行中容器
docker ps
# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第6步,访问网页,地址:http://虚拟机地址# 第7步,停止容器
docker stop nginx# 第8步,查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第9步,再次启动nginx容器
docker start nginx# 第10步,再次查看容器
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第11步,查看容器详细信息
docker inspect nginx# 第12步,进入容器,查看容器内目录
docker exec -it nginx bash
# 或者,可以进入MySQL
docker exec -it mysql mysql -uroot -p# 第13步,删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx

命令别名

  1. 修改/root/.bashrc文件

vi /root/.bashrc

  1. 添加别名

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

alias dis='docker images'

  1. 退出执行命令使别名生效

source /root/.bashrc

数据卷

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

/var/lib/docker/volumes这个目录就是默认的存放所有容器数据卷的目录,其下再根据数据卷名称创建新目录,格式为/数据卷名/_data。

命令

完成案例-1

  1. 删除原有的nginx容器

docker rm -f nginx

  1. 创建数据卷

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

  1. 然后查看数据卷

docker volume ls

  1. 查看数据卷详情

docker volume inspect html

  1. 查看/var/lib/docker/volumes/html/_data目录

ll /var/lib/docker/volumes/html/_data

  1. 进入该目录,并随意修改index.html内容

cd /var/lib/docker/volumes/html/_data

vi index.html

  1. 进入容器内部,查看/usr/share/nginx/html目录内的文件是否变化

docker exec -it nginx bash

小结

完成案例-2本地目录挂载

# 1.查看MySQL容器详细信息
docker inspect mysql
# 关注其中.Config.Volumes部分和.Mounts部分

# 1.删除原来的MySQL容器
docker rm -f mysql# 2.进入root目录
cd ~# 3.创建并运行新mysql容器,挂载本地目录
docker run -d \--name mysql0 \-p 3307:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v /root/mysql/data:/var/lib/mysql \-v /root/mysql/conf:/etc/mysql/conf.d \-v /root/mysql/init:/docker-entrypoint-initdb.d \mysql# 4.查看root目录,可以发现~/mysql/data目录已经自动创建好了
ls -l mysql
# 结果:
总用量 4
drwxr-xr-x. 2 root    root   20 5月  19 15:11 conf
drwxr-xr-x. 7 polkitd root 4096 5月  19 15:11 data
drwxr-xr-x. 2 root    root   23 5月  19 15:11 init# 查看data目录,会发现里面有大量数据库数据,说明数据库完成了初始化
ls -l data# 5.查看MySQL容器内数据
# 5.1.进入MySQL
docker exec -it mysql mysql -uroot -p123
# 5.2.查看编码表
show variables like "%char%";
# 5.3.结果,发现编码是utf8mb4没有问题
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+# 6.查看数据
# 6.1.查看数据库
show databases;
# 结果,hmall是黑马商城数据库
+--------------------+
| Database           |
+--------------------+
| hmall              |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
# 6.2.切换到hmall数据库
use hmall;
# 6.3.查看表
show tables;
# 结果:
+-----------------+
| Tables_in_hmall |
+-----------------+
| address         |
| cart            |
| item            |
| order           |
| order_detail    |
| order_logistics |
| pay_order       |
| user            |
+-----------------+
# 6.4.查看address表数据
+----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
| id | user_id | province | city   | town     | mobile      | street        | contact   | is_default | notes |
+----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
| 59 |       1 | 北京     | 北京   | 朝阳区    | 13900112222 | 金燕龙办公楼   | 李佳诚    | 0          | NULL  |
| 60 |       1 | 北京     | 北京   | 朝阳区    | 13700221122 | 修正大厦       | 李佳红    | 0          | NULL  |
| 61 |       1 | 上海     | 上海   | 浦东新区  | 13301212233 | 航头镇航头路   | 李佳星    | 1          | NULL  |
| 63 |       1 | 广东     | 佛山   | 永春      | 13301212233 | 永春武馆       | 李晓龙    | 0          | NULL  |
+----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
4 rows in set (0.00 sec)

自定义镜像

包装自己的java程序

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。

Dockerfile

Dockerfile就是一个文本文件个个的指令(lnstruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像;

官网文档:https://docs.docker.com/engine/reference/builder

构建镜像运行java程序

  1. 基础镜像

需要下载,可以使用课程提供的基础镜像

docker load -i jdk.tar

  1. 添加一个redis容器

docker pull redis

  1. 我们将课前资料提供的docker-demo.jar包以及Dockerfile拷贝到虚拟机的/root/demo目录

  1. 执行命令,构建镜像
# 进入镜像目录
cd /root/demo
# 开始构建
docker build -t docker-demo .

命令说明:

  • docker build : 就是构建一个docker镜像
  • -t docker-demo :-t参数是指定镜像的名称(repository和tag)
  • . : 最后的点是指构建时Dockerfile所在路径,由于我们进入了demo目录,所以指定的是.代表当前目录,也可以直接指定Dockerfile目录:

# 直接指定Dockerfile目录

docker build -t docker-demo:1.0 /root/demo

  1. 尝试运行该镜像

docker run -d --name dd -p 8080:8080 docker-demo

dd:是自定义运行镜像名字

  1. 查看日志

docker logs dd

  1. 网址输入192.168.5.11:8080/hello/count

小结

网络

自定义创建网络

举例:

//查看网络
docker network ls//创建一个网络
docker network create 自定义的网络名字//查看本机的所有网段
ip addr//容器加入网络
docker nerwork connect 网络名 容器名//查看容器详细信息,可查看容器的网络网段信息
docker inspect 容器名//再容器创建的时候加入网络,这样就不会创建默认网桥,只会存在你创建的网桥
docker run -d --name 容器名 -p 8080:8080 --network 网络名 docker-demo

项目部署

后端部署

第一步:将java项目打jar包;

第二步:将jar包和Dockerfile传给虚拟机

第三步:构建镜像

docker build -t hmall .

PS:镜像构建中是如何找到dockerfile文件的:如docker build -t hmall .

在Docker中,当你运行docker build命令来构建镜像时,Docker会查找当前上下文(context)中的Dockerfile文件。这个上下文通常是你运行docker build命令所在的目录,除非你用-f或--file选项指定了另一个位置。

在你给出的命令docker build -t hmall .中:

  • -t hmall:这个参数用于给构建的镜像命名并打标签。在这个例子中,构建的镜像将被命名为hmall。
  • .(点):这个参数表示Docker构建的上下文是当前目录。Docker会打包当前目录(以及其子目录)中的所有内容,并将其发送到Docker守护进程(daemon)以进行构建。但是,实际上只有Dockerfile和构建过程中引用的文件会被添加到镜像中。

Docker会在指定的上下文(在这个例子中是当前目录)中查找名为Dockerfile(没有扩展名)的文件。如果找不到该文件,Docker会返回一个错误。

如果你想要指定一个不同位置或名称的Dockerfile,你可以使用-f或--file选项。例如:


docker build -t hmall -f /path/to/Dockerfile .

在这个例子中,Docker会在/path/to/目录中查找名为Dockerfile的文件,并使用该文件来构建镜像。同时,.仍然指定了构建上下文为当前目录,但是只有Dockerfile和构建过程中明确引用的文件会被发送到Docker守护进程。

第四步:看8080端口是否占用,可是删除原有的8080端口

第五步:创建容器

docker run -d --name hm(自定义容器名字) -p 8080:8080 --network kussm(自定义网络名字) hmall

PS:docker中镜像与容器的关系

Docker中的镜像与容器之间存在着密切的关系,以下是它们之间关系的详细解释:

  1. 定义与功能:
    • Docker镜像:Docker镜像是Docker容器的构建块,它是一个只读的模板,包含了运行应用程序所需的文件系统、代码和依赖项。镜像可以看作是一个软件包,其中包含了构成应用程序的所有组件。
    • Docker容器:Docker容器是Docker镜像的运行实例,它是一个独立的、可执行的进程,具有自己的文件系统、网络和进程空间。容器是可启动、停止、暂停和删除的,它们提供了一个隔离的运行环境,使得应用程序可以在其中运行,而不受主机环境的影响。
  1. 关系描述:
    • 镜像与容器的关系:Docker镜像和容器之间是一种“类与实例”的关系。镜像可以看作是一个类,而容器则是这个类的实例。在Docker中,用户可以通过Docker镜像来创建Docker容器。
    • 依赖关系:每个Docker容器都基于一个特定的镜像。镜像提供了容器运行所需的文件系统和依赖项,而容器则在镜像的基础上启动、运行应用程序。
  1. 特点:
    • 镜像的特点:
      • 只读性:镜像是只读的,意味着它不可修改。每次对镜像的修改都会生成一个新的镜像。
      • 完整性:镜像包含了一个完整的文件系统,其中包含了应用程序运行所需的所有文件、目录和配置。
      • 依赖项:镜像还包含了应用程序的运行时依赖项,例如库文件、依赖软件和环境变量等。
    • 容器的特点:
      • 独立性:每个容器都是一个独立的、可重复的、可部署的单元。
      • 可移植性:容器可以在不同的环境中进行共享、复制和传递。
      • 隔离性:容器提供了隔离的运行环境,使得应用程序可以在其中运行,而不受主机环境的影响。
  1. 构建与运行:
    • 镜像的构建:Docker镜像的构建是通过一个叫做Dockerfile的文本文件进行的。Dockerfile中包含了一系列的指令,用于定义和描述如何构建镜像。
    • 容器的运行:一旦镜像构建完成,可以通过Docker命令将其部署为容器。容器是镜像的运行实例,可以独立运行,并提供一个隔离的运行环境。

综上所述,Docker镜像与容器之间是一种“类与实例”的关系,镜像是用来创建容器的模板,而容器则是镜像的运行实例。它们共同构成了Docker容器化的环境,使得开发人员能够更轻松地构建、交付和运行应用程序。

第六步:查看日志,浏览器访问检查

docker logs -f hm

前端部署

第一步:将前端文件传入虚拟机中

第二步:查看官网文档,查询配置挂载路径

配置挂载路径

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 kussm \nginx

第三步:浏览器访问18080端口

DockerCompose

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

对比

命令

开始部署使用

之前因为有相同的容易,所以先将之前的容器和镜像删除

第一步:先准备好compose.yml文件,配置好信息,传递进虚拟机

第二步:运行compose

docker compose up -d //-d表示后台运行

第三步:浏览器检查

第四步:移除

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

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

相关文章

Socket编程---UDP篇

目录 一. UDP协议 二. Socket编程 2.1 sockaddr家族 2.2 接口介绍 三. 服务端实现 四. 服务端调用实现 五. 客户端实现 六. 效果展示 一. UDP协议 何为UDP协议的含义&#xff0c;上篇粗略提及了一下TCP与UDP的区别&#xff1a; TCP&#xff1a; •…

2024最新盘点:主流的仓库管理软件有哪些?

本文将盘点10款主流的仓库管理软件&#xff0c;为企业选型仓库管理软件提供参考。 库存数据不准确、订单处理效率低下、仓库作业流程不规范&#xff1f;在数据管理与分析上遇到困难&#xff0c;企业发展和竞争力受阻&#xff1f;物流行业高速发展&#xff0c;而仓储管理却遇到重…

【Python入门】第1节 基础语法

&#x1f4d6;第1节 基础语法 ✅字面量✅注释✅变量✅数据类型&#x1f9ca;数据类型转换 ✅标识符✅运算符✅字符串扩展&#x1f9ca;字符串的三种定义方式&#x1f9ca;字符串拼接&#x1f9ca;字符串格式化&#x1f9ca;格式化的精度控制&#x1f9ca;字符串格式化方式2&…

Windows bat脚本学习六(十六进制与十进制互转)

一、十六进制转十进制 十六进制数转十进制数相对比较简单&#xff0c;可以直接通过0x来实现。 见如下代码&#xff1a; echo off chcp 65001set taaset /a hex0x%t% echo data%hex%pause 结果&#xff1a; 二、十进制转十六进制 这个转化比较麻烦&#xff0c;没有简便的方式转…

通过 GitHub Actions 执行数据库 Schema 变更工作流

原文地址 https://www.bytebase.com/docs/tutorials/github-ci/ 教程库&#xff1a;https://github.com/bytebase/github-action-example 开发者们喜欢将 Schema 变更脚本与应用程序代码一起保存在 Git 中&#xff0c;这样变更脚本就能像应用程序代码一样接受审核和版本控制&…

哪款直流电能表可在电信基站、直流充电桩、太阳能光伏用

安科瑞徐赟杰18706165067 在电信基站、直流充电桩、太阳能光伏等应用场合中&#xff0c;可使用DJSF1352-RN导轨式直流电能表&#xff0c;此表带有双路直流输入&#xff0c;该系列仪表可测量直流系统中的电压、电流、功率以及正反向电能等。可计量总电能&#xff0c;又可计量规…

ev录屏损坏修复

ev录屏应该不正常关闭&#xff0c;录屏损坏 淘宝买了一个软件&#xff0c;修复成功&#xff0c;需找一个当时时间段的正常录屏学习&#xff0c;然后高级修复。整体花费5毛钱

记录一下idea的一些使用技巧和遇到的异常(持续更新)

技巧 自己的模板——live template 有些代码在项目中通常会被用到或会被重复使用&#xff0c;可以自己写一个模板存起来&#xff0c;要用的时候用快捷键生成就可以了。 在这里选择生效范围 现在&#xff0c;就有我们自己的模板了&#xff0c;一回车就自动生成 idea的全局配置…

人工智能 | 结对编程助手GithubCopilot

简介 GitHub Copilot 是一款 AI 结对程序员&#xff0c;可帮助您更快、更少地编写代码。它从注释和代码中提取上下文&#xff0c;以立即建议单独的行和整个函数。GitHub Copilot 由 GitHub、OpenAI 和 Microsoft 开发的生成式 AI 模型提供支持。它可作为 Visual Studio Code、…

win系统安装mysql,使用mysqldump,pycharm使用mysqldump,避坑

文章目录 下载mysql的win客户端设置系统环境变量验证是否可用pycharm使用mysqldump异常问题排查 下载mysql的win客户端 官网下载地址如果下载旧版本&#xff0c;需自行到Archives里面找 本人使用的是mysql5.7&#xff0c;找到相应版本后&#xff0c;点击Download下载 设置系统…

[Java]SpringBoot登录认证流程详解

登录认证 登录接口 1.查看原型 2.查看接口 3.思路分析 登录核心就是根据用户名和密码查询用户信息,存在则登录成功, 不存在则登录失败 4.Controller Slf4j RestController public class LoginController {Autowiredprivate EmpService empService;/*** 登录的方法** param …

数仓基础(七):离线与实时数仓区别和建设思路

文章目录 离线与实时数仓区别和建设思路 一、离线数仓与实时数仓区别 二、实时数仓建设思路 离线与实时数仓区别和建设思路 一、离线数仓与实时数仓区别 离线数据与实时数仓区别如下&#xff1a; 对比方面 离线数仓 实时数仓 架构选择 传统大数据架构 Kappa架构 建设…

数据结构(Java)实现:栈和队列

文章目录 1. 栈的模拟实现1.1 普通栈的模拟实现1.2 泛型栈的模拟实现 2. 栈的介绍3. 栈的使用4. 栈的应用场景4.1 改变元素的序列4.2 将递归转换为循环4.3 使用栈解题 5. 栈的链表实现6. 队列概念7. 队列的使用8. 模拟队列的实现8.1 链式队列8.2 顺序队列 9. 双端队列 1. 栈的模…

Python编码系列—Python中的安全密码存储与验证:实战指南

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

livox MID-360调试(解决ip设置问题)

整体的调试思路参考大疆Livox Mid360 使用指南_mid360中的imu内参-CSDN博客这篇博客。 但是在调试过程中出现了ip地址设置不对导致的报错&#xff1a; 1.livox viewer中看不到点云数据 2.livox SDK2 bind error。 joeyjoey:~/slam/Livox-SDK2/build/samples/livox_lidar_qu…

基于PLC的电热水器的水箱水位控制系统(论文+源码)

1总体方案设计 本设计基于PLC的电热水器的水箱水位控制系统的整体结构如图2.1所示&#xff0c;系统采用S7-1200 PLC为控制器&#xff0c;可以实现电热水器水箱中的水位、水温检测&#xff0c;并且用户可以设定目标水位和水温&#xff0c;在自动模式下&#xff0c;当水位低于低水…

mysql 8.0 的 建表 和八种 建表引擎实例

文章目录 MySQL 8.0 中&#xff0c;主要有以下四种常见的建表引擎一、InnoDB 引擎建表注意点建表知识点 二、MyISAM 引擎建表使用场景 三、Memory 引擎使用场景 四、Archive 引擎五、BLACKHOLE 引擎一、特点二、适用场景三、注意事项 六、MRG_MyISAM 引擎MRG_MyISAM 和 MyISAM …

uniapp组件中的emit声明触发事件

emit解析 在 uniapp 中&#xff0c;emit 主要用于组件间通信&#xff0c;特别是在子组件需要向父组件或者其他组件发送消息的时候。具体用途包括&#xff1a; 子传父数据&#xff1a;子组件通过 $emit 触发一个事件&#xff0c;并携带参数&#xff0c;父组件监听这个事件并对参…

Oracle 网络安全产品安全认证检索

自2023年7月1日起&#xff0c;国家网信办、工业和信息化部、公安部、国家认证认可监督管理委员会统一公布和更新网络关键设备和网络安全专用产品清单。列入《网络关键设备和网络安全专用产品目录》的网络安全专用产品应当按照《信息安全技术网络安全专用产品安全技术要求》等相…

笔记:应用Visual Studio Profiler分析CPU使用情况

一、目的&#xff1a;应用Visual Studio Profiler分析CPU使用情况 使用 Visual Studio Profiler 分析 CPU 使用情况可以帮助你识别性能瓶颈&#xff0c;优化代码&#xff0c;提高应用程序的响应速度。 二、实现 以下是如何使用 Visual Studio Profiler 分析 CPU 使用情况的详…