创建镜像
2种方式
1、根据Dockerfile 【build】
2、基于运行的容器修改后 【commit】
镜像与容器关联
一、根据Dockerfile创建镜像
1、mkdir dockerfile/lib/centos7base/
创建目录
2、创建Dockerfile
vim Dockerfile
二、构建镜像
docker build -t python.
--tag, -t: 镜像的名字及标签
过程解析
我们看一下docker的编译过程
编译的第一步 会复用之前已经存在的python
重点是第二步
b48566f8cf2c其实是在python镜像的基础上生成的一个临时container的id
我们忽略其中的安装过程,跳到最后
最后根据临时生成的container来docker commit 生成镜像文件,最后删除临时container(对照博客开始的图示进行理解)
三、根据容器构建镜像
1、拉去一个镜像
docker run -it centos
(run =(pull start exec))
2、查看vim
3、安装一个vim
yum install vim
4、退出容器
exit
5、提交容器
现在根据运行的容器生成的镜像还在本地,下面需要提交推送到私服Harbor
四、 推送镜像到Harbor
启动Harbor
执行install.sh也可以启动。
可以看到docker-compose.yml可知使用了docker-compose,可以使用后台启动的方式来实现harbor的启动。
停止容器
docker-compose stop
后台启动容器
docker-compose up -d
登陆到Harbor
docker login -u 用户名 -p 密码
举例:
docker login --username=cheergoivan registry.cn-hangzhou.aliyuncs.com
可能的报错问题
[root@k8s-master ~]# docker login 192.168.59.128
Username: admin
Password:
Error response from daemon: Get https://192.168.59.128/v2/: dial tcp 192.168.59.128:443: connect: connection refused
这里说拒绝连接,因为我是用http部署的harbor,这里是https://进行访问的,所有出现报错然后解决这个问题其实就在/etc/docker/daemon.json文件下
添加对私有仓库的认证就可以登录了
[root@k8s-master ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"insecure-registries": ["192.168.59.128"]
}重启docker
[root@k8s-master ~]# systemctl restart docker登录,这里说你已经登陆了问题解决
[root@k8s-master ~]# docker login 192.168.59.128
Username: admin
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
访问http://192.168.59.128/登录Harbor
1、打标签
docker tag dkcentos:latest 192.168.59.128/dukang/dukcentos:latest
2、推送
docker push 192.168.59.128/dukang/dukcentos
到私服Harbor查看上传的镜像是否OK
注意点 这里可以看到:推送格式
3、删除本地镜像 (本地无用的镜像可以删除)
(保证该镜像对应的容器都stop)
docker rmi .........
无法删除镜像multiple repositories
原因:对于被删除的ImageID,这里存在多个REPOSITORY名字引用。通过镜像名字删除。
参考文章 https://blog.csdn.net/JackLiu16/article/details/80581709
4、拉取镜像
docker pull 192.168.59.128/dukang/dukcentos:latest
总结:
镜像创建
docker build 命令用于使用 Dockerfile 创建镜像。
使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。
docker build -t runoob/ubuntu:v1 .
docker commit :从容器创建一个新的镜像。
将容器a404c6c174a2 保存为新的镜像mymysql:v1 ,并添加提交人信息和说明信息。 docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
Harbor相关
1、登录
docker login http://xxxxx.com
2、登录私有hub创建项目
例如项目叫:abc-dev
2、给镜像打tag
docker tag 2e25d8496557 xxxxx.com/abc-dev/arc:1334
2e25d8496557:IMAGE ID,可以用docker images 查看
xxxxx.com:私有hub域名
abc-dev:项目名称
arc:镜像名称
1334:镜像版本号
4、推送
docker push xxxxx.com/abc-dev/arc:1334