设为首页 收藏本站
查看: 957|回复: 0

[经验分享] Docker 基础配置安装

[复制链接]

尚未签到

发表于 2019-2-21 09:59:04 | 显示全部楼层 |阅读模式
  [toc]

Docker 基础配置安装

Docke介绍
  Docker官网
  github
  开源的容器引擎,可以让开发者打包应用以及依赖的库,然后发布到任何流行的linux发行版上,移植很方便
  由go语言编写,基于apache2.0协议发布
  基于linux kernel,要想在win下运行需要借助一个vm(虚拟机)来实现
  自2013年开始,近些年发展迅猛
docker从1.13x开始,版本分为社区版ce和企业版ee,并且基于年月的时间线形式,当前最新稳定版为17.09
  版本信息参考http://blog.csdn.net/chenhaifeng2016/article/details/68062414

三篇资料链接,助你加深理解什么是Docker?
  如通何俗懂易释解Docker是什么?
  大白话Docker入门一
  大白话Docker入门二

容器虚拟化和传统虚拟化比较:
  容器虚拟化:

  传统虚拟化:


也就是说,让我们创建一个新的虚拟机的时候,如果使用Vmware,首先我们需要分配一定的硬件资源去运行虚拟出来的系统,如果一台电脑例如我的win7 配置一般,也就顶多可以跑10个centos,但是如果使用Docker就可以创建成千上百个centos系统,且每个系统都是独立的,隔离开来的,硬件资源也是隔离开来的。这就是根本区别!


从上图看出Docker的优势是:

启动非常快,秒级实现。资源利用率很高,一台机器可以跑上千个docker容器。更快的交付和部署,一次创建和配置后,可以在任意地方运行。内核级别的虚拟化,不需要额外的hypevisor- – 支持,会有更高的性能和效率。易迁移,平台依赖性不强。

Docker核心概念

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

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

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

二、Docker的安装与配置

2.1 安装

[root@xaviyunserver ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o  /etc/yum.repos.d/docker.repo
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
0     0    0     0    0     0      0      0 --:--:-- --:--:  0     0    0     0    0     0      0      0 --:--:-- --:--:100  2424  100  2424    0     0   2009      0  0:00:01  0:00:01 --:--:--  2011
[root@xaviyunserver ~]# yum install -y docker-ce
启动docker,查看进程,ps aux | grep docker。查看版本 docker version

[root@xaviyunserver ~]# systemctl start docker
[root@xaviyunserver ~]#  ps aux | grep docker
root      1624  0.7  3.2 452080 61592 ?        Ssl  11:10   0:00 /usr/bin/dockerd
root      1628  0.1  1.0 289788 20100 ?        Ssl  11:10   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
root      1771  0.0  0.0 112660   968 pts/0    R+   11:11   0:00 grep --color=auto docke
[root@xaviyunserver ~]# docker version
Client:
Version:      18.03.1-ce
API version:  1.37
Go version:   go1.9.5
Git commit:   9ee9f40
Built:        Thu Apr 26 07:20:16 2018
OS/Arch:      linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version:      18.03.1-ce
API version:  1.37 (minimum version 1.12)
Go version:   go1.9.5
Git commit:   9ee9f40
Built:        Thu Apr 26 07:23:58 2018
OS/Arch:      linux/amd64
Experimental: false
查看docker生成的iptables规则

[root@xaviyunserver ~]# iptables -nvL
Chain INPUT (policy ACCEPT 110 packets, 7188 bytes)
pkts bytes target     prot opt in     out     source               destination         
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
0     0 DOCKER-USER  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
0     0 DOCKER-ISOLATION-STAGE-1  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
0     0 ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0           
0     0 ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0           
0     0 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0           
Chain OUTPUT (policy ACCEPT 80 packets, 15362 bytes)
pkts bytes target     prot opt in     out     source               destination         
Chain DOCKER (1 references)
pkts bytes target     prot opt in     out     source               destination         
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
pkts bytes target     prot opt in     out     source               destination         
0     0 DOCKER-ISOLATION-STAGE-2  all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0           
0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
pkts bytes target     prot opt in     out     source               destination         
0     0 DROP       all  --  *      docker0  0.0.0.0/0            0.0.0.0/0           
0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           
Chain DOCKER-USER (1 references)
pkts bytes target     prot opt in     out     source               destination         
0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           
启动docker会自动帮我们创建一些IPtables 规则,其目的就是不影响docker虚拟机的正常运行。(每次重启docker服务会自动把iptables规则添加上,所以不用担心删除!)

扩展如何保存iptable规则(备用),打开系统中iptables文件 /etc/sysconfig/iptables,确认没有保存,输入service iptables save


[root@xaviyunserver ~]# cat //这里我实验用的是云服务器,之前没有做个iptable练习 /etc/sysconfig/iptables
cat: /etc/sysconfig/iptables: No such file or directory
[root@xaviyunserver ~]# cat /etc/sysconfig/iptables-config
删除iptables规则:iptables -t nat -F;查看iptable规则:iptables -t nat -nvL

[root@xaviyunserver ~]# iptables -t nat -F
[root@xaviyunserver ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
Chain DOCKER (0 references)
pkts bytes target     prot opt in     out     source               destination  
  重启之后ipatble规则又出现了


2.2 镜像管理

下载镜像,docker 由于在国外,国内限制比较大,所以我们一般会使用阿里云的加速器去下载一个镜像:

vi /etc/docker/daemon.json  //加入如下内容
{
"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}
  说明:这个url为加速器地址,需要同学自行到阿里云申请。

配置完加速器,重启docker服务,再次docker pull centos会快很多。

[root@xaviyunserver ~]# vim /etc/docker/daemon.json
[root@xaviyunserver ~]# systemctl restart docker
[root@xaviyunserver ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7dc0dca2b151: Pull complete
Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
Status: Downloaded newer image for centos:latest
查看本地都有哪些镜像:docker images

[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              49f7960eb7e4        4 weeks ago         200MB
搜索镜像:docker search XXXX,xxxx是关键字
  从docker仓库搜索centos镜像

[root@xaviyunserver ~]# docker search centos
[root@xaviyunserver ~]# docker pull ubuntu //类似于wget
[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
为centos镜像设置标签(TAG)为:docker tag centos xavilinux_centos

[root@xaviyunserver ~]# docker tag centos xavilinux_centos


修改容器标签和容器名称,TAG:docker tag centos test11:xavier

[root@xaviyunserver ~]# docker tag centos test11:xavier
[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
test11              xavier              49f7960eb7e4        4 weeks ago         200MB
xavilinux_centos    latest              49f7960eb7e4        4 weeks ago         200MB
把镜像启动为容器,-i表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动,要把-i -t -d 放到镜像名字前面,命令:docker run -itd centos,查看命令:docker ps

[root@xaviyunserver ~]# docker run -itd centos
[root@xaviyunserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
83a4c32c03ca        centos              "/bin/bash"         42 seconds ago      Up 41 seconds                           nostalgic_lamport
docker ps   //查看正在运行的容器(已启动的)

docker ps -a     //加上-a选项可以查看所有容器,包含没有运行的容器

exit    //直接退出容器系统

docker rmi centos   //用来删除指定镜像, 其中后面的参数可以是tag,如果是tag时,实际上是删除该tag,只要该镜像还有其他tag,就不会删除该镜像。当后面的参数为镜像ID时,则会彻底删除整个镜像,连同所有标签一同删除。

[root@xaviyunserver ~]# docker rmi test11
Error: No such image: test11
[root@xaviyunserver ~]# docker rmi test11:xavier
Untagged: test11:xavier
[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
xavilinux_centos    latest              49f7960eb7e4        4 weeks ago         200MB
  这里只是删除了tag,相当于删除了一个硬链接而已

2.3 docker通过容器创建镜像
  刚刚我只是说到了如何删除修改一些基础的操作,一旦镜像搭建好了,如何才能通过命令行进入系统呢?

通过下面命令进入容器:docker exec -it 83a4c3 bash // “83a4c3”是在运行容器的ID前6位

首先查看下run的docker有哪些: docker ps

[root@xaviyunserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
83a4c32c03ca        centos              "/bin/bash"         25 minutes ago      Up 25 minutes      
  查看容器大小,空间

[root@xaviyunserver ~]# docker exec -it 83a4c3 bash
[root@83a4c32c03ca /]# ls
bin  etc   lib    media  opt   root  sbin  sys  usr
dev  home  lib64  mnt    proc  run   srv   tmp  var
[root@83a4c32c03ca /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay          40G  3.8G   34G  10% /
tmpfs            64M     0   64M   0% /dev
tmpfs           920M     0  920M   0% /sys/fs/cgroup
/dev/vda1        40G  3.8G   34G  10% /etc/hosts
shm              64M     0   64M   0% /dev/shm
tmpfs           920M     0  920M   0% /proc/scsi
tmpfs           920M     0  920M   0% /sys/firmware

  容器里面有没有IP呢?没有

[root@83a4c32c03ca /]# ifconfig
bash: ifconfig: command not found
[root@83a4c32c03ca /]# yum install -y net-tools //安装net-tools

  • 安装以后查看下当前镜像的ip

[root@83a4c32c03ca /]# ifconfig
eth0: flags=4163  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 5867  bytes 11263312 (10.7 MiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 3745  bytes 287096 (280.3 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73  mtu 65536
inet 127.0.0.1  netmask 255.0.0.0
loop  txqueuelen 1  (Local Loopback)
RX packets 0  bytes 0 (0.0 B)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 0  bytes 0 (0.0 B)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  查看系统IP,可以看到新生成的虚拟网卡docker0,这儿VMware里面的vmnet8一样,没生成一个虚拟机,会产生一个虚拟网卡和宿主机来通讯。


把我们刚刚制作的镜像保存成一个新的镜像,下次我们再次需要的时候就可以直接使用(不需要再次安装我们已经安装过的服务!):

docker commit -m "command"  -a "somebody info" container_id new_image_name //container_id通过docker ps -a获取,后面的new_image_name为新镜像名字
  比如这里我们就不用在有安装net-tools的这个服务了

[root@xaviyunserver ~]# docker commit -m "install net-tools"  -a "xavilinux" 83a4c32c03ca centos_with_net
sha256:097367cfbba8cc4041fe2238aca01c03ffb00abe85ce34a0befecaad49b14556
[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos_with_net     latest              097367cfbba8        9 seconds ago       282MB
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
xavilinux_centos    latest              49f7960eb7e4        4 weeks ago         200MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
  进入这个新建立的容器,

[root@xaviyunserver ~]# docker run -itd centos_with_net bash
deda7b6cd703375c746a1c02d7864c29ca82c4742efc6f095180e5b6d8b730a3
[root@xaviyunserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
deda7b6cd703        centos_with_net     "bash"              8 seconds ago       Up 7 seconds                            gallant_hypatia
83a4c32c03ca        centos              "/bin/bash"         About an hour ago   Up About an hour                        nostalgic_lamport


进入容器镜像,也可以输入name信息,不要忘了bash

[root@xaviyunserver ~]# docker exec -it gallant_hypatia bash


三、通过模板创建镜像

首先去下载一个模板(centos-7-x86_64-minimal.tar.gz)下载速度比较慢,可以先试用浏览器或者第三方工具下载。

http://openvz.org/Download/templates/precreated
wget http://download.openvz.org/template/precreated/centos-7-x86_64-minimal.tar.gz
  如果虚拟机没有rz命令,下载安装lrzsz安装包

[root@xaviyunserver ~]# yum install lrzsz -y
把模板导入成镜像的命令为:cat centos-7-x86_64-minimal.tar.gz |docker import - centos7

[root@xaviyunserver ~]# cat centos-7-x86_64-minimal.tar.gz |docker import - centos7
sha256:1513b3b29ff7fff26ea3041f0afddaa06195b4d9dcce388b8a829e4261828ae5


[root@xaviyunserver ~]# docker run -itd centos7 bash
410e90b34976c82e2d2fde0d50aff1a240c441b1f94dd3d714f4d9963b0c314f
[root@xaviyunserver ~]# docker exec -it 410e90b34976c bash
[root@410e90b34976 /]#
查看系统Linux内核:uname -a

[root@410e90b34976 /]# uname -a
Linux 410e90b34976 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@410e90b34976 /]# exit
exit
[root@xaviyunserver ~]# uname -a
Linux xaviyunserver 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
把现有镜像,导出为一个文件:docker save -o [centos7_vim.tar自命名] [centos7需要导出的镜像]

[root@xaviyunserver ~]# docker save -o centosxavi.tar centos_with_net
[root@xaviyunserver ~]# du -sh centosxavi.tar
278M    centosxavi.tar
在删除镜像的时候发现镜像已经启动,这个时候我们就需要强制删除(线上需要再三考虑)

[root@xaviyunserver ~]# docker rm -f deda7b6cd703
deda7b6cd703



再或者先停掉docker容器:docker stop  centos_with_net

[root@xaviyunserver ~]# docker rmi 097367cfbba8
Untagged: centos_with_net:latest
Deleted: sha256:097367cfbba8cc4041fe2238aca01c03ffb00abe85ce34a0befecaad49b14556
Deleted: sha256:b887b67ee0202a8290b52ebeb07e5f418c7f4ad801e1c17b85303fca581c999b
[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos7             latest              1513b3b29ff7        About an hour ago   435MB
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
xavilinux_centos    latest              49f7960eb7e4        4 weeks ago     
恢复本地镜像:docker load < centosxavi.tar

[root@xaviyunserver ~]# docker load < centosxavi.tar
d8066854a2c8: Loading layer [==================================================>]  82.61MB/82.61MB
Loaded image: centos_with_net:latest
[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos7             latest              1513b3b29ff7        About an hour ago   435MB
centos_with_net     latest              097367cfbba8        2 hours ago         282MB
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
xavilinux_centos    latest              49f7960eb7e4        4 weeks ago         200MB
docker push image_name//可以把自己的镜像传到dockerhub官方网站上去,但前提是需要先注册一个用户,后续如果有需求再研究吧。

扩展知识点:docker save与docker export的区别:
  docker save:

docker save是用来将一个或多个image打包保存的工具。

例如我们想将镜像库中的postgres和mongo打包,那么可以执行:docker save -o images.tar postgres:9.6 mongo:3.4
  打包之后的images.tar包含postgres:9.6和mongo:3.4这两个镜像。

将打包后的镜像载入进来使用docker load,例如:docker load -i images.tar
  上述命令将会把postgres:9.6和mongo:3.4载入进来,如果本地镜像库已经存在这两个镜像,将会被覆盖。
  docker export:

docker export是用来将container的文件系统进行打包的。例如:docker export -o postgres-export.tar postgres

docker export需要指定container,不能像docker save那样指定image或container都可以。

将打包的container载入进来使用docker import,例如:docker import postgres-export.tar postgres:latest

从上面的命令可以看出,docker import将container导入后会成为一个image,而不是恢复为一个container。

总结一下docker save和docker export的区别:

docker save保存的是镜像(image),docker export保存的是容器(container);

docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;

docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675193-1-1.html 上篇帖子: 跟我一起学docker(14) 下篇帖子: Docker容器管理、仓库管理、数据管理、数据卷备份与恢复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表