云原生环境搭建—Docker创建镜像 并推拉Harbor

创建镜像 

2种方式

1、根据Dockerfile 【build】

2、基于运行的容器修改后 【commit】

镜像与容器关联

一、根据Dockerfile创建镜像

1、mkdir dockerfile/lib/centos7base/

创建目录

2、创建Dockerfile

vim Dockerfile

扫描二维码关注公众号,回复: 12274927 查看本文章

二、构建镜像

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  

猜你喜欢

转载自blog.csdn.net/Coder_Boy_/article/details/110312431