Docker 基础配置安装

[toc]html

Docker 基础配置安装

Docke介绍

Docker官网linux

githubgit

开源的容器引擎,可让开发者打包应用以及依赖的库,而后发布到任何流行的linux发行版上,移植很方便github

由go语言编写,基于apache2.0协议发布docker

基于linux kernel,要想在win下运行须要借助一个vm(虚拟机)来实现 apache

自2013年开始,近些年发展迅猛
docker从1.13x开始,版本分为社区版ce和企业版ee,而且基于年月的时间线形式,当前最新稳定版为17.09json

版本信息参考http://blog.csdn.net/chenhaifeng2016/article/details/68062414ubuntu

三篇资料连接,助你加深理解什么是Docker?

如通何俗懂易释解Docker是什么? vim

大白话Docker入门一centos

大白话Docker入门二

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

容器虚拟化:

mark

传统虚拟化:

mark

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

mark

从上图看出Docker的优点是:

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

Docker核心概念

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

容器,镜像相似于操做系统,而容器相似于虚拟机自己。它能够被启动、开始、中止、删除等操做,每一个容器都是相互隔离的。

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

2、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

mark

[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规则又出现了

mark

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

mark

修改容器标签和容器名称,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

mark

容器里面有没有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<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 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<UP,LOOPBACK,RUNNING>  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同样,没生成一个虚拟机,会产生一个虚拟网卡和宿主机来通信。

mark

把咱们刚刚制做的镜像保存成一个新的镜像,下次咱们再次须要的时候就能够直接使用(不须要再次安装咱们已经安装过的服务!):

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

mark

进入容器镜像,也能够输入name信息,不要忘了bash
[root@xaviyunserver ~]# docker exec -it gallant_hypatia bash

mark

3、经过模板建立镜像

首先去下载一个模板(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

mark

[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

mark

再或者先停掉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能够为镜像指定新名称。

相关文章
相关标签/搜索