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

相关推荐
一个天蝎座 白勺 程序猿7 小时前
KingbaseES数据库归档重做日志文件管理:从配置到运维的实战指南
运维·数据库·oracle·kingbasees·金仓数据库
分布式存储与RustFS10 小时前
镜像仓库的层别堆本地盘:用 RustFS 给 Docker Registry 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
陈希12311 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
@兽血沸腾12 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
闲云自留地17 小时前
K8s 的记忆大脑!ETCD 集群部署、etcdctl 命令与备份恢复全通关
容器·kubernetes·etcd
讯捷蓝达17 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
爱和冰阔落20 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
lisanmengmeng20 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮21 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹21 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器