Docker 的使用

2023-09-15 15:51:17

一、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

更多推荐

27、Flink 的SQL之SELECT (SQL Hints 和 Joins)介绍及详细示例(2-2)

Flink系列文章1、Flink部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接13、Flink的tableapi与sql的基本概念、通用api介绍及入门示例14、Flink的tableapi与sql之数据类型:内置数据类型以及它们的属性15、Flink

安防视频/视频汇聚平台EasyCVR使用onvif探测添加设备通道详细步骤来啦!

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.2

基于SpringBoot的甘肃非物质文化网站设计与实现

目录前言一、技术栈二、系统功能介绍用户信息管理商品分类管理申请信息管理订单信息管理三、核心代码1、登录模块2、文件上传模块3、代码封装前言现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本甘肃非物质文化网站就是在这样的大环境下诞生,其可以帮助管理者在

数据分享|R语言分析上海空气质量指数数据:kmean聚类、层次聚类、时间序列分析:arima模型、指数平滑法...

全文链接:http://tecdat.cn/?p=30131最近我们被客户要求撰写关于上海空气质量指数的研究报告。本文向大家介绍R语言对上海PM2.5等空气质量数据(查看文末了解数据免费获取方式)间的相关分析和预测分析,主要内容包括其使用实例,具有一定的参考价值,需要的朋友可以参考一下(点击文末“阅读原文”获取完整代码

K8s的网络——Underlay和Overlay网络

0.基础知识1)网络7层基础知识在网络7层协议基础里,第一层物理链路;第二层是数据链路层,在第一层的基础上引入MAC地址做数据转发。MAC地址在局域网内具有唯一性,主机A发送数据时,会向局域网内进行广播,每个主机根据mac地址自动匹配。网桥、交换机都是工作在数据链路层。由MAC地址构建的网络可以叫以太网。在网络中接入设

K8S入门前奏之VMware虚拟机网络配置

为了能在本地搭建K8S的运行服务器,在个人电脑上安装了虚拟机VMware16版本,并且在阿里巴巴开源镜像站下载了CentOS-7操作系统:阿里巴巴开源镜像站做完一些列准备工作后,在虚拟机安装完CentOS-7操作系统后,需要对VMware虚拟机网络进行配置,让其满足我们搭建K8S的要求。查看物理机ip信息命令:ipco

HTML中的<canvas>元素

聚沙成塔·每天进步一点点⭐专栏简介⭐canvas元素⭐用途⭐示例⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学

电脑怎么取消磁盘分区?

有时候,我们的电脑会出现一个磁盘爆满,但另一个却空着,这时我们可以通过取消磁盘分区来进行调整,那么,这该怎么操作呢?下面我们就来了解一下。磁盘管理取消磁盘分区磁盘管理是Windows自带的磁盘管理工具,它位于"计算机管理"控制台中。它包括查错程序和磁盘碎片整理程序以及磁盘整理程序。它可以帮助你完成扩大分区、压缩分区、删

Redis核心原理与应用实操

一、基本概念1、noSQL关系数据库MySQL的IO操作慢!noSQL为内存操作快、高并发。2、Redis基本概念存储形式:K-V键值对优点:对数据高并发读写(直接在内存中操作)单线程操作(所谓的多线程只是多个命令队伍排队CPU处理时仍然是单线程)Redis-----提供缓存服务!!!!Redis定位是缓存,提高数据读

使用JavaScript实现图片的自动轮播

介绍在网站开发中,经常会遇到需要展示多张图片并自动切换的需求,这就需要使用JavaScript来实现图片的自动轮播功能。本文将通过一个简单的例子,演示如何用JavaScript实现图片的自动轮播。实现步骤:HTML结构:首先,创建一个包含图片列表的HTML结构,每个图片都用一个标签表示,并设置一个唯一的id,以便后续操

云原生:构建现代化应用的新篇章

云原生:构建现代化应用的新篇章随着技术的快速发展,我们进入了一个全新的数字化时代。在这个时代,云原生作为一种新兴的技术趋势,正逐渐改变着我们对构建现代化应用的认识。云原生是容器、微服务、DevOps、持续交付等技术的集合,它提供了一种在云环境中构建和运行应用的新方式。本文将深入探讨云原生的技术原理、核心优势以及应用场景

热文推荐