首页 > 其他分享 >镜像、容器的相关操作

镜像、容器的相关操作

时间:2023-08-25 23:13:10浏览次数:52  
标签:容器 run -- redis mysql 镜像 docker 操作

目录

一 镜像相关操作

# 1 查找镜像
-docker search 镜像名称  
-建议去hub.docker.com 直接搜,更直观
    
    
# 2 拉取镜像,指定标签 tag
docker pull centos:7
如果不指定标签,会下载最新
docker pull centos
docker pull centos:latest
        
        
        
# 3 查看本地镜像
docker images  # 等同于 docker image ls
    
    
# 4 删除镜像
docker rmi 镜像ID   # 可以同时删多个,多个空格隔开

    
# 5 删除所有镜像
# 查出所有镜像的id号     docker images -q
docker rmi `docker images -q`

二 容器相关操作

2.1 基本操作

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


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

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

# 停止所有在运行的容器
docker stop `docker ps -q`

2.2 run运行容器

# 把镜像运行成容器
docker run -di 镜像名:版本号 
# 如果没有该镜像,就会去注册中心先拉取镜像,再运行成容器
# -di 可以修改参数

# 运行容器(其实是两步:创建容器:create,运行容器:run)
	-如果容器没有创建,直接执行run,就会创建(拉取)并运行,所以你只需要会run就行了
    
    -run 的时候,有很多参数
    https://www.cnblogs.com/xiaobaiskill/p/12203575.html
        -i:表示运行容器
        -t:表示容器启动后会进入容器命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
        -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)
        
        
        --name:为创建的容器命名,如果不写,随机生成一个名字。写法:--name=名字,--name空格名字
        -e, --env:设置环境变量
 		# 重要参数  
        -v:表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
        -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
		

参数:-d和-t

docker run -id  # 不会进入到容器内部
docker run -it  # 会进入到容器内部

# 示例:
# 创建一个python3.9容器--->不进入
docker run -id --name python3 python:3.9


# 启动一个centos容器,名字叫mycentos ---> 进入
docker run -it --name=mycentos centos:7 
yum update
yum install vim -y  # 在容器中装了vim软件
exit  # 退出,容器停止了


'''重要'''
为什么退出,容器停止了?
docker run -it --name=mycentos centos:7 
# 如果是it进入容器--->容器会开启一个进程处我:/bin/bash   python  如果在容器中敲exit退出了这个进程,这个进程就结束了--->容器会停止--->容器要运行,必须有个前台进程在运行,并且是夯住(阻塞)的前台进程--->否则容器就停了

docker run -id cent centos:7  # 开启了一个容器,并执行了/bin/bash(bash的交互式的命令行) 命令
docker run -id --name=xxx centos:7 sleep 20  # 开启一个容器,并执行了sleep 20命令 ,容器一直阻塞着,所以一直开启,20秒后进程结束,容器就停止了

    
# 启动一个centos容器,名字叫mycentos,不进入
docker run -id --name=mycentos centos:7

# 启动容器
docker start mycentos



# 进入到容器内部(exec本质是让容器执行命令)
docker exec -it 容器id 命令
docker exec -it f82e8578b9b1 ls

docker exec -it  f82e8578b9b1 /bin/bash  # 进入到容器内部

# 退出
exit


# 不同发行版命令是不一样的
Debian Linux系统

apt-get 是一个用于下载和安装软件包的简易命令行界面
apt-get install vim
apt-get update

参数:-v目录映射

-v:表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

1 运行容器并做映射(宿主机-->有docker软件)
docker run -id --name=lqzcentos  -v /home/lqz/:/home/ centos:7
#docker run -id --name=lqzcentos  -v /home/lqz/aa.txt:/aa.txt centos:7
2 进入到容器内部
docker exec -it lqzcentos /bin/bash
3 到home路径下
cd /home
4 容器内部修改文件--->会影响外部

5 外部修改文件--->影响内部


# 好处是,后期咱们部署django项目
	有个django容器,做好映射,代码放在宿主机上即可,以后更新了代码,只要重启容器,代码就是最新了
    运行mysql容器--->mysql配置文件放在宿主机上做好映射
    mysql容器--->表数据,放到容器中--->如果删了容器--->数据库全没了
    表数据,放在宿主机上--->把容器删除--->表数据还在---->再启动一个容器做好映射--->数据都还在
    
    
    
    
# -v参数:目录映射
docker run -id --name=lqz -v /home/lqz:/lqz centos:7
以后无论在宿主机还是容器中修改当前目录下的文件,都会相互影响

参数:-p 端口映射

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

# 启动mysql容器,-e设置环境变量
docker run -id --name=mysql -p 3307:3306  -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

#  netstat -nlp |grep 3307 查看本机80端口占用情况
# 以后访问宿主机80端口就等于访问容器的3306端口

2.4 容器剩余的操作

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

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

# 查看容器IP地址    
	docker inspect 容器名称  # 查看容器的详细描述,很多
    docker inspect 7f412212f708 --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  无状态的服务

三 应用部署

3.1 mysql 部署

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


# 2 做目录和端口映射

# 做目录映射:data文件,配置文件,先创建宿主机中保存文件的位置
# 创建文件夹
mkdir /home/mysql
mkdir /home/mysql/conf.d  # 这个文件是配置文件
mkdir /home/mysql/data/  # 这个文件夹下放数据

vim /home/mysql/my.cnf  # 修改mysql的字符编码等相关设置

[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


# 3 运行 mysql:5.7 镜像成容器
docker run -id -v /home/mysql/data/:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 3307:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7     
##############################命令解析############################                   
docker run -id 
	-v /home/mysql/data/:/var/lib/mysql  # 映射之后就在容器中创建了一个mysql库
	-v /home/mysql/conf.d:/etc/mysql/conf.d 
	-v /home/mysql/my.cnf:/etc/mysql/my.cnf  # -v,设置了3个目录映射
	-p 3307:3306  # -p,设置端口映射
	--name mysql2  # --name,容器名字
    -e MYSQL_ROOT_PASSWORD=123456  # -e,设置了环境变量,一般会把mysql的账号和密码设置在这里,安全
    mysql:5.7   
################################################################# 


# 4 创建库,创建表,插入数据
可以使用Navicate远程连接刚刚创建的docker上面的mysql容器,ip是远程服务器的ip,port是你映射的端口3307,连接成功后,显示有4个库,这是mysql自带的基础库,存在在容器中的/var/lib/mysql/目录下。


然后可以使用Navicate创建一个库lqz,表abc,就是在容器/var/lib/mysql/下创建一个叫lqz的文件夹,在lqz下创建3个文件db.opt  abc.frm(表结构)  abc.ibd(表结构+数据)。因为映射的关系,宿主机的/home/mysql/data/下就有一个lqz的文件夹,lqz下也有3个文件


# 关闭容器,删除容器,myslq的容器没了,但是数据在宿主机上放着
docker stop mysql2
docker rm mysql2
# 再运行起一个容器,做好目录映射,数据都回来了
docker run  -di -v /home/mysql/data/:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 

# 这样就可以使用navicat远程连接远端服务器的3307端口,就是上面刚刚创建的mysql容器了

3.2 redis

# 1 拉取redis镜像
docker pull redis  # 拉取镜像

# 2 创建映射文件夹
mkdir /root/data  # 数据存储文件
vim /root/redis.conf  # redis的配置文件

bind 0.0.0.0
daemonize NO
protected-mode yes
requirepass 123456

# redis的配置信息介绍
    port:6379,指定访问redis服务端的端口。
    bind:127.0.0.1,指定redis绑定的主机地址。
    requirepass:指定redis的访问密码。
    daemonize :用来指定redis是否要用守护线程的方式启动,默认是no,非守护进程
    protected-mode参数是为了禁止外网访问redis,如果启用了,则只能够通过127.0.0.1访问,如果外网访问redis,会报出异常。
    
    timeout:指定客户端连接redis服务器时,当闲置的时间为多少(如300)时,关闭连接。
    loglevel:指定redis数据库的日志级别,常用的日志级别有debug、verbose、notice、warning,不进行修改的情况下默认的是notice;
    save <s><c>:指定redis数据库多长时间内(s)有多少次(c)更新操作时就把缓存中的数据同步到本地库,比如:save 600 2,指的是10分钟内有2次更新操作,就同步到本地库。
    dir :指定redis本地数据文件存放的目录。
    appendonly :指定redis是否开启日志记录功能。由于redis是利用什么save命令异步的方式更新数据到本地库,所以不开启日志记录功能,可能会导致在出现生产事故时,导致部分数据未更新到本地库。




# 运行
docker run -id  -p 6380:6379 --name redis -v /root/redis.conf:/etc/redis/redis.conf -v /root/data:/data redis  redis-server /etc/redis/redis.conf

##############################命令解析############################                   
docker run -id 
	-p 6380:6379  # -p,设置端口映射
	--name redis  # --name,容器名字
	-v /root/redis.conf:/etc/redis/redis.conf 
	-v /root/data:/data  # -v,设置了2个目录映射
	redis  # redis镜像
    redis-server /etc/redis/redis.conf  # 启动redis服务的命令,后台启动
################################################################# 


# 进入redis容器
docker exec -it redis bin/bash
redis-cli  # 进入redis客户端
auth 123456  # 填密码


# 远程链接redis操作

3.3 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
        
##############################命令解析############################         
docker run -id 
	--name nginx1  # --name,容器名字
	-p 8088:80  # -p,设置端口映射
	-v /root/html:/usr/share/nginx/html  # -v,设置目录映射,静态文件存放的路径
	nginx  # nginx镜像

################################################################# 

# 以后只需要修改宿主机的/root/html 路径,看到页面就是修改后的

四 迁移备份

# 镜像从哪来的?
	1 docker pull 拉的
    2 通过容器打包成镜像
    3 Dockerfile构建镜像

4.1 容器保存为镜像

-运行一个centos容器
docker run -id --name centos_vim centos:7
-进入容器中
docker exec -it a6e240 /bin/bash
-在容器中装vim
yum install vim -y  # -y 免交互,全都回复yes
    
-把容器做成镜像(centos+vim),在宿主机中打包
docker commit 容器名/id 镜像名/id
docker commit centos_vim centos_vim_image

-把centos_vim 容器删除
docker rm centos_vim
    
-基于新构建的镜像,运行成容器
docker run -id --name centos_vim centos_vim_image:latest
-进入到容器中,查看,软件都在
docker exec -it id号 /bin/bash

4.2 镜像备份和恢复

-保存镜像,-o(options) :输出到的文件。保存成tar的压缩文件
-docker save -o 压缩文件名称.tar 镜像名字
docker save -o centos_vim_image.tar centos_vim_image

-停止运行容器,删除容器,删除镜像
docker stop centos_vim
docker rm centos_vim
docker rmi centos_vim_image

-把备份的镜像恢复  # -i表示input,load表示加载
docker load -i centos_vim_image.tar

标签:容器,run,--,redis,mysql,镜像,docker,操作
From: https://www.cnblogs.com/zjyao/p/17658146.html

相关文章

  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • pytestx容器化执行引擎
    系统架构前端、后端、pytest均以Docker容器运行服务,单独的容器化执行引擎,项目环境隔离,即用即取,用完即齐,简单,高效。前端容器:页面交互,请求后端,展示HTML报告后端容器:接收前端请求,启动任务,构建镜像,触发运行pytest,挂载HTML报告pytest容器:拉取项目代码,指定目录执行,生成HTML报......
  • windows 桌面GUI自动化- 16.pywinauto 鼠标操作与滚动列表
    前言pywinauto操作鼠标,滚动查看鼠标点击操作单击鼠标左键,coords参数是点击的坐标位置frompywinautoimportmouse#单击鼠标左键mouse.click(coords=(100,100))鼠标右击mouse.right_click(coords=(100,200))鼠标双击mouse.double_click(coords=(100,200))鼠标......
  • 嵌入式人工智能:容器化库和应用程序 — 如何选择正确的选项
    人工智能(AI)彻底改变了企业的运营方式,从使用AI工具到采用“AIplus”思维方式来实现增长。嵌入式AI是这一转型的关键策略,它将AI无缝注入解决方案中,以增强智能、效率、直观性和自动化。部署嵌入式AI有两种方法:容器化库和应用程序。让我们探讨每种方法、其优点、用例以及......
  • 通过运行中的容器生成 Docker Compose 配置文件
    背景笔者之前有一次不小心删除了原始的docker-compose.yml文件,不过正在运行的Docker容器还在,找了许久,发现一个方法可以从这些容器中生成一个等效的DockerCompose配置文件。本文将介绍使用autocompose工具从正在运行的容器中反向生成docker-compose.yml文件。安装所需工......
  • K8S太庞大,这款PasteSpider绝对适合你!一款轻量级容器部署管理工具
    PasteSpider采用.netcore编写,运行于linux服务器的docker/podman里面,涉及的技术或者工具有podman/docker,registry,nginx,top,ssh,git,svn等。PasteSpider可以更好的为你执行服务的升级和维护工作。支持集群模式安装,也支持单例模式运行。PasteSpider可以部署.netJavaphpH5web......
  • 四、Docker Buildx 构建支持多系统架构的Docker镜像
    一、前言1.本文主要内容使用DockerBuldx构建支持AMD64、ARM、ARM64等架构的镜像并传送到DockerHub。2.环境支持安装Docker>=19.03该版本包含buildx,该功能仅适用于Dockerv19.03+版本。Linuxkernel>=4.8自该Linux内核版本binfmt_misc支持fix-binary(......
  • 操作系统
    庄园主奴隶找一个管家传达命令(这个管家就相当于我们少掉的内存)计算机的世界中叫做操作系统还有一种东西帮我们把内容保存到了硬盘操作系统帮我们解析了双击的指令什么是操作系统:将外部的指令发给CPU文件:操作系统干了什么:1.接受外部指令转化成0和12.翻译你和写的字符,把对......
  • vue3 监听容器滚动到底部
    在容器里面添加@scroll事件<template><div@scroll="scrolling"id="content"><pv-for="iinArray.from({length:30},(v,i)=>i)">{{i}}</p></div><divv-if="bottom"......