Docker介绍,安装,,镜像管理,通过容器创建镜像,通过模板创建镜像

Docker

在我们开始了解linux运维开始,我们就听说了docker,非常流行,几乎大多数公司都在使用,但docker具体是什么,有什么作用,我们却不太了解。

docker字面意思就是容器,它是一个开源的容器引擎,能够快速地部署环境和发布代码,可以让开发者打包应用以及依赖的库,然后发布到任何流行的linux发行版上,移植很方便。

由go语言开发,基于apache2.0协议发布,官网:www.docker.com ,GitHub:https://github.com/docker/docker.github.io 。版本分为社区版ce和企业版ee,基于年月的时间线形式,当前最新稳定版为18.06。

版本介绍参考链接:

https://blog.csdn.net/chenhaifeng2016/article/details/68062414

docker相对于传统虚拟化的优势:

\1. 启动非常快,秒级实现;

\2. 资源利用率高,一台高配置服务器可以跑上千个docker容器;

\3. 更快的部署和交付,一次创建和配置后,可以在任意地方运行;

\4. 内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率;

\5. 容易迁移,平台依赖性不高。

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

Docker概念:

镜像,是一个只读的模板,类似于安装系统时用到的那个iso文件,我们通过镜像来完成各种应用的部署。

容器,镜像类似于操作系统,而容器类似于虚拟机本身,它可以被启动、关闭、删除等操作,每个容器都是相互隔离的。

仓库,存放镜像的一个场所,仓库分为公开仓库和私有仓库,最大的公开仓库是Docker hub(hub.docker.com)。

Docker安装

安装docker:

阿里源docker http://mirrors.aliyun.com/docker-ce/linux/centos/**docker-ce.repo**

cd /etc/yum.repos.d/

wget

http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce

启动docker:

启动docker服务:systemctl start docker

查看docker服务是否启动:ps aux |grep docker

启动后会自动生成防火墙规则,规则清楚会对docker有影响,所以建议保存规则

查看防火墙规则:iptables -nvL

防火墙规则保存文件:cat /etc/sysconfig/iptables-config

保存规则:service iptables save(命令需要安装iptables服务)每次启动docker都会自动生成iptables规则,工作中不建议重启docker服务

镜像管理

下载镜像:

docker pull centos

配置docker加速器:

上面下载镜像很慢,所以我们可以配置一个docker加速器。

vim /etc/docker/daemon.json

{

"registry-mirrors": ["https://v9wd8gth.mirror.aliyuncs.com"]

}

注意:该url为加速器地址,可自行去阿里云申请自己的加速器地址

配置完后,重启docker,之后再下载镜像会比之前快很多。

重启docker服务:systemctl restart docker

测试下载Ubuntudocker镜像:docker pull ubuntu

查看本地镜像:docker images

[root@localhost yum.repos.d]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos latest 300e315adb2f 12 days ago 209MB

ubuntu latest f643c72bc252 3 weeks ago 72.9MB

搜索镜像:**docker search jumpserver**

img

给镜像打上标签:**docker tag centos jin_centos**

[root@localhost yum.repos.d]# docker tag centos jin_centos

[root@localhost yum.repos.d]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

jin_centos latest 300e315adb2f 12 days ago 209MB

centos latest 300e315adb2f 12 days ago 209MB

ubuntu latest f643c72bc252 3 weeks ago 72.9M

打完标签会重新另生成一份镜像,不过IMAGE ID不会改变,这表明这两个镜像其实是一样的。

此外还可以这样标识,改变TAG:docker tag centos test:123

[root@localhost yum.repos.d]# docker tag centos test:123

[root@localhost yum.repos.d]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

test 123 300e315adb2f 12 days ago 209MB

centos latest 300e315adb2f 12 days ago 209MB

jin_centos latest 300e315adb2f 12 days ago 209MB

ubuntu latest f643c72bc252 3 weeks ago 72.9MB

启动镜像为容器:docker run -itd centos

-i表示让容器的标准输入打开;-t表示分配一个伪终端;-d表示后台启动,参数需要放到镜像名字前面

[root@localhost yum.repos.d]# docker run -itd centos

37be85e9b9bc80ed50589ac8f7d77cf0939067dddd599594f48f8444f1a6a2f8

查看启动状态的容器:docker ps

docker ps -a -a**查看所有容器,包括启动状态和停止状态**

[root@localhost yum.repos.d]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

37be85e9b9bc centos "/bin/bash" 36 seconds ago Up 34 seconds objective_kapitsa

[root@localhost yum.repos.d]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

37be85e9b9bc centos "/bin/bash" 2 minutes ago Up 2 minutes objective_kapitsa

删除镜像:

docker rmi 镜像名称:TAG标签

先查看当前系统下存在的镜像:docker images

[root@localhost yum.repos.d]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

jin_centos latest 300e315adb2f 12 days ago 209MB

test 123 300e315adb2f 12 days ago 209MB

centos latest 300e315adb2f 12 days ago 209MB

ubuntu latest f643c72bc252 3 weeks ago 72.9MB

删除镜像,删除时必须要带上TAG,否则删除不了

docker rmi test:123

[root@localhost yum.repos.d]# docker rmi test:123

Untagged: test:123

删除后重新查看当前所存在的镜像,删除成功

[root@localhost yum.repos.d]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos latest 300e315adb2f 12 days ago 209MB

jin_centos latest 300e315adb2f 12 days ago 209MB

ubuntu latest f643c72bc252 3 weeks ago 72.9MB

删除时,后面的参数可以是TAG,如果是TAG时,实际上删除的是该TAG;当后面的参数为IMAGE ID时,则会删除整个镜像,所有标签也会一同删除。

通过容器创建镜像

镜像可以通过docker pull下载镜像,也可以自己自定义创建镜像。

进入容器:docker exec -it CONTAINER ID bash

[root@localhost yum.repos.d]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

37be85e9b9bc centos "/bin/bash" 14 minutes ago Up 14 minutes objective_kapitsa

进入容器界面,容器ID可以简写:docker exec -it 37be85 bash

其中37be85e9b9bc为容器id,这个id可以用docker ps查看,最后面的bash为进入容器后我们要执行的命令,这样就可以打开一个终端

[root@localhost yum.repos.d]# docker exec -it 37be85 bash

[root@37be85e9b9bc /]# ls

bin etc lib lost+found mnt proc run srv tmp var

dev home lib64 media opt root sbin sys usr

[root@37be85e9b9bc /]# ifconfig

bash: ifconfig: command not found

[root@3790ac27cf7e /]# yum install -y net-tools

容器里可以使用的命令数量有限

[root@37be85e9b9bc /]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

​ inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255

​ ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)

​ RX packets 4552 bytes 9578737 (9.1 MiB)

​ RX errors 0 dropped 0 overruns 0 frame 0

​ TX packets 2847 bytes 158904 (155.1 KiB)

​ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@3790ac27cf7e /]# exit

exit

[root@localhost yum.repos.d]# ifconfig

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

​ inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255

​ inet6 fe80::42:95ff:fe4c:e893 prefixlen 64 scopeid 0x20<link>

​ ether 02:42:95:4c:e8:93 txqueuelen 0 (Ethernet)

​ RX packets 2847 bytes 119046 (116.2 KiB)

​ RX errors 0 dropped 0 overruns 0 frame 0

​ TX packets 4544 bytes 9578081 (9.1 MiB)

​ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth2790df0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

​ inet6 fe80::1cee:35ff:fe63:378c prefixlen 64 scopeid 0x20<link>

​ ether 1e:ee:35:63:37:8c txqueuelen 0 (Ethernet)

​ RX packets 2847 bytes 158904 (155.1 KiB)

​ RX errors 0 dropped 0 overruns 0 frame 0

​ TX packets 4552 bytes 9578737 (9.1 MiB)

​ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

多出一个docker0:网卡和一个veth2790df0:虚拟网卡,每增加一个容器虚拟网卡都会增加一个

生成镜像:

-m指定改动信息;-a指定作者相关信息;37be85为容器id,后面接新镜像的名字

docker commit -m "install net-tools" -a "jin" 37be85 centos_with_net

[root@localhost yum.repos.d]# docker commit -m "install net-tools" -a "jin" 37be85 centos_with_net

sha256:6e13b801d98f6bf568d8df0fb5334320c11122387c18ca4460b26b44807d1282

[root@localhost yum.repos.d]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos_with_net latest 6e13b801d98f 36 seconds ago 242MB //多出一个镜像

centos latest 300e315adb2f 12 days ago 209MB

jin_centos latest 300e315adb2f 12 days ago 209MB

ubuntu latest f643c72bc252 3 weeks ago 72.9MB

启动新镜像为容器,直接使用net-tools工具。

[root@localhost yum.repos.d]# docker run -itd centos_with_net bash

dd6d95022f70fb11d58fd856a18a22245ef52e5d728700a06d36a1191adc8d7a

[root@localhost yum.repos.d]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

dd6d95022f70 centos_with_net "bash" 6 seconds ago Up 5 seconds tender_black

37be85e9b9bc centos "/bin/bash" 34 minutes ago Up 34 minutes objective_kapitsa

[root@localhost yum.repos.d]# ifconfig

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

​ inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255

​ inet6 fe80::42:95ff:fe4c:e893 prefixlen 64 scopeid 0x20<link>

​ ether 02:42:95:4c:e8:93 txqueuelen 0 (Ethernet)

​ RX packets 2847 bytes 119046 (116.2 KiB)

​ RX errors 0 dropped 0 overruns 0 frame 0

​ TX packets 4544 bytes 9578081 (9.1 MiB)

​ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth8853224: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

​ inet6 fe80::474:92ff:febe:df3c prefixlen 64 scopeid 0x20<link>

​ ether 06:74:92:be:df:3c txqueuelen 0 (Ethernet)

​ RX packets 0 bytes 0 (0.0 B)

​ RX errors 0 dropped 0 overruns 0 frame 0

​ TX packets 8 bytes 656 (656.0 B)

​ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth2790df0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

​ inet6 fe80::1cee:35ff:fe63:378c prefixlen 64 scopeid 0x20<link>

​ ether 1e:ee:35:63:37:8c txqueuelen 0 (Ethernet)

​ RX packets 2847 bytes 158904 (155.1 KiB)

​ RX errors 0 dropped 0 overruns 0 frame 0

​ TX packets 4552 bytes 9578737 (9.1 MiB)

​ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

新增加一个容器,多出了一个虚拟网卡veth8853224:

通过模板创建镜像

下载模板镜像:

[root@localhost yum.repos.d]# cd /usr/local/src/

[root@localhost src]# wget https://download.openvz.org/template/precreated/centos-7-x86_64-minimal.tar.gz

[root@jinkai01 src]# du -sh centos-7-x86_64-minimal.tar.gz

139M centos-7-x86_64-minimal.tar.gz

导入模板镜像命令:

[root@jinkai01 src]# cat centos-7-x86_64-minimal.tar.gz|docker import - centos7

sha256:cb41c2fef0dbb447b75cdb1819a090a2b30ce2697e1d7d7c5cbcc3c86c2953e8

查看本地镜像是否有刚刚导入的镜像:

docker images

启动刚导入的镜像为容器:

docker run -itd centos7 bash

进入容器界面:

docker exec -it c4aa63 bash

查看系统版本

[root@c994852e45b9 /]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

导出镜像为文件

前面为文件名,后面跟镜像名字

[root@jinkai01 src]# docker save -o centos7.tar centos7

[root@jinkai01 src]# ls

centos7.tar

centos-7-x86_64-minimal.tar.gz

用文件恢复本地镜像:

[root@jinkai01 src]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos7 latest cb41c2fef0db 6 minutes ago 435MB

centos_with_net latest 6d14edea5ae3 15 minutes ago 242MB

centos latest 300e315adb2f 13 days ago 209MB

jin_centos latest 300e315adb2f 13 days ago 209MB

ubuntu latest f643c72bc252 3 weeks ago 72.9MB

[root@jinkai01 src]# docker rmi cb41c2

Error response from daemon: conflict: unable to delete cb41c2fef0db (cannot be forced) - image is being used by running container c994852e45b9

删除报错,提示镜像正在被容器运行

[root@jinkai01 src]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

c994852e45b9 centos7 "bash" 6 minutes ago Up 6 minutes friendly_beaver

2a58b225aaf3 centos_with_net "bash" 12 minutes ago Up 12 minutes recursing_sammet

27e8bb49f2bb centos_with_net "/bin/bash" 14 minutes ago Up 14 minutes strange_kilby

6afa18952e17 centos "/bin/bash" 23 minutes ago Up 23 minutes sharp_moser

强行删除容器:

[root@jinkai01 src]# docker rm -f c994852e45b9

c994852e45b9

再删除镜像:

[root@jinkai01 src]# docker rmi cb41c2

Untagged: centos7:latest

Deleted: sha256:cb41c2fef0dbb447b75cdb1819a090a2b30ce2697e1d7d7c5cbcc3c86c2953e8

Deleted: sha256:788edba9eaa8ade63d8ba9d5747281c5da2b34b12a6c80f4dffd8ad9e05f68c1

查看本地镜像:

[root@jinkai01 src]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos_with_net latest 6d14edea5ae3 17 minutes ago 242MB

centos latest 300e315adb2f 13 days ago 209MB

jin_centos latest 300e315adb2f 13 days ago 209MB

ubuntu latest f643c72bc252 3 weeks ago 72.9MB

用文件导入镜像,也可以使用docker load < centos7.tar 来导入镜像

docker load --input centos7.tar

[root@jinkai01 src]# docker load --input centos7.tar

788edba9eaa8: Loading layer 446.1MB/446.1MB

Loaded image: centos7:latest

[root@jinkai01 src]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos7 latest cb41c2fef0db 23 minutes ago 435MB

centos_with_net latest 6d14edea5ae3 32 minutes ago 242MB

centos latest 300e315adb2f 13 days ago 209MB

jin_centos latest 300e315adb2f 13 days ago 209MB

ubuntu latest f643c72bc252 3 weeks ago 72.9MB

[root@jinkai01 src]# docker push image_name

上传个人镜像:

docker push image_name

可以把个人镜像上传到dockerhub官方网站上去,但前提是需要先注册

扩展链接:

详细完整的介绍docker

https://www.cnblogs.com/zhangxingeng/p/11236968.html

如何使用Dockerfile构建镜像

https://blog.csdn.net/qinyushuang/article/details/43342553

笔记总结:https://blog.csdn.net/xiaochendefendoushi/article/details/8097990

猜你喜欢

转载自blog.51cto.com/11451960/2640815