当前操作基于ceontos

基于当前系统制作docker镜像

1: 通过tar 进行目录的备份

tar -cpvf ${target.tar} --directory=/ --exclude=proc --exclude=sys/kernel --exclude=dev --exclude=run /
  • 由于我的开发环境直接在root权限下安装搭建的, 所以 /sys下有些头文件是必须具备的,因此只将 sys/kernel 排外。
  • ${target.tar} 是你将要保存的目录的备份的名字 例如:
tar -cpvf ./base_dev_env_v0.1.tar --directory=/ --exclude=proc --exclude=sys/kernel --exclude=dev --exclude=run /

2: 导入镜像

docker import base_dev_env_v0.1.tar ${image_name}
如:
docker import base_dev_env_v0.1.tar baseos_mu 

3: 查看并运行镜像

docker images #查看镜像

#运行镜像
docker run -it ${image_name} /bin/bash

4: 删除该镜像

docker ps -a  #查到该容器ID, 例如:63f7a69h98b
docker rm 63f7a69h98b  #删掉容器, 否则在删除镜像时候会说该镜像正在被使用不能删除
docker rmi ${image_id} #删除镜像

docker保存修改后的镜像

上边已经做了一个镜像了,如果发现该镜像上有一些文件是垃圾文件,像删除净化镜像或者对镜像做一些修改并保存下来,可以这么做:

1: 启动镜像并修改

docker run -it baseos_mu /bin/bash

#删掉/home/username
[root@811db401b8c5 home]# rm -rf username

[root@811db401b8c5 home]# exit

注意这个id: 811db401b8c5, 是容器的id

2: 提交这个修改

docker commit 811db401b8c5 baseos_mu_v0.1

#再次查看发现多了一个新的镜像 baseos_mu_v0.1
[root@dev ~]# docker images
REPOSITORY                                                TAG                 IMAGE ID            CREATED             SIZE
baseos_mu_v0.1                                            latest              6665d7d0c13e        6 seconds ago       7.3GB
baseos_mu                                                 latest              bc3c8e1d7e49        15 hours ago        7.3GB

提交镜像到 hub.docker 自己的仓库

1: 登录账号

xxxxx为username

[root@dev ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: xxxxx
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

2: push

[root@dev ~]# docker push xxxxx/baseos_mu_v0.1
The push refers to repository [docker.io/xxxxx/baseos_mu_v0.1]
An image does not exist locally with the tag: xxxxx/baseos_mu_v0.1    #报错了,说没对该镜像打tag

#打tag
[root@dev ~]# docker tag baseos_mu_v0.1 xxxxx/baseos_mu_v0.1
[root@dev ~]# docker push xxxxx/baseos_mu_v0.1
The push refers to repository [docker.io/xxxxx/baseos_mu_v0.1]
a5f709e915d6: Pushed
7db404710954: Pushed
latest: digest: sha256:6ba6e502a760721c0b28a5c530fec32078692334358b66f863311df6137abf88 size: 739
[root@dev ~]#