您的位置:首页 > 游戏 > 游戏 > Docker中镜像文件的打包传输、容器导出镜像及虚拟机端口映射的实现

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

2024/11/17 4:42:48 来源:https://blog.csdn.net/m0_74614835/article/details/141474142  浏览:    关键词:Docker中镜像文件的打包传输、容器导出镜像及虚拟机端口映射的实现

内网私有仓库

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 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com