首页 > 其他分享 >Docker中镜像文件的打包传输、容器导出镜像及虚拟机端口映射的实现

Docker中镜像文件的打包传输、容器导出镜像及虚拟机端口映射的实现

时间:2024-08-24 15:23:13浏览次数:5  
标签:ago centos 虚拟机 docker001 镜像文件 yum docker root 端口映射

内网私有仓库

1、Docker 私有仓库 是集中存放镜像的地⽅,⽽注册服务器 (Registry)是存放仓库的具体服务器。仓库可以被认为是⼀个具体 的项⽬或⽬录。

Docker 公共仓库:https://hub.docker.com

2、Docker 私有仓库的作⽤:

1)镜像上传到公共仓库不⽅便管理,且仅需要局域⽹⽤户之间传递 镜像的情况,需要使⽤私有仓库。

2)节省⽹络带宽,不需要都去公共仓库下载镜像,只需要从私有仓 库下载即可。

3)提供镜像资源利⽤,针对公司内部开发,不能联⽹情况下,有⼀ 些使⽤到的镜像可以推送到本地的私有仓库中,以供内部开发⼈ 员便捷下载使⽤。

3、搭建 Docker 私有仓库的⽅案

1)docker 官⽅提供的搭建私有仓库⼯具 registry。

2)harbor 私有仓库。

镜像文件的打包传输

[root@docker ~]# docker save --help

Options:

  -o, --output string   Write to a file,

                        instead of STDOUT

[root@docker ~]# docker save -o cetos.tar centos:latest

[root@docker ~]# ls

anaconda-ks.cfg  centos.tar  soft

# 查看现有的镜像

[root@docker ~]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE

centos       latest    5d0da3dc9764   2 years ago   231MB

# 如果有该镜像生成的容器正在使用,无法使用rmi移除镜像,删除容器时先退出up状态

[root@2315e0c58cf2 /]# read escape sequence

[root@docker ~]# docker ps -a

CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS          PORTS     NAMES

2315e0c58cf2   centos:latest   "/bin/bash"   41 minutes ago   Up 38 minutes

[root@docker ~]# docker rm c0

[root@docker ~]# docker rmi centos:latest

# 可以将tar包发给别人,也可以做备份

[root@docker ~]# docker load -help

[root@docker ~]# docker load -i centos.tar centos:latest  

Loaded image: centos:latest

容器导出镜像

1、从容器导出tar包

# 查看帮助文档

[root@docker ~]# docker export --help

Options:

  -o, --output string   Write to a file,

                        instead of STDOUT

# 使用指令

[root@docker ~]# docker export -o centos_yum.tar c0

# 查看新生成的tar包

[root@docker ~]# ls

anaconda-ks.cfg  centos_yum.tar  centos.tar  soft

               【容器包】   【镜像包】

2、从tar包导入镜像

# 查看帮助

[root@docker ~]# docker import --help

Usage:  docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

# 导入格式 docker import -m 说明内容 centos_yum.tar centos:yum

[root@docker ~]# docker import -m yum centos_yum.tar centos:yum

sha256:2bc7103237afec105becf835eff717f84e3e0bb137f57c2f4a5e8c3201a770e1

# 查看新镜像,此镜像不需要配置yum仓库

[root@docker ~]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED          SIZE

centos       yum       2bc7103237af   22 seconds ago   260MB

centos       latest    5d0da3dc9764   2 years ago      231MB

案例:

1、启动创建容器

# 删除原有的容器

[root@docker001 ~]# docker ps --all CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS                     PORTS     NAMES 0b24d60a94c5   centos:latest   "/bin/bash"   11 minutes ago   Exited (0) 11 minutes ago             c1 9fb6f46b3809   centos:latest   "/bin/bash"   12 minutes ago   Exited (0) 12 minutes ago             c0 [root@docker001 ~]# docker rm c0 c0

[root@docker001 ~]# docker rm c1 c1

[root@docker001 ~]# docker ps --all

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS   PORTS     NAMES

 # 创建并启动服务

[root@docker001 ~]# docker run -it --name=c0 centos:latest /bin/bash

2、配置yum源

#查看版本

[root@2dc8e93c2c86 /]# cat /etc/redhat-release

CentOS Linux release 8.4.2105

# 阿⾥云开发者社区

https://developer.aliyun.com/mirror/centos? spm=a2c6h.13651102.0.0.3e221b11NPSvpg

# 下载repo⽂件

rm -rf /etc/yum.repos.d/*

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault8.5.2111.repo

yum clean all && yum makecache

yum -y install epel-release

3、导出为镜像

# 查看帮助⽂件 ,找到导出的指令

[root@docker001 ~]# docker --help

#查看export帮助

[root@docker001 ~]# docker export --help

# 导出tar CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS                     PORTS     NAMES 2dc8e93c2c86   centos:latest   "/bin/bash"   17 minutes ago   Exited (0) 6 minutes ago             c0

[root@docker001 ~]# docker export --output centos_aliyun_yum.tar c0

[root@docker001 ~]# ls anaconda-ks.cfg centos_aliyun_yum.tar centos.tar frp initserver.sh

4、从tar包导入镜像

#查看import帮助

[root@docker001 ~]# docker --help

# 查看 import帮助

[root@docker001 ~]# docker import --help

# 导⼊为镜像

[root@docker001 ~]# docker import -m aliyun_yum centos_aliyun_yum.tar centos_yum:v0 sha256:191d9c84f461ccd06c249fbefad169fdbc6f22e60eba b410b428814b2e690d0c

[root@docker001 ~]# docker images REPOSITORY   TAG       IMAGE ID       CREATED         SIZE centos_yum   v0       191d9c84f461   48 seconds ago   260MB centos       latest   5d0da3dc9764   2 years ago     231MB

[root@docker001 ~]# docker history centos_yum:v0 IMAGE         CREATED         CREATED BY   SIZE     COMMENT 191d9c84f461   3 minutes ago               260MB     aliyun_yum

 ##练习:创建一个镜像,包含httpd服务名称 centos,版本为http

[root@docker ~]# docker ps -a

CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS                     PORTS     NAMES

80e2c487c9ed   centos:yum      "/bin/bash"   3 minutes ago   Exited (0) 3 minutes ago             c1

4f60d6296a26   centos:latest   "yum"         5 minutes ago   Exited (0) 5 minutes ago             c0

# c0容器时基于yum镜像的容器,这样省去了每次要配置yum

[root@docker ~]# docker export -o centos_httpd.tar c0  

[root@docker ~]# ls

anaconda-ks.cfg   centos_yum.tar  soft

centos_httpd.tar  cetos.tar

[root@docker ~]# docker import -m httpd centos_httpd.tar centos:http

sha256:bd158f51103991b4f4b46be0403db16542ce20b87aa0e96ab8485788d74ac0db

[root@docker ~]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED          SIZE

centos       http      bd158f511039   6 seconds ago    232MB

centos       yum       2bc7103237af   14 minutes ago   260MB

centos       latest    5d0da3dc9764   2 years ago      231MB

数据的持久化存储

背景:因为docker容器只是⼀个⼯具,不需要保存数据,不需要做持 久化,如果要做持久化,那么就需要保存到宿主机上,需要宿主机 和容器之间有⼀个共享卷。

格式:docker run -it --name c0 -v /source:/data centos:httpd /bin/bash

                                         【宿主机文件】【容器内部文件内】

案例:

# 在宿主机上创建目录/static,挂载到容器的/data/目录,不管在宿主机还是dokcer中创建文件,互相可见

[root@docker ~]# mkdir /static

[root@docker ~]# docker run -it --name c0 -v /static/:/data/ centos:http /bin/bash

[root@61ae74fcf69b /]# ls

bin   etc   lib64 mnt   root  srv  usr

data  home  lost+found opt   run   sys  var

dev   lib   media proc  sbin  tmp

[root@docker ~]# touch /static/xy.txt

[root@docker ~]# docker exec c0 ls /data/

xy.txt

[root@docker ~]# docker attach c0

[root@61ae74fcf69b /]# touch /data/mn.txt

[root@61ae74fcf69b /]# read escape sequence

[root@docker ~]# ls /static/

mn.txt  xy.txt

查看容器ip地址的方式

 1、进入容器,使用指令查看

[root@docker ~]# docker start c1

c1

[root@docker ~]# docker attach c1

[root@80e2c487c9ed /]# yum -y install net-tools  |  iproute

[root@80e2c487c9ed /]# ifconfig | ip a s

2、在容器外使用docker指令的inspect查看

[root@docker ~]# docker inspect --help

[root@docker ~]# docker inspect c1

[root@docker ~]# docker inspect centos:http

3、在外部调用指令

[root@docker ~]# docker exec c1 ifconfig

虚拟机端口映射

说明:

1、Docker允许通过外部访问容器或者容器之间互联的⽅式来提供⽹络服务。

2、容器启动之后,容器中可以运⾏⼀些⽹络应⽤,通过-p或-P参数来 指定端⼝映射。 /3、宿主机的⼀个端⼝只能映射到容器内部的某⼀个端⼝上,⽐如: 8080->80之后,就不能8080->81。

4、容器内部的某个端⼝可以被宿主机的多个端⼝映射,⽐如: 8080- >80,8090->80,8099->80。

5、-p ⼩写p表示docker会选择⼀个具体的宿主机端⼝映射到容器 内部开放的⽹络端⼝上。

     -P ⼤写P表示docker会随机选择⼀个宿主机端⼝映射到容器内 部开放的⽹络端⼝上

1、指定端口映射

格式:

docker run -it --name c0 -p80:80/tcp centos:httpd /bin/bash   //将容器中的80端⼝映射到宿主机(docker主机)80端⼝

# 查看容器状态:

# 查看使⽤的端⼝

[root@docker001 ~]# less /etc/services

注意:端⼝号,属于稀缺资源,随机给⼀个端⼝⼤于等于32768

案例:

[root@docker001 ~]# docker images

REPOSITORY     TAG       IMAGE ID       CREATED             SIZE centos_httpd   v0       fffc96d791d5   52 minutes ago     309MB centos_yum     v0       191d9c84f461   About an hour ago   260MB centos         latest   5d0da3dc9764   2 years ago         231MB

[root@docker001 ~]# docker run -it --name c0 -p 80:80/tcp centos_httpd:v0 /bin/bash

                                                           【容器内端口】:【宿主机端口】

# 启动httpd服务

[root@3265f84cd9c2 /]# httpd -k start     

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message

[root@3265f84cd9c2 /]# curl http://localhost:80

docker httpd test ----

# 在宿主机上是可以访问的

[root@docker001 ~]# curl http://172.17.0.1:80

docker httpd test ----

# 访问⾃⼰的80端⼝也可以访问httpd服务

[root@docker001 ~]# curl http://localhost:80

docker httpd test ----

# 远程主机也可以访问服务

2、随机端口映射,映射端⼝>=32768

格式:docker run -it --name c1 -p80 centos:httpd /bin/bash

案例:

[root@docker001 ~]# docker run -it --name c0 -p 80 centos_htd:v0 /bin/bash [root@1451df257a8e /]# [root@docker001 ~]#

[root@docker001 ~]# docker ps

CONTAINER ID   IMAGE             COMMAND       CREATED         STATUS         PORTS                                     NAMES 1451df257a8e   centos_httpd:v0   "/bin/bash"   18 seconds ago   Up 18 seconds   0.0.0.0:32770- >80/tcp, :::32770->80/tcp   c0

3、指定其他ip的端口映射,添加一块虚拟网卡,ip地址设置为192.168.2.51

格式:docker run -it --name c0 -p192.168.2.51 centos:httpd /bin/bash

192.168.71.51:32768

案例:

[root@docker001 ~]# ifconfig ens33:0 192.168.2.51 broadcast 192.168.2.51 netmask 255.255.255.255 up

[root@docker001 ~]# docker run -it --name c0 - p192.168.251::80 centos_httpd:v0 /bin/bash oot@e6649818d033 /]#

ctrl +p+q 

[root@docker001 ~]# docker ps

CONTAINER ID   IMAGE             COMMAND       CREATED             STATUS             PORTS                     NAMES e6649818d033   centos_httpd:v0   "/bin/bash"   About a minute ago   Up About a minute   192.168.2.51:32768->80/tcp   c0 

标签:ago,centos,虚拟机,docker001,镜像文件,yum,docker,root,端口映射
From: https://blog.csdn.net/m0_74614835/article/details/141474142

相关文章

  • SAP S4HANA 2023 FPS01 FAA虚拟机发布了
    SAPS4HANA2023FPS01FAA虚拟机发布了。系统不再需要修改虚拟机日期了,提供最高长达三年的许可,业务财务做账都是真实的时间!该虚拟机版本优点:新版的一键启动脚本,3分钟就能启动完成。内存加载80GB就可以启动所有服务。不需要修改虚拟机日期,完美支持业务操作和财务做账,月结年......
  • 虚拟机的搭建
    1.Download VMwareWorkstation 下载和安装关注微信公众号“软件安装大神”找到虚拟机VMware162.DownloadingKaliLinux 搜索官网:KaliLinux|PenetrationTestingandEthicalHackingLinuxDistribution  解压,然后在第一步虚拟机VMware16安装成功后打开第二部......
  • 第4篇 虚拟机搭建gitlab环境步骤
    内网环境下搭建自己的gitlab环境管理代码仓库1.介绍实际开发中,可能涉及到工作环境只能在内网环境下做开发,不能使用外网的git进行代码管理以及版本发布等等,本次主要讲解gilab在内网环境下的搭建流程;第1步安装VmwareWorkstationplayer免费版,安装流程可以网上查找该软件的安装......
  • 深入Java虚拟机JVM类加载学习笔记
    1.类加载过程----------以及风中叶老师在他的视频中给了我们一段程序,号称是世界上所有的Java程序员都会犯的错误加载---验证---准备---解析---初始化---使用---卸载诡异代码如下:packagetest01;classSingleton{ publicstaticSingletonsingleton=newSingleton();......
  • Docker无法运行java虚拟机报错There is insufficient memory for the Java Runtime
    镜像导入到docker后无法启动容器的问题,但是上传到别的服务器上面又可以正常启动容器,报错信息如下:#ThereisinsufficientmemoryfortheJavaRuntimeEnvironmenttocontinue.#CannotcreateGCthread.Outofsystemresources.#Cannotsavelogfile,dumptoscree......
  • VMware 虚拟机BIOS增加OEM版SLIC2.1
    VMware虚拟机BIOS增加OEM版SLIC2.1背景因安装的VMwareWin7虚拟机需激活,现需修改虚拟机BIOS,增加SLIC2.1支持,方便激活Win7指定你的bios文件路径在你的虚拟机目录下修改*.vmx配置文件,添加以下内容,以使用自定义BIOS路径:#BIOS.440.xxx.ROM是你的BIOS路径bios44......
  • 虚拟机与树莓派ping不通的解决方法
    文章目录一、查看是否为桥接模式二、查看电脑的网卡三、查看虚拟网络编辑器的网卡,虚拟机的网卡连接需要和电脑的网卡一致这样就可以ping通了一、查看是否为桥接模式点击ubuntu桌面右下角的点三个图标,然后点击设置2.选择桥接模式,再点击下方的确认二、查看电脑的......
  • 深入理解Java虚拟机(类加载机制)
    文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/类加载机制类加载机制的过程是什么呢?JVM把描述类的数据从Class文件中加载到内存中,并对其进行校验,解析,初始化......
  • 虚拟机(ubuntu22.04)安装Anaconda
    下载安装包前往https://repo.anaconda.com/archive/,下载对应的安装包,这里我们选择的是Anaconda3-2024.06-1-Linux-x86_64.sh这个安装脚本下载,大概1个G也可以直接在终端中输入wgethttps://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh这样也能直接下载......
  • 面试题:在Java中,JVM(Java虚拟机)的内存模型是如何设计的?请详细解释堆(Heap)、栈(Stack)、方法
    面试题:在Java中,JVM(Java虚拟机)的内存模型是如何设计的?请详细解释堆(Heap)、栈(Stack)、方法区(MethodArea)以及程序计数器(ProgramCounterRegister)的作用和它们之间的关系。更多答案在这里,手机或电脑浏览器就可以打开,面霸宝典【全拼音】.com这里可以优化简历,模拟面试,企业项......