百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

Docker

ztj100 2025-02-06 17:13 16 浏览 0 评论

什么是docker

Docker 是一种开源的平台,帮助你轻松创建、部署和管理应用程序。它利用“容器”技术,使得应用程序能够在任何环境中运行,无论是开发者的个人电脑,还是生产环境中的服务器。

通俗解释:

假设你有一个应用程序,它需要特定的操作系统、特定的配置和一系列的依赖库。通常情况下,要在不同的电脑或服务器上运行这个应用程序,可能会遇到各种各样的兼容性问题,比如某个库的版本不对,操作系统设置不一样等等。Docker 通过将应用程序及其所有依赖打包到一个“容器”中,解决了这些问题。这个容器包含了应用程序运行所需的一切,就像一个迷你操作系统。这意味着无论在开发者的电脑上,还是在生产服务器上,只要有 Docker 环境,这个容器都能运行,而且表现一致。

Docker运行原理图

docker save -o xxx.tar 镜像名称 -- 保存镜像
docker load -i xxx.tar --加载镜像

1.安装

1.1 .虚拟机中安装docker

官网:https://docs.docker.com/engine/install/centos/

--1).安装 yum-utils 工具包。yum-utils 包含了一些用于管理 yum 仓库和软件包的实用工具

sudo yum install -y yum-utils

-- 2).通过 yum-config-manager 工具添加 Docker 的 yum 仓库地址,以便能够从该仓库安装 Docker 相关的软件包。

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

-- 3).安装 Docker

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

提示: 最近国内docker的无发访问国外仓库. 解决办法是:配置国内的Docker仓库

# 删除已有的 Docker 仓库(如果有)
sudo rm -f /etc/yum.repos.d/docker-ce.repo
# 添加阿里云的 Docker 仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.2 docker启动命令

systemctl start docker --启动docker
systemctl enable docker --设置开机启动docker
systemctl stop docker --停止docker

2.docker 软件安装

2.1 docker镜像网站

Docker官方提供了一个专门管理、存储镜像的网站,并对外开放了镜像上传、下载的权利。Docker官方提供了一些基础镜像,然后各大软件公司又在基础镜像基础上,制作了自家软件的镜像,全部都存放在这个网站。这个网站就成了Docker镜像交流的社区:

https://hub.docker.com/

2.2使用docker安装mysql

在镜像网站搜索mysql

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

解读:

  • docker run -d :创建并运行一个容器,-d则是让容器以后台进程运行
  • --name`` mysql : 给容器起个名字叫mysql,你可以叫别的
  • -p 3306:3306 : 设置端口映射。容器是隔离环境,外界不可访问。但是可以将**宿主机端口映射容器内到端口**,当访问宿主机指定端口时,就是在访问容器内的端口了。容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的3306映射到容器内的3306端口
  • -``e`` TZ=Asia/Shanghai : 配置容器内进程运行时的一些参数格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码
  • mysql : 设置镜像名称,Docker会根据这个名字搜索并下载镜像(如果本机有该镜像则不在去镜像网站下载)格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号在未指定TAG的情况下,默认是最新版本,也就是mysql:latest
  • 连接测试:

2.3 安装nginx

docker pull nginx --从镜像网站拉取 nginx
docker run -d --name nginx -p 80:80 nginx -- 安装docker

测试访问:

3.数据卷

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

以nginx为例,如果想改变nginx.conf文件. 由于nginx.conf文件在nginx容器内部,我们无法改变,但是可以通过宿主机与容器进行映射,关系如下图:

3.1 具体操作如下


# 1.首先创建容器并指定数据卷,注意通过 -v 参数来指定数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
# 2.然后查看数据卷
docker volume ls
# 结果
DRIVER VOLUME NAME
local 29524ff09715d3688eae3f99803a2796558dbd00ca584a25a4bbc193ca82459f
local html
# 3.查看数据卷详情
docker volume inspect html
# 结果
[
{
"CreatedAt": "2024-05-17T19:57:08+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/html/_data",
"Name": "html",
"Options": null,
"Scope": "local"
}
]
# 4.查看/var/lib/docker/volumes/html/_data目录
ll /var/lib/docker/volumes/html/_data
# 可以看到与nginx的html目录内容一样,结果如下:
总用量 8
-rw-r--r--. 1 root root 497 12月 28 2021 50x.html
-rw-r--r--. 1 root root 615 12月 28 2021 index.html
# 5.进入该目录,并随意修改index.html内容
cd /var/lib/docker/volumes/html/_data
vi index.html
# 6.打开页面,查看效果
# 7.进入容器内部,查看/usr/share/nginx/html目录内的文件是否变化
docker exec -it nginx bash

4.网络

自定义网络

# 1.首先通过命令创建一个网络
docker network create mynetwork
# 2.然后查看网络
docker network ls
# 结果:
NETWORK ID NAME DRIVER SCOPE
639bc44d0a87 bridge bridge local
403f16ec62a2 mynetwork bridge local
0dc0f72a0fbb host host local
cd8d3e8df47b none null local
# 其中,除了mynetwork以外,其它都是默认的网络
# 3.让test和mysql都加入该网络,注意,在加入网络时可以通过--alias给容器起别名
# 这样该网络内的其它容器可以用别名互相访问!
# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名
docker network connect mynetwork mysql --alias db
# 3.2.db容器,也就是我们的java项目
docker network connect mynetwork test
# 4.进入test容器,尝试利用别名访问mysql
# 4.1.进入容器
docker exec -it test bash
# 4.2.用mysql别名访问
ping mysql
# 结果
PING mysql (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.mynetwork (172.18.0.2): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from mysql.mynetwork (172.18.0.2): icmp_seq=2 ttl=64 time=0.056 ms
# 4.3.用容器名访问
ping db
# 结果:
PING db (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.mynetwork (172.18.0.2): icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from mysql.mynetwork (172.18.0.2): icmp_seq=2 ttl=64 time=0.054 ms

5.自定义镜像

5.1 准备jar

5.2 准备dockerfile

dockerfile是以上jar需要的环境信息

# 基础镜像
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 test.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

5.3 上传到服务器

5.4 构建镜像

进入以上目录,执行命令

docker build -t test:1.0 .

注意,后面有个点 .

5.5 启动镜像

docker run -d --name test -p 9999:9999 test:1.0

5.6 访问

6.Compose

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

案例,比如要同时部署 mysql nginx redis 和具体的项目.我们只需要配置docker-compose.yml

version: "3.8"
services:
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks:
- mynet
month8:
build: 
context: .
dockerfile: Dockerfile
container_name: month8
ports:
- "8030:8030"
networks:
- mynet
depends_on:
- mysql
nginx:
image: nginx
container_name: nginx
ports:
- "80:80"
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/html:/usr/share/nginx/html"
depends_on:
- month8
networks:
- mynet
- redis
redis:
image: redis
ports:
- "6379:6379"
volumes:
- ./config:/opt/config
- ./data:/data
command: redis-server /opt/config/redis.conf
networks:
- mynet
networks:
mynet:
name: month8

相关推荐

其实TensorFlow真的很水无非就这30篇熬夜练

好的!以下是TensorFlow需要掌握的核心内容,用列表形式呈现,简洁清晰(含表情符号,<300字):1.基础概念与环境TensorFlow架构(计算图、会话->EagerE...

交叉验证和超参数调整:如何优化你的机器学习模型

准确预测Fitbit的睡眠得分在本文的前两部分中,我获取了Fitbit的睡眠数据并对其进行预处理,将这些数据分为训练集、验证集和测试集,除此之外,我还训练了三种不同的机器学习模型并比较了它们的性能。在...

机器学习交叉验证全指南:原理、类型与实战技巧

机器学习模型常常需要大量数据,但它们如何与实时新数据协同工作也同样关键。交叉验证是一种通过将数据集分成若干部分、在部分数据上训练模型、在其余数据上测试模型的方法,用来检验模型的表现。这有助于发现过拟合...

深度学习中的类别激活热图可视化

作者:ValentinaAlto编译:ronghuaiyang导读使用Keras实现图像分类中的激活热图的可视化,帮助更有针对性...

超强,必会的机器学习评估指标

大侠幸会,在下全网同名[算法金]0基础转AI上岸,多个算法赛Top[日更万日,让更多人享受智能乐趣]构建机器学习模型的关键步骤是检查其性能,这是通过使用验证指标来完成的。选择正确的验证指...

机器学习入门教程-第六课:监督学习与非监督学习

1.回顾与引入上节课我们谈到了机器学习的一些实战技巧,比如如何处理数据、选择模型以及调整参数。今天,我们将更深入地探讨机器学习的两大类:监督学习和非监督学习。2.监督学习监督学习就像是有老师的教学...

Python教程(三十八):机器学习基础

...

Python 模型部署不用愁!容器化实战,5 分钟搞定环境配置

你是不是也遇到过这种糟心事:花了好几天训练出的Python模型,在自己电脑上跑得顺顺当当,一放到服务器就各种报错。要么是Python版本不对,要么是依赖库冲突,折腾半天还是用不了。别再喊“我...

超全面讲透一个算法模型,高斯核!!

...

神经网络与传统统计方法的简单对比

传统的统计方法如...

AI 基础知识从0.1到0.2——用“房价预测”入门机器学习全流程

...

自回归滞后模型进行多变量时间序列预测

下图显示了关于不同类型葡萄酒销量的月度多元时间序列。每种葡萄酒类型都是时间序列中的一个变量。假设要预测其中一个变量。比如,sparklingwine。如何建立一个模型来进行预测呢?一种常见的方...

苹果AI策略:慢哲学——科技行业的“长期主义”试金石

苹果AI策略的深度原创分析,结合技术伦理、商业逻辑与行业博弈,揭示其“慢哲学”背后的战略智慧:一、反常之举:AI狂潮中的“逆行者”当科技巨头深陷AI军备竞赛,苹果的克制显得格格不入:功能延期:App...

时间序列预测全攻略,6大模型代码实操

如果你对数据分析感兴趣,希望学习更多的方法论,希望听听经验分享,欢迎移步宝藏公众号...

AI 基础知识从 0.4 到 0.5—— 计算机视觉之光 CNN

...

取消回复欢迎 发表评论: