Docker 的使用

news2024/11/15 8:52:09

一、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
	# 安装Docker
	sudo yum makecache fast
	sudo yum -y install docker-ce
	# 查看docker版本,出现输入的界面都按 y
	docker -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:7
	docker pull 镜像名称 (在hub.docker.com(官方docker镜像仓库)右侧有拉取镜像的地址)
	# 查看全部本地镜像
	docker images
	# 删除本地镜像1
	docker image rm 镜像id
	# 删除所有镜像
	docker rmi `docker images -q`
	# 修改镜像名称
	docker tag 镜像id 新镜像名称:版本

2.4、容器操作 

	# 进入容器  例:docker exec -it haoshun /bin/bash
	docker 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.04
	docker 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 mysql

tomcat部署
	# 拉取镜像
	docker pull tomcat:7-jre7
	# 创建容器  -p表示地址映射
	docker run -di --name=mytomcat -p 9000:8080 
	-v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7

Nginx部署
	# 拉取镜像
	docker pull nginx
	# 创建Nginx容器
	docker run -di --name=mynginx -p 80:80 nginx

Redis部署
	# 拉取镜像
	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:
      - .:/code
    depends_on:
      - redis
  redis:
    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

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

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

相关文章

汽车行业新闻稿怎么写?怎么写关于汽车的新闻稿?

撰写汽车行业新闻稿需要遵循一定的结构和要点,以确保内容准确、清晰,并能吸引读者的兴趣。以下是关于汽车的新闻稿的一些写作要点和建议,接下来伯乐网络传媒就来给大家分享一下: 标题醒目:新闻稿的标题应该简洁明了&am…

多视角姿势估计:TEMPO: Efficient Multi-View Pose Estimation, Tracking, and Forecasting

论文作者:Rohan Choudhury,Kris Kitani,Laszlo A. Jeni 作者单位:Carnegie Mellon University 论文链接:http://arxiv.org/abs/2309.07910v1 内容简介: 1)方向:多视角姿势估计模型 2)应用&…

$value$plusargs字符串参数传递后如何随机

文章目录 前言一、背景二、解决办法总结 前言 在仿真过程中,经常在命令行通过$value$plusargs传递一个字符串到环境中,去选择不同的sequence,但是,有些时候需要随机选择其中某几个seq,而只有整数和枚举类型可以随机&a…

Ubuntu20.04安装Nvidia显卡驱动、CUDA11.3、CUDNN、TensorRT、Anaconda、ROS/ROS2

1.更换国内源 打开终端,输入指令: wget http://fishros.com/install -O fishros && . fishros 选择【5】更换系统源,后面还有一个要输入的选项,选择【0】退出,就会自动换源。 2.安装NVIDIA驱动 这一步最痛心…

腾讯mini项目-【指标监控服务重构】2023-08-03

今日已办 a,b两组的trace放到一个分支里 可以看到先前的没看到的 profile trace 的耗时,是由于时间跨度较长,没有滑动到 trace 末尾 明日待办 组长会议汇报项目进度和问题

我跟面试官说MySQL单表数据量不要超过两千万,面试官不信

👉导读 作为一个合格的 DBA,在遇到线上单表数据量超过千万级别的时候,往往会建议用户通过分表来缩减单表数据量,当用户问为什么单表数据量不能超过千万时,DBA 往往会说:单表数据量超过千万,会影…

搜好货API接口解析,实现获得搜好货商品详情

要解析搜好货API接口并实现获取搜好货商品详情,你需要按照以下步骤进行操作: 了解搜好货开放平台:访问搜好货开放平台官网,找到API接口相关的开发者文档、指南等信息。注册开发者账号:在搜好货开放平台上注册一个开发…

C#开发的OpenRA游戏之调试菜单2

C#开发的OpenRA游戏之调试菜单2 前面已经分析了怎么样通过选项参数来打开这个调试界面,当创建游戏之后,从游戏里选择参数按钮,就会弹出下面的界面,如果没有选择调试参数是没有Debug这一页选项卡: 上面调试的选项是非常有用的,否则不能快速地测试游戏,不能快速地开发新的…

列表页面新增 字段查询 ,点击查询后,前端页面和后端控制台 出现红色报错信息,查询数据失败。

项目场景&#xff1a; 项目场景简述&#xff1a; 列表页面新增 字段查询 &#xff0c;点击查询后&#xff0c;前端页面和后端控制台 出现红色报错信息&#xff0c;查询数据失败。 问题描述 问题描述&#xff1a; <el-select v-model"dataForm.engineerId" clea…

类和对象(4)

文章目录 1. C/C内存分布2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free3.C内存管理方式new/delete3.1 new/delete操作内置类型3.2 new/delete操作自定义类型 4. operator new和operator delete函数&#xff08;重点&#xff09;4.1底层原理 5.malloc/free…

24届双非本科找工作到底有多难

记录一下自己的找工作过程&#xff0c;今天笔试失败感觉整个人都颓废了(那家公司真的是我的目标情司&#xff0c;呜呜呜&#xff0c;感觉我是废物)。 再加上不考虑出省&#xff0c;感觉找工作太难了 介绍一下自己情况&#xff1a;三个省奖&#xff08;开发类的&#xff0c;负责…

性能测试模型-业务模型、策略模型、数据模型

针对性能测试具体方案的设计进行抽象和总结,将其归纳为6个性能测试模型。 业务模型 业务模型是一组功能点或接口的集合及其占比情况,用于合理地模拟生产上真实的业务发生场景 在实施范围上,业务模型为本项目明确实施范围,梳理涉及的业务系统及其完整链路等 在实施结果价值…

提示词加神秘咒语让大模型更加聪明

谷歌团队研究发现&#xff0c;提示词加上神秘咒语深呼吸(take a deep breath&#xff09;结合大家已经熟悉的“一步一步地想”&#xff08;Let’s think step by step&#xff09;&#xff0c;大模型在数据集上的成绩就提升了12%。而且这个最有效的提示词&#xff0c;是AI自己找…

bug总结问题集和知识点集(一)

目录 一 bug问题集1. 端口被占用 二 oracle1. oracle查看版本怎么操作2. oracle数据库&#xff1a;参数个数无效![在这里插入图片描述](https://img-blog.csdnimg.cn/6a2eebc164f9406c81525371893bbd11.png)3. ORACLE数据库如何完整卸载? 三 mybatis1. mybatis用注解如何实现模…

算法|图论 6 并查集

并查集基本模板&#xff1a; int n 10; vector UFSets(n,0);//若将初值全设置为-1&#xff0c;那就不用再有初始化操作了。//初始化 void Initial(vector<int> S[]){for(int i0;i<n;i){S[i] -1;} }//查操作 int Find(vector<int> &S,int x){int root x;…

【红包雨压测环境】

文章目录 红包雨压测环境并发预估积分与权重对于新用户&#xff0c;活跃度占比为70%&#xff0c;贡献度占比为30%。活跃度权重分配&#xff1a;贡献度权重分配&#xff1a; 对于高质量作品的作者&#xff0c;活跃度占比为30%&#xff0c;贡献度占比为70%。活跃度指标权重&#…

杭州企业型通配符SSL数字证书

通配符SSL数字证书是众多数字证书产品中比较特殊的一款产品&#xff0c;在互联网安全领域&#xff0c;SSL数字证书是保障网站安全性的一种重要手段。而通配符SSL数字证书&#xff0c;更是其中的一种特殊类型&#xff0c;它允许用户对多个域名进行保护&#xff0c;只需一张证书即…

C++--简单实现定长内存池

1.什么是定长内存池 在C/C中&#xff0c;动态申请内存都是通过malloc来申请的&#xff0c;但是实际上不是是直接从堆上直接申请的内存&#xff0c;而是通过malloc动态申请一大块内存&#xff0c;malloc就相当于一块内存池&#xff0c;然后分给程序使用&#xff0c;如果申请的内…

网络安全进阶学习第十六课——业务逻辑漏洞介绍

文章目录 一、什么是业务逻辑二、业务逻辑漏洞的成因三、逻辑漏洞的重要性四、业务逻辑漏洞分类五、业务逻辑漏洞——业务授权安全1、未授权访问2、越权访问1) 平行越权&#xff08;水平越权是指相同权限的不同用户可以互相访问&#xff09;2) 垂直越权&#xff08;垂直越权是指…

企业架构LNMP学习笔记47

企业架构队列缓存中间件分布式redis&#xff1a; 一直想学习下这块的。今天总算学到了&#xff0c;好好把redis的这块内容理解下。 1&#xff09;能够描述Redis作用及其业务适用场景 &#xff1b; 2&#xff09;能够安装配置启动Redis&#xff1b; 3&#xff09;能够使用命令…