通过容器提交镜像(docker commit)以及推送镜像(docker push)

在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中,以便在网络上下载使用。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

查看镜像

[root@docker-test1 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker.io/ubuntu    16.04               7aa3602ab41e        5 weeks ago         115 MB

 

创建一个名为myubuntu的容器

[root@docker-test1 ~]# docker run -ti --name myubuntu -d docker.io/ubuntu

[root@docker-test1 ~]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

651a8541a47d        docker.io/ubuntu    "/bin/bash"         37 seconds ago      Up 36 seconds                           myubuntu

 

 

docker commit :从容器创建一个新的镜像。

# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停。

 

根据这个myubuntu容器提交镜像

[root@docker-test1 ~]# docker commit -a "wangshibo" -m "this is test" 651a8541a47d myubuntu:v1

sha256:6ce4aedd12cda693d0bbb857cc443a56f9f569106e09ec61aa53563d0932ea4d

 

再次查看镜像,发现镜像myubuntu:v1已经提交到本地了

[root@docker-test1 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

myubuntu            v1                  6ce4aedd12cd        59 seconds ago      84.1 MB

docker.io/ubuntu    16.04               7aa3602ab41e        5 weeks ago         115 MB

 

在mybuntu:v1镜像推送到docker hub仓库中去

# docker push [OPTIONS] NAME[:TAG]

OPTIONS说明:

--disable-content-trust :忽略镜像的校验,默认开启

 

 

首先是登录docker hub (用户名:wangshibo    密码:*******)

[root@docker-test1 ~]# 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 (wangshibo): wangshibo

Password:

Login Succeeded

 

[root@docker-test1 ~]# docker push wangshibo/myubuntu:v1

The push refers to a repository [docker.io/wangshibo/myubuntu]

An image does not exist locally with the tag: docker.io/wangshibo/myubuntu

 

这里需要将ubuntu:v1镜像改名,在名称前加上自己的docker hub的Docker ID,即wangshibo

 

[root@docker-test1 ~]# docker tag 6ce4aedd12cd wangshibo/myubuntu:v1

[root@docker-test1 ~]# docker images

REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE

myubuntu             v1                  6ce4aedd12cd        6 minutes ago       84.1 MB

wangshibo/myubuntu   v1                  6ce4aedd12cd        6 minutes ago       84.1 MB

docker.io/ubuntu     16.04               7aa3602ab41e        5 weeks ago         115 MB

 

再次进行推送(注意:下面的v1的tag标签可以不打,默认是latest)。推送操作时间稍微会有一点长,耐心等待~

[root@docker-test1 ~]# docker push wangshibo/myubuntu:v1           

The push refers to a repository [docker.io/wangshibo/myubuntu]

b5948ba9486d: Pushed

8d7ea83e3c62: Mounted from library/ubuntu

6a061ee02432: Mounted from library/ubuntu

f73b2816c52a: Mounted from library/ubuntu

6267b420796f: Mounted from library/ubuntu

a30b835850bf: Mounted from library/ubuntu

v1: digest: sha256:e9cd9075d262848a307c92751e1a5890d883b814a31abd118161442461a1ca2d size: 1564

 

最后登录自己的Docker Hub,即https://hub.docker.com/

登录后,在Repositories里面就可以看到自己在上面推送的镜像wangshibo/myubuntu:v1了,这是个对外的镜像,可以在网络上下载。

在Docker hub上可以看到这个镜像的下载命令(注意下载时跟上tag标签,如果是latest的默认tag可以不跟)

也可以直接在Docker hub上删除这个镜像(Repositories-镜像-Settings-delete)

 

 

比如在另一台服务器上下载这个镜像

[root@kevin-test ~]# docker pull wangshibo/myubuntu

Pulling repository wangshibo/myubuntu

Repository not found

 

需要跟上tag标签

[root@kevin-test ~]# docker pull wangshibo/myubuntu:v1

v1: Pulling from wangshibo/myubuntu

68e2a091ef24: Pull complete

8f9dd35f6299: Pull complete

a81a6171600b: Pull complete

a211a2bc7010: Pull complete

9e71a0b4f83a: Pull complete

0cf75bb335aa: Pull complete

c393a882769e: Pull complete

Digest: sha256:845fa3dcc9d0de1b9c701e1009918995da35a29012015f6c297a05edc489e018

Status: Downloaded newer image for wangshibo/myubuntu:v1

[root@kevin-test ~]# docker  images

REPOSITORY           TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

wangshibo/myubuntu   v1                  c393a882769e        12 minutes ago      84.11 MB

 

 

在本机删除这个镜像

[root@docker-test1 ~]# docker images

REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE

myubuntu             v1                  6ce4aedd12cd        15 minutes ago      84.1 MB

wangshibo/myubuntu   v1                  6ce4aedd12cd        15 minutes ago      84.1 MB

docker.io/ubuntu     16.04               7aa3602ab41e        5 weeks ago         115 MB

 

注意上面有两个6ce4aedd12cd的镜像ID,此时直接使用这个镜像ID是删除不掉的

[root@docker-test1 ~]# docker rmi 6ce4aedd12cd

Error response from daemon: conflict: unable to delete 6ce4aedd12cd (must be forced) - image is referenced in multiple repositories

 

应该先删除docker tag改名前的镜像,使用镜像名称删除。(一般在docker tag镜像改名后,最好删除改名前的镜像)

[root@docker-test1 ~]# docker rmi myubuntu:v1

Untagged: myubuntu:v1

Untagged: wangshibo/myubuntu@sha256:e9cd9075d262848a307c92751e1a5890d883b814a31abd118161442461a1ca2d

 

[root@docker-test1 ~]# docker images

REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE

wangshibo/myubuntu   v1                  6ce4aedd12cd        15 minutes ago      84.1 MB

docker.io/ubuntu     16.04               7aa3602ab41e        5 weeks ago         115 MB

 

这个时候就可以删除镜像ID删除了

[root@docker-test1 ~]# docker rmi 6ce4aedd12cd

Untagged: wangshibo/myubuntu:v1

Deleted: sha256:6ce4aedd12cda693d0bbb857cc443a56f9f569106e09ec61aa53563d0932ea4d

Deleted: sha256:0ddeb6a16badd042914c2e72b9ef0331550c1cdcc4bdc6650a90cd9f57f1501b

[root@docker-test1 ~]# docker images         

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker.io/ubuntu    16.04               7aa3602ab41e        5 weeks ago         115 MB

=================================删除镜像失败一例分享==================================

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

[root@docker-test1 ~]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

[root@docker-test1 ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 

打算删除掉docker的nginx镜像, 但是发现这个镜像就是删除不了,加了-f强制删除也不行,一直报Error: No such image的错误,

最后终于找到了办法直接删除文件!

 

[root@docker-test1 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

nginx               latest              62f816a209e6        7 days ago          109MB

 

[root@docker-test1 ~]# docker rmi nginx

Error: No such image: nginx

 

[root@docker-test1 ~]# docker rmi 62f816a209e6

Error: No such image: 62f816a209e6

 

[root@docker-test1 ~]# docker rmi 62f816a209e6 -f

Error: No such image: 62f816a209e6

 

如上,怎么都删除不掉nginx镜像!!!!!

 

处理办法:

[root@docker-test1 ~]# systemctl stop docker

[root@docker-test1 ~]# rm -rf /var/lib/docker

rm: cannot remove ‘/var/lib/docker/containers’: Device or resource busy

 

删除不了的原因是: 在建立容器的时候做了相应目录的挂载,没有卸载,所以Device or resource busy

 

解决办法: 查找挂载的目录并卸载

[root@docker-test1 ~]# cat /proc/mounts | grep "docker"

/dev/mapper/centos-root /var/lib/docker/containers xfs rw,relatime,attr2,inode64,noquota 0 0

proc /run/docker/netns/default proc rw,nosuid,nodev,noexec,relatime 0 0

proc /run/docker/netns/a0626c54fd03 proc rw,nosuid,nodev,noexec,relatime 0 0

proc /run/docker/netns/b18072de4224 proc rw,nosuid,nodev,noexec,relatime 0 0

proc /run/docker/netns/b5298f643455 proc rw,nosuid,nodev,noexec,relatime 0 0

proc /run/docker/netns/9f5e97637c98 proc rw,nosuid,nodev,noexec,relatime 0 0

 

[root@docker-test1 ~]# umount /var/lib/docker/containers

[root@docker-test1 ~]# rm -rf /var/lib/docker

 

[root@docker-test1 ~]# systemctl start docker

 

再次查看就没有这个镜像了

[root@docker-test1 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值