docker 镜像的制作

一、镜像

1.打包

root@localhost \~# systemctl start docker

root@localhost \~# docker save -o centos.tar centos:latest

root@localhost \~# ls

anaconda-ks.cfg centos.tar

2.传输

root@localhost \~# scp centos.tar root@192.168.1.100:/root

3.删除镜像

root@localhost \~# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos latest 5d0da3dc9764 2 years ago 231MB

root@localhost \~# docker start c0 //启动容器

c0

root@localhost \~# docker attach c0 //进入容器

root@207ca7680ecc /# exit

exit

root@localhost \~# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

root@localhost \~# docker ps --all //查看全部

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

207ca7680ecc centos:latest "/bin/bash" 20 hours ago Exited (0) 4 seconds ago c0

root@localhost \~# docker rmi centos:latest //这里看到没有删掉,因为有容器正在使用

Error response from daemon: conflict: unable to remove repository reference "centos:latest" (must force) - container 207ca7680ecc is using its referenced image 5d0da3dc9764

root@localhost \~# docker rm c0 //删除容器

c0

root@localhost \~# docker ps --all

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

root@localhost \~# docker rmi centos:latest //成功删除

Untagged: centos:latest

Untagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177

Deleted: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6

Deleted: sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59

root@localhost \~# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

4.导入到本地目录

root@localhost \~# docker load -i centos.tar

74ddd0ec08fa: Loading layer

[==================================================

>] 238.6MB/238.6MB

Loaded image: centos:latest

root@localhost \~# docker image ls //这里看到已经导入成功了

REPOSITORY TAG IMAGE ID CREATED SIZE

centos latest 5d0da3dc9764 2 years ago 231MB

二、容器导出镜像(导出一个有yum源的镜像)

1.有yum源的

root@localhost \~# docker run -it --name=c0 centos:latest /bin/bas //创建并启动服务

配置yum源

root@70f41b63c128 /# rm -rf /etc/yum.repos.d/*

root@70f41b63c128 /# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

root@70f41b63c128 /# yum clean all && yum makecache

root@70f41b63c128 /#yum -y install epel-release

ctrl+p+q退出

root@localhost \~# docker ps --all

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

70f41b63c128 centos:latest "/bin/bash" 8 minutes ago Up 8 minutes c0

root@localhost \~# docker export -o centos_yum.tar c0 //导出tar

root@localhost \~# ls

anaconda-ks.cfg centos.tar centos_yum.tar

root@localhost \~# docker import -m yum centos_yum.tar centos:yum //导入为镜像

sha256:9d43e5c9d7e41b8ed7ec287ad1cde2e56297808cab66618e25f25b6962b869fa

root@localhost \~# docker image ls //生成了新的镜像

REPOSITORY TAG IMAGE ID CREATED SIZE

centos yum 9d43e5c9d7e4 About a minute ago 260MB

centos latest 5d0da3dc9764 2 years ago 231MB

2.有httpd的

root@localhost \~# docker run -it --name c100 centos:yum /bin/bash

root@1fe0d666d8b9 /# yum -y install httpd

退出

root@localhost \~# docker export -o centos_httpd.tar c100

root@localhost \~# ls

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

root@localhost \~# docker import -m httpd centos_httpd.tar centos:httpd

root@localhost \~# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos httpd 55b1539d5cd6 About an hour ago 309MB

centos yum 9d43e5c9d7e4 4 hours ago 260MB

centos latest 5d0da3dc9764 2 years ago 231MB

三、IP地址

查看ip

1.进入容器,安装net-tools或iproute,直接使用命令ifconfig

root@6e9839616992 /# yum -y install net-tools

root@6e9839616992 /# ifconfig

root@6e9839616992 /# yum -y install iproute

root@6e9839616992 /# ip a s

2.在外面使用docker指令inspect

root@localhost \~# docker inspect c100

root@localhost \~# docker inspect centos:httpd

3.在外部调用指令

root@localhost \~# docker exec c100 ip a s

root@localhost \~# docker exec c100 ifconfig

4.使用exec创建一个文件

root@localhost \~# docker exec c100 touch /root/tdr.txt

root@localhost \~# docker attach c100

root@6e9839616992 /# ls /root

anaconda-ks.cfg anaconda-post.log original-ks.cfg tdr.txt

四、虚拟机端口映射

1.将容器中的80端口映射到宿主机的80端口

root@localhost \~# docker stop c100 c101 //停用容器

c100

c101

root@localhost \~# docker rm c100 c101 //删除容器

c100

c101

root@localhost \~# docker run -it --name c0 -p80:80/tcp centos:httpd /bin/bash //创建启动并映射端口,将容器中的80端口映射给宿主机的80端口,前面是宿主机的端口,后面是容器的端口

root@1fe0d666d8b9 /# httpd -k start

root@1fe0d666d8b9 /# echo "tdr" > /usr/share/httpd/noindex/index.html

ctrl+p+q退出

root@localhost \~# curl localhost //宿主机访问,没做端口映射之前就是可以访问的

tdr

去真机浏览器访问虚拟机IP:192.168.1.76 //没做端口映射之前不能访问,现在可以了

2.随机的为容器指定映射端口,映射端口>=32768

root@localhost \~# docker ps --all

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

1fe0d666d8b9 centos:httpd "/bin/bash" 19 minutes ago Up 19 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp c0

root@localhost \~# docker stop c0 //停止

c0

root@localhost \~# docker rm c0 //删除

c0

root@localhost \~# docker run -it --name c1 -p80 centos:httpd /bin/bash //这里只有80,是容器的80端口

root@dce0e427f4d6 /# httpd -k start

root@dce0e427f4d6 /# curl localhost

i am tdr

ctrl+p+q退出

root@localhost \~# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

dce0e427f4d6 centos:httpd "/bin/bash" About a minute ago Up About a minute 0.0.0.0:32768->80/tcp, :::32768->80/tcp c1

root@localhost \~# curl 192.168.1.76:32768

i am tdr

去真机浏览器访问虚拟机IP:192.168.1.76:32768

3.通过其他的IP地址的端口映射容器的端口

root@localhost \~# ifconfig ens33:0 192.168.1.77 broadcast 192.168.1.77 netmask 255.255.255.255 up

root@localhost \~# docker run -it --name c0 -p192.168.1.77::80 centos:httpd /bin/bash

root@1775f9c8e015 /# httpd -k start

root@1775f9c8e015 /# curl localhost

i am tdr

ctrl+p+q退出

root@localhost \~# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

1775f9c8e015 centos:httpd "/bin/bash" About a minute ago Up About a minute 192.168.1.77:32769->80/tcp c0

dce0e427f4d6 centos:httpd "/bin/bash" 17 minutes ago Up 17 minutes 0.0.0.0:32768->80/tcp, :::32768->80/tcp c1

root@localhost \~# curl 192.168.1.77:32769

i am tdr

去真机浏览器访问虚拟机IP:192.168.1.77:32769

相关推荐
qqxiaoxingxing2 小时前
HR重复性工作自动化落地指南:先梳理任务边界,再选工具
运维·自动化
王琦03184 小时前
持续集成持续交付企业示例
运维·ci/cd
Lsetea4 小时前
SSL证书指纹相同但文件哈希不同:PEM、DER与公钥摘要怎么比
运维·https·ssl证书·openssl·证书链
wtblszn4 小时前
废气处理余热回收设备远程运维系统方案
运维
乔旭伟4 小时前
Linux 服务器备份实战:一致性快照、日志归档与恢复演练
linux·运维·服务器
cpolar技术支持4 小时前
把配置发出去怕带出密钥?先把含凭据配置转成脱敏只读快照,用 cpolar 给同事核对差异
运维·python·内网穿透·cpolar·配置脱敏
我不会起名字3225 小时前
Redis 突然只能读不能写:MISCONF 报错的 3 类触发条件与 4 步恢复
运维·redis·持久化·排查·misconf
workflower5 小时前
Agentic AI 时代的企业ICT 基础设施运维
运维·人工智能·机器学习·重构·云计算·汽车
szxinmai主板定制专家5 小时前
ZYNQ 数据采集方案踩坑总结:电力强电磁干扰、工业现场多协议适配优化
运维·人工智能·fpga开发·机器人·zynq
猫咪很可爱5 小时前
Oracle RAC 启动失败排查:私网通信与内核参数优化实战
运维·数据库·oracle