当前位置: 首页 > news >正文

Docker 的使用

一、Docker 的作用和优势

软件集装箱化平台,可让开发者构建应用程序时,将它与环境一起打包到一个容器中,发布应用到任意平台中。
能在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,
如:Tomcat运行在一个Docker,MySQL运行在另外一个Docker,两者可以运行在同一个服务器。

1.1、docker基本组成 

1.docker client 客户端 
docker客户端输入指令,驱动服务端执行对应操作。

2.docker daemon docker 守护进程 
Docker的守护进程,客户端向Daemon发送命令去执行Docker相关操作,得到结果再通过Daemon将结果返回。

3.docker images 镜像  
Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

4.docker container 容器  
镜像相当于Java中的类,容器就像实例化后的对象,一个镜像可以实例化多个容器,容器通过镜像启动。
镜像中的应用程序运行后形成的进程就是容器,是Docker会给容器进程做隔离,对外不可见。
Docker容器通过镜像启动,容器是Docker的执行单元,容器中可以运行客户的多个进程。

5.docker registry 镜像仓库  
Docker用仓库保存用户创建的镜像,仓库分共有和私有两种。
Docker公司自己提供了最大的公有仓库Docker Hub,可在Docker Hub上创建账户,保存分享自己创建的镜像。

1.2、Docker优势 

1.简化配置、打包软件、快速部署 
能将环境和配置放入代码然后部署,Docker配置能在各种环境中使用,将应用环境和底层环境解耦。
Docker通过创建进程的容器,不必重新启动操作系统,几秒内能关闭。

2.代码管道化管理 
对代码以流式pipeline管道化进行管理,从开发者的机器到生产环境机器这个流程中都能有效管理。
Docker提供了跨越异构环境以一致性的微环境,从开发到部署实现流畅发布。

3.应用隔离、网络建模、开发生产化、服务合并 
多个应用服务部署在多个Docker中相互隔离,
可在一台机器上启动数百个(甚至数千个)相互隔离的容器,对网络进行建模。
单机上最大程度模拟生产分布式部署的环境
Docker能合并多个服务,不多的操作系统内存占用,跨实例共享多个空闲的内存。

二、基本操作 

2.1、Linux安装Docker 

	# yum 包更新到最新sudo sudo yum update# 下载关于Docker的依赖环境sudo yum -y install yum-utils device-mapper-persistent-data lvm2# 设置镜像下载Docker的镜像源sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装Dockersudo yum makecache fastsudo yum -y install docker-ce# 查看docker版本,出现输入的界面都按 ydocker -v

2.2、Docker启动、停止 

	# 启动docker:systemctl start docker# 停止docker:systemctl stop docker# 重启docker:systemctl restart docker# 查看docker状态:systemctl status docker# 开机启动:systemctl enable docker# 设置开机自动启动systemctl enable docker# 测试docker run hello-world# 查看docker概要信息docker info# 查看docker帮助文档docker --help

2.3、镜像操作

	# 拉取镜像到本地  例:docker pull centos:7docker pull 镜像名称 (在hub.docker.com(官方docker镜像仓库)右侧有拉取镜像的地址)# 查看全部本地镜像docker images# 删除本地镜像1docker image rm 镜像id# 删除所有镜像docker rmi `docker images -q`# 修改镜像名称docker tag 镜像id 新镜像名称:版本

2.4、容器操作 

	# 进入容器  例:docker exec -it haoshun /bin/bashdocker exec 参数 容器id或者容器名 /bin/bash  # 退出容器,容器不会关闭# 查看所有容器docker ps –a# 查看正在运行的容器docker ps# 查看最后一次运行的容器docker ps –l# 查看停止的容器docker ps -f status=exited# 格式化查看docker ps -a --format "table {{.Image}}\t{{.ID}}\t{{.Ports}}\t{{.Names}}"   # 启动容器:docker start 容器名称(或者容器ID)# 停止容器:docker stop 容器名称(或者容器ID)# 删除容器:如果是运行状态则删除失败,需要停止容器才能删除docker rm 容器名称或者容器id# 交互式方式创建容器docker run -it --name=容器名称 镜像名称:标签 /bin/bash# 守护式方式创建容器:docker run -di --name=容器名称 镜像名称:标签# 登录守护式容器方式:docker exec -it 容器名称 (或者容器ID)  /bin/bash# 容器保存为镜像 容器ID 镜像名称:版本docker commit mynginx mynginx_i # 镜像备份 将镜像保存为tar 文件docker  save -o mynginx.tar mynginx_i # 镜像恢复与迁移 先删除掉mynginx_img镜像 然后执行此命令进行恢复docker load -i mynginx.tar# 配置数据卷 例:docker run -it --name=test2 -v /vagrant/test_data2:/home/test_data2:/home/test_data3 ubuntu:16.04docker run ... -v 宿主机目录(文件):容器内目录(文件)...# 退出当前容器exit

2.5、Docker私有仓库 

	# 拉取私有仓库镜像 registry镜像搭建属于我们自己的私有仓库docker pull registry# 从私有仓库拉取镜像 docker pull 私有仓库服务器ip:5000/centos:7# 启动私有仓库容器docker run -di --name=registry -p 5000:5000 registry

2.6、简单应用部署示例 

MySQL部署# 拉取mysql镜像docker pull centos/mysql-57-centos7# 创建容器docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysqltomcat部署# 拉取镜像docker pull tomcat:7-jre7# 创建容器  -p表示地址映射docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7Nginx部署# 拉取镜像docker pull nginx# 创建Nginx容器docker run -di --name=mynginx -p 80:80 nginxRedis部署# 拉取镜像docker pull redis# 创建容器docker run -di --name=myredis -p 6379:6379 redis

三、高级应用 

3.1、搭建主从 MySql

3.1.1、安装主从 Mysql 、修改配置文件

1.安装

安装主从 Mysql 、修改配置文件
# docker内部安装vim 
apt-get updateapt-get install vim # 下载8.0.19版本:
docker pull mysql:8.0.19
# 查看mysql镜像:
docker images## docker容器是相互隔离的,容器有独立IP,不同容器用相同的端口不会冲突
# 启动 Master 容器
docker run -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:8.0.19
# 启动 Slave 容器
docker run -p 3307:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:8.0.19# 查看 MySql 运行情况
docker ps -a

2.改配置文件 

# 进入到Master容器内部,使用容器ID或者名称均可:
docker exec -it 8b71301f25ed /bin/bash		 //8b71301f25ed为容器ID
docker exec -it mysql-master /bin/bash		 //mysql-master为容器名称# 切换到 /etc/mysql 目录下

# 编辑 master的 my.cnf文件
vim my.cnf [mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=master-bin
binlog-format=ROW     // 二级制日志格式,有三种 row,statement,mixed
binlog-do-db=数据库名  //同步的数据库名称,如果不配置,表示同步所有的库# 退出docker容器 重启  mysql-master
docker restart mysql-master# 编辑 slave 的 my.cnf文件
vim my.cnf[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=mysql-relay-bin  
read_only=1  ## 设置为只读,该项如果不设置,表示slave可读可写# 退出docker容器 重启  mysql-slave
docker restart mysql-slave

3.1.2、开启Master-Slave主从复制

1.查看Master的信息

# 进入Master库mysql客户端:查看Master状态,记住File、Position
show master status

# 容器id查询容器的IP进行查询:
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master

2.Slave 连接 Master

# 进入到Slave库myslq客户端,执行命令。
change master to master_host='172.17.0.2', master_user='root', master_password='12345678', master_port=3306, master_log_file='master-bin.000001', master_log_pos=3552, master_connect_retry=30;

master_host :Master库的地址,指的是容器的独立ip,可以通过
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 | 容器id查询容器的IP进行查询:
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒 

3.查看 Slave 连接情况 

# 启动slave
start slave# 查询slave
show slave status \G;

3.2、极简版搭建私有仓库 

##获取官方镜像
[root@server1 ~]# docker pull registry        
[root@server1 ~]# docker images registry##以该镜像为基础,启动容器
[root@server1 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry##上传镜像(需要先更改镜像名称,以指定上传的仓库)
[root@server1 ~]# docker tag webserver:latest localhost:5000/webservr:latest
[root@server1 ~]# docker push localhost:5000/webservr  ##上传##查看挂载的地址
[root@server1 ~]# tree /opt/registry##查看所挂载的镜像
[root@server1 ~]# curl localhost:5000/v2/_catalog## 向私有仓库上传、下载镜像
#1.docker tag重命名需要上传的镜像
docker tag IMAGE 服务器IP:端口/IMAGE_NAME# 2.docker push上传刚刚重命名的镜像
docker push 服务器IP:端口/IMAGE_NAME

3.3、数据卷的使用 

# docker run -it -v/宿主机绝对路径目录:/容器内目录镜像名
docker run -it -v /myDataVolume:/dataVolumeContriner centos:centos7.8.2003 / bin/bash

 docker inspect 容器ID,查看容器内部细节,可看到这两个目录绑定成功

 

3.4、docker-compose管理工具 

可避免手动编写一堆 docker run 命令,用一个配置文件来定义整个应用的服务。

3.4.1、安装

# 1.用 pip 安装
sudo pip install docker-compose
# 2.linux上进行命令下载安装
sudo curl -L "https://github.com/docker/compose/releases/download/{version}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose# 授权 Docker Compose 二进制文件:
sudo chmod +x /usr/local/bin/docker-compose# 验证 Docker Compose 是否正确安装:
docker-compose --version

3.4.2、使用

1.编写 Docker Compose 文件
version: '3'services:web:build: .ports:- "5000:5000"volumes:- .:/codedepends_on:- redisredis:image: "redis:alpine"使用命令
# 启动应用
docker-compose up
# 后台运行,则可以加上 -d 参数:
docker-compose up -d
# 查看 Docker Compose 应用的状态
docker-compose ps
# 停止应用
docker-compose down# 查看配置命令
# docker compose config# 构建并后台启动
# docker compose up -d# 将会停止UP命令启动的容器,并删除容器
# docker compose down #重新启动nginx容器
# docker compose restart # 启动已存在的容器命令
# docker compose start# 停止正在运行的容器命令
# docker compose stop#暂停容器
# docker compose pause               # 恢复容器
# docker compose unpause# 构建镜像
# docker compose bulid# 下载镜像
# docker compose pull# 删除容器
# docker compose rm # 查看运行的镜像
# docker compose ps# 查看进程
# docker compose top# 查看服务日志输出
# docker compose logs

相关文章:

Docker 的使用

一、Docker 的作用和优势 软件集装箱化平台,可让开发者构建应用程序时,将它与环境一起打包到一个容器中,发布应用到任意平台中。 能在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用, 如&am…...

【无公网IP内网穿透】Java支付宝沙箱环境支付,SDK接口远程调试

目录 1.测试环境 2.本地配置 3. 内网穿透 3.1 下载安装cpolar内网穿透 3.2 创建隧道 4. 测试公网访问 5. 配置固定二级子域名 5.1 保留一个二级子域名 5.2 配置二级子域名 6. 使用固定二级子域名进行访问 1.测试环境 MavenSpring bootJdk 1.8 2.本地配置 获取支付…...

axios 用formData的方式请求数据

需求:使用axios库用来做http数据传输。 问题:传递数据的时候不是直接通过json的方式来传输的数据,二是通过formData的方式 解决: axios 请求头设置,Content-Type "Content-Type": "application/x-w…...

Mapbox加载arcgis的底图

成果图 这种底图基本上都是按照raster来加载的,主要就是知道地址了,拼参数 具体参数请参考官网 https://developers.arcgis.com/rest/services-reference/enterprise/export-map.htm 源码 我的服务列表是这样的 http://XXXX:XXXX/arcgis/rest/services/…...

(20)线程安全问题:Lock,双锁问题,Monitor,死锁

一、Lock 1、用多线程给变量自增&#xff0c;10000个线程自增 List<Task> tasks new List<Task>();int AsyncNum 0;for (int i 0; i < 10000; i){tasks.Add(Task.Run(() >{AsyncNum;}));}Task.WaitAll(tasks.ToArray());Console.WriteLine($"AsyncNu…...

医院如何实现安全又稳定的跨网文件数据交换呢?

随着医疗信息化的发展&#xff0c;医院之间需要频繁地进行文件数据交换&#xff0c;以实现诊疗、科研、管理等方面的协同和共享。然而&#xff0c;由于医院网络环境的复杂性和敏感性&#xff0c;跨网文件数据交换面临着安全性和稳定性的双重挑战。如何在保证文件数据不被泄露、…...

关于老项目从JDK8升级到JDK17所需要注意的细节

文章目录 ☀️1.关于老项目从JDK8升级到JDK17所需要注意的细节&#x1f338;1.1.更新JDK&#x1f338;1.2.修改Idea中的JDK版本&#x1f338;1.3.关于修改过程中遇到的异常&#x1f338;1.4.IDEA工具栏操作Maven正常&#xff0c;但使用mvn命令运行就报错 ☀️1.关于老项目从JDK…...

《C++ primer》练习3.43-3.45: 打印二维数组的元素

文章目录 1. 使用范围for循环2. 使用普通for循环2.1 使用指针2.2 使用数组下标 类型别名的简化 本文来自于《C primer》的练习3.43-3.45&#xff0c;觉得多维数组的遍历有不同的实现方式&#xff0c;于是记录一下。写的可能没有按题目的顺序来。题目大概含义是定义了一个二维数…...

使用电力系统稳定器 (PSS) 和静态 VAR 补偿器 (SVC) 提高瞬态稳定性(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

开源项目-SeaTunnel-UI数据集成系统

哈喽,大家好,今天给大家带来一个开源项目-SeaTunnel-UI数据集成系统 系统主要有任务配置,任务实例,数据源,虚拟表,用户管理等功能 登录 数据源 mysql数据源配置参数说明 kafka参数配置 mysqlcdc配置参数说明 虚拟表...

百度SEO优化策略与经验分享(提升百度排名的8大步骤)

百度关键词优化策略介绍&#xff1a;蘑菇号https://www.mooogu.cn/ 百度搜索引擎优化&#xff0c;简称为百度SEO&#xff0c;是一种通过优化网站结构和内容&#xff0c;提高网站在百度搜索引擎中的排名&#xff0c;从而获得更多有价值的流量和销售机会的行业术语。百度SEO的核…...

【深度学习】- NLP系列文章之 1.文本表示以及mlp来处理分类问题

系列文章目录 1. 文本分类与词嵌入表示&#xff0c;mlp来处理分类问题 2. RNN、LSTM、GRU三种方式处理文本分类问题 3. 评论情绪分类 还是得开个坑&#xff0c;最近搞论文&#xff0c;使用lstm做的ssd的cache prefetching&#xff0c;意味着我不能再划水了。 文章目录 系列文章…...

力扣236 补9.14

做不来&#xff0c;我做中等题基本上都是没有思路&#xff0c;这里需要先遍历祖先节点&#xff0c;那必然用先序遍历&#xff0c;这题还是官方题解容易理解&#xff0c;第二火的题解反而把我弄得脑袋昏昏的。 class Solution { TreeNode ans; public TreeNode lowestCommonAnce…...

一文搞定Postman(菜鸟必看)

什么是Postman&#xff1f; Postman是一个可扩展的 API 测试工具&#xff0c;可以快速集成到 CI/CD 管道中。它于 2012 年作为 Abhinav Asthana 的一个副项目启动&#xff0c;旨在简化测试和开发中的 API 工作流程。API 代表应用程序编程接口&#xff0c;它允许软件应用程序通…...

位图+布隆过滤器+海量数据并查集(它们都是哈希的应用)

一)位图: 首先计算一下存储一下10亿个整形数据&#xff0c;需要多大内存呢&#xff0c;多少个G呢&#xff1f; 2^3010亿&#xff0c;10亿个字节 byte kb mb gb 100000000个字节/1024/1024/10241G 所以10亿个字节就是1G&#xff0c;所以40亿个字节就是4G&#xff0c;也就是10个整…...

MYSQL:Select语句顺序

SELECT子句及其顺序整理表格&#xff1a; 子句 说明是否必须使用SELECT 要返回的列或表达式是FROM 从中检索数据的表仅在从表选择数据使用WHERE 行级过滤否GROUP BY 分组说明仅在按组计算聚…...

Pytest系列-数据驱动@pytest.mark.parametrize(7)

简介 unittest 和 pytest参数化对比&#xff1a; pytest与unittest的一个重要区别就是参数化&#xff0c;unittest框架使用的第三方库ddt来参数化的 而pytest框架&#xff1a; 前置/后置处理函数fixture&#xff0c;它有个参数params专门与request结合使用来传递参数&#x…...

【Qt】QGroundControl入门2:下载、编译、错误处理、运行

1、源码下载 git clone https://github.com/mavlink/qgroundcontrol.git 2、下载依赖库 2.1 查看依赖库的github路径 cat .gitmodules[submodule "src/GPS/Drivers"]path = src/GPS/Driversurl = https://github.com/PX4/GpsDrivers.git [submodule "libs/m…...

【深度学习】Pytorch 系列教程(十):PyTorch数据结构:2、张量操作(Tensor Operations):(4)索引和切片详解

目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、张量&#xff08;Tensor&#xff09; 2、张量操作&#xff08;Tensor Operations&#xff09; 1. 数学运算 2. 统计计算 3. 张量变形 4. 索引和切片 使用索引访问单个元素 使用切片访问子集 使用索引和…...

2024字节跳动校招面试真题汇总及其解答(三)

6.jwt与cookie区别 JWT 和 Cookie 都是用于在客户端和服务器之间传输信息的常用方法。但是,它们之间存在一些关键差异。 JWT 是 JSON Web Token 的缩写,它是一种基于 JSON 的加密令牌。JWT 由三部分组成:Header、Payload 和 Signature。Header 包含令牌的类型、加密算法和…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...