首页 > 其他分享 >docker和虚拟化、docker安装和配置、镜像操作、容器操作、应用部署

docker和虚拟化、docker安装和配置、镜像操作、容器操作、应用部署

时间:2023-11-24 19:12:17浏览次数:34  
标签:容器 宿主机 虚拟化 mysql --- 操作 镜像 docker

docker和虚拟化

## 什么是虚拟化
 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破【实体结构间的不可切割的障碍】,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件  对资源充分利用

虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。


# 什么是Docker
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 [GitHub](https://github.com/docker/docker) 上进行维护

# 就是虚拟化的一种,更轻量级
    如果使用虚拟机---》一台机器--》最多能运行 数量比较少的虚拟机
    如果使用docker--》一台机器---》可以运行出成千上百台docker容器
    
    
# 容器与虚拟机比较

 docker安装和配置

# mac
# win
# linux:使用广泛  centos上的安装
    -买一台云机器
    -使用虚拟机




#### 安装步骤:
# yum remove docker docker-common  docker-selinux docker-engine
# rm -rf /var/lib/docker

sudo yum update

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sudo yum install docker-ce

docker -v


## 启动docker
systemctl start docker
systemctl stop docker 
systemctl status docker 

docker中的一些概念

# docker 是一个cs架构软件
    c端:客户端
    s端:服务端

# 镜像(Images):一堆文件==》当成虚拟机上有个iso文件,操作系统的文件【centos7.iso,windows10.iso】
    镜像哪里来?目前是远程仓库拉取的

# 容器(containers)
    镜像运行==》得到容器==》以后就把容器当成一个可以使用的操作系统即可
    一个镜像可以运行得到很多容器
# 远程仓库(Registry)
    放着一个个镜像==》一堆文件


# 镜像和容器的关系
    跟 类 和 对象
    一个类,可以产生很多对象,每个对象是一个独立个体

 国内源(不配置也行,只是会从国外仓库下载,会慢点)

# 远程仓库在国外[python 下第三方模块:pypi上---》配置国内镜像站]
# 使用国内源,下载镜像时,速度会快---》阿里云
# 参照阿里云提供的笔记做:https://cr.console.aliyun.com/cn-shanghai/instances/mirrors


sudo mkdir -p /etc/docker # 如果有,就不需要创建了
vim /etc/docker/daemon.json 
# 加入
{
  "registry-mirrors": ["https://x1566319.mirror.aliyuncs.com"]
}
# 保存退出
sudo systemctl daemon-reload # 重新加载docker配置
sudo systemctl restart docker# 重启docker
# 国外docker 仓库:
https://hub.docker.com/
    
    
# 搜索想要找的镜像,找到固定版本

# 搜到后--》下载到本地
docker pull centos:centos7

镜像操作

# 1 查找镜像
    从https://hub.docker.com/直接搜
    使用命令:docker search 名字  # 基本不用

# 2 下载镜像
    docker pull 镜像名:版本号    # 官方有的才能下下来,没有的找不到
    docker pull 镜像名    # 如果不写版本号,下最新
    
    docker pull mysql:5.7
    docker pull redis

# 3 查看本地镜像
docker images  # 等同于 docker image ls

镜像名字          镜像标签        镜像id,以后通过id操作
REPOSITORY   TAG           IMAGE ID            CREATED       SIZE
centos           centos7       eeb6ee3f44bd        2 years ago   204MB


# 4 删除本地镜像
    docker rmi id号    # 等同于 docker image rm id号
    docker rmi id号 id号  # 一次删多个

    一次性把本地镜像全部删除
    docker images -q  # 查询本地所有镜像,只列出 id号
    
    docker rmi `docker images -q`


# 总结:
    镜像是一对文件===》有的叫redis,有的叫centos
    就把镜像当成---》一个操作系统内装了某个软件---》运行成容器--》就相当于这个操作系统上装了某个软件

 容器操作

# 镜像是一堆文件
# 容器是由镜像 运行得到的---》运行得到后---》你就把一个个的镜像【当成】一个个虚拟机操作系统再运行即可

 

 基本操作

# 把镜像运行成容器,并且一个镜像,可以运行出多个容器


# 查看正在运行的容器
    docker ps
# 查看所有容器
    docker ps -a
# 查看最后一次运行的容器
     docker ps -l
    
# 启动停止的容器
    docker start id/名字

# 停止运行的容器
    docker stop 7d5e

# 停止所有在运行的容器
    docker stop `docker ps -q`
    
    
# 一次性删除所有容器
    docker rm `docker ps -a -q`
    
# 记住四条:
    docker ps
    docker ps -a
    docker start
    docker stop

run运行容器

#1 docker run 把镜像运行成容器
    -docker run 参数
        -i 表示运行容器
        -d 以守护式容器在后台运行,用这个参数创建出来的容器,命令行还在宿主机上,没有进入到容器内部
        -t 表示容器启动后会进入容器命令行。加入这参数后,容器创建就能登录进去。即分配一个伪终端。
        --name 指定容器名字,如果不指定,会随机一个名字
        -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
        -v 表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上
        
        
        
# 2 案例 -id
    docker run -id --name=centos centos:7  # 执行完,命令在宿主机上,可以通过命令查看正在运行的容器
        
# 3 案例  -it
docker run -it --name=centos centos:7 # 执行完,命令行在容器内,容器很干净,几乎啥软件都没有,可以exit退出到宿主机---》只要退出,容器就停了
    
# 4 创建一个python3.9容器---》不进入
    docker run -id --name=python python:3.9
        
        
# 5 启动一个centos容器并且进入,名字叫mycentos,在内部装个vim,然后退出


# 6 重点:
    如果创建容器并进入---》只要退出---》容器就停了
    容器要运行,必须有个前台进程在运行,并且是夯住(阻塞)的,否则容器就停了
    
# 7 进入到容器内部
    # 在容器内执行命令
    docker exec 容器名字/id  命令
    # 利用这个特性-->进入到容器内部
    docker exec -it 容器名字/id /bin/bash
    docker exec -it python sh
    # 退出,结束掉 /bin/bash
    exit

 -v目录映射

# 运行出一个 centos77 容器,不进入, 做目录映射
# 把宿主机的 /root/lqz文件夹  映射到 容器内部的 /lqz文件夹
# -v可以写多个,可以是文件或文件夹
docker run -id -v /root/lqz:/lqz --name=centos77 centos:7


容器内部修改文件---》会影响外部

外部修改文件---》影响内部



# 目录映射好处是,后期咱们部署django项目
    1 有个django容器,做好映射,代码放在宿主机上即可,以后更新了代码,只要重启容器,代码就是最新了
    2 运行mysql容器---》mysql配置文件放在宿主机上做好映射
        mysql容器---》表数据,放到容器中---》如果删了容器---》数据库全没了
        表数据,放在宿主机上---》把容器删除---》表数据还在----》再启动一个容器做好映射---》数据都还在

-p端口映射

# -p参数:端口映射  容器中启动一个mysql5.7 --》容器中的3306监听,宿主机3306没人监听,做端口映射后,宿主机的3306就被docker的这个容器监听了

# 启动的mysql的root密码是123456

# 启动mysql容器  -p 宿主机端口:容器端口
# 以后台守护进程运行mysql容器,mysql的root用户密码是123456,宿主机和容器做了端口映射
docker run -id --name=mysql -p 3307:3306  -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

#  netstat -nlp |grep 3307 查看本机80端口占用情况
yum install net-tools -y

# 以后访问宿主机80端口就等于访问容器的3306端口

 容器其他操作

# 启动容器
    docker start 容器id
# 停止容器
    docker stop 容器id

    
###mysql的容器底层的操作系统是 debian 装软件需要用 
apt-get update
apt-get install vim -y

# 文件拷贝(宿主机执行)
    # 容器的文件copy到宿主机上(不是在容器内执行)
    docker cp 容器名称:容器目录 需要拷贝的文件或目录
    docker cp  ae1759ad935:/lqz/xx.txt /root/xx.txt
    # 宿主机的文件copy到容器中
    docker cp 需要拷贝的文件或目录 容器名称:容器目录
    docker cp /root/yy.txt ae1759ad935:/lqz/yy.txt

        
        
        
# 查看容器IP地址    
    docker inspect 容器名称  # 查看容器的详细描述,很多
    docker inspect ae1759ad935 --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
    
    
# 在多个容器之间是可以ping通的(容器和宿主机也可以)
# centos:172.17.0.3
# mysql:172.17.0.2

    
# 删除容器(删除已停止的容器)
    docker rm 容器id  
    docker rm `docker ps -a -q`
    
    
    
# 无状态的服务(在容器中尽量运行无状态的服务)
    -mysql reids   有状态,运行过程中产生数据,保存,容器删除,数据就没了
    -uwsgi+django  无状态的服务
    
  
    

应用部署

MySQL部署

# dokcer 中部署mysql,可靠的,以后不需要在宿主机上装mysql


#1  没有做目录映射---》配置文件--》表数据都在容器中---》一旦删除--》所有都没了
docker run -di --name=mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7


# 2 做目录和端口映射

# 做目录映射:data文件,配置文件
# 创建文件夹
mkdir /mysql
mkdir /mysql/conf.d
mkdir /mysql/data/
vim /mysql/my.cnf
[client]
default-character-set=utf8
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000

docker run  -di -v /mysql/data/:/var/lib/mysql -v /mysql/conf.d:/etc/mysql/conf.d -v /mysql/my.cnf:/etc/mysql/my.cnf -p 3307:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7      
        
     
    
# 创建库,创建表,插入数据

# 关闭容器,删除容器,myslq的容器没了,但是数据在宿主机上放着
 docker stop mysql2
 docker rm mysql2
##docker rm mysql -f  容器之间删了

# 再运行起一个容器,做好目录映射,数据都回来了
docker run  -di -v /mysql/data/:/var/lib/mysql -v /mysql/conf.d:/etc/mysql/conf.d -v /mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 

redis部署

# 拉取redis镜像
docker pull redis
mkdir /root/data
vim /root/redis.conf

bind 0.0.0.0
daemonize NO
protected-mode yes
requirepass 123456



# 运行
docker run -id  -p 6379:6379 --name redis -v /root/redis.conf:/etc/redis/redis.conf -v /root/data:/data redis  redis-server /etc/redis/redis.conf
            
# 在容器运行时,可以自己定制运行命名
            
     
    
# 远程链接redis操作

nginx部署

# 拉取nginx镜像
docker pull nginx

# run起容器
# docker run -id --name nginx -p 80:80 nginx
    
# /usr/share/nginx/html
docker run -id --name nginx1 -p 8088:80 -v /root/html:/usr/share/nginx/html nginx
# 以后只需要修改宿主机的/root/html 路径,看到页面就是修改后的

 

标签:容器,宿主机,虚拟化,mysql,---,操作,镜像,docker
From: https://www.cnblogs.com/zfq132/p/17854557.html

相关文章

  • Mysql基础操作(命令行)
    一、背景docker安装mysql8,映射本地端口3306二、创建数据库createdatabasemyblogcharset=utf8; 三、选择数据库usemyblog;  四、查看所有表showtables;  五、查看表结构descmm_t_user;  showcolumnsfrommm_t_user;  六、向表......
  • docker namespace初解
    引用:https://www.bilibili.com/video/BV1qF411e77r/?spm_id_from=333.788&vd_source=e05f4a55dd5d8e27f74472aa7fd97ace1.Linuxnamespace机制: 2.dockernetwork机制:3.dockeroverlaynetwork: ......
  • 操作流程分享:HDMI输入SIL9293C配套NR-9 2AR-18的国产GOWIN开发板
     1.产品概述HDMI输入配套板是用于GOWINNR-9和2AR-18的开发板配套的HDMI输出板子。最大分辨率支持1920*1080P,60Hz刷新率,24位RGB色彩深度。主芯片是SIL9293C.2.操作流程1)断电,对接好开发板。保持引脚一致性。如下图所示,连接好显示器。NR-9在VIO2区,2AR......
  • 一文彻底看懂Python切片,Python切片理解与操作
    1.什么是切片切片是Python中一种用于操作序列类型(如列表、字符串和元组)的方法。它通过指定起始索引和结束索引来截取出序列的一部分,形成一个新的序列。切片是访问特定范围内的元素,就是一个Area。说个笑话:切片不是切片,而是切片,但是又是切片。大家理解下呢(末尾放出作者自己的理解......
  • 选择振弦采集仪:易操作、快速数据传输和耐用性是关键要素
    选择振弦采集仪:易操作、快速数据传输和耐用性是关键要素振弦采集仪是一种可以测量和记录振动、冲击、声音等信号的设备。它是目前工程、科研、医学、环保等领域中常见的一种测试设备。在选择振弦采集仪时,易操作、快速数据传输和耐用性是关键要素。 易操作是选择振弦采集仪的......
  • docker-compose 安装Sql Server2019
    前言:本文将介绍如何在docker环境下搭建mssqlserver2019,帮助读者了解和使用。下面我将从所需基础环境,docker的安装,及docker-compose文件创建的几个方面展开介绍。一.基础环境虚拟机:Ubuntu20.04获取并下载:https://ubuntu.com/download/desktop安装虚拟机可以参考(博主:奔......
  • docker相关小操作
    1.修改container的名称dockerrenamemysql_8mysql_8.0.27    把集装箱名称mysql_8 改成 mysql_8.0.27 2.修改镜像images的名称dockertag3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3bmysql:v8.0.27  3.docker到......
  • 一文掌握MySQL多表查询技巧:告别繁琐操作,轻松搞定数据查询!
    在数据库的世界里,我们经常需要处理各种各样的数据。有时候,我们需要从多个表中查询数据,这时候就需要用到MySQL的多表查询了。今天,就让我们一起来了解一下MySQL多表查询的魅力吧!一、表的关系简介现实生活中,实体与实体之间肯定是有关系的,比如:部门和员工,老师和学生等。在设计表的时......
  • Docker 常用命令 -- 容器(Container)篇
    1.查看容器dockerps列表正在运行的容器dockerps-a列表所有容器dockerps-q只列表容器的ID-aq是所有容器的ID2.运行容器dockerrun-it-d--name要取的别名镜像名:Tag/bin/bash-i以交互模式运行容器通常与-t一起用-t为容器重新分配一个伪终端......
  • docker
         ......