1.容器简介


1.1Linux容器

    Linux容器与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。


更加详细地来说,请您假定您在开发一个应用。您使用的是一台笔记本电脑,而且您的开发环境具有特定的配置。其他开发人员身处的环境配置可能稍有不同。您正在开发的应用依赖于您当前的配置,还要依赖于某些特定文件。与此同时,您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境,而不产生重新创建服务器环境的开销。

 因此,您要如何确保应用能够在这些环境中运行和通过质量检测,并且在部署过程中不出现令人头疼的问题,也无需重新编写代码和进行故障修复?答案就是使用容器。容器可以确保您的应用拥有必需的配置和文件,使得这些应用能够在从开发到测试、再到生产的整个流程中顺利运行,而不出现任何不良问题。这样可以避免危机,做到皆大欢喜。


1.2容器与虚拟化的区别

  1)虚拟化使得许多操作系统可同时在单个系统上运行

  2)容器可以共享同一个操作系统内核,将应用进程与系统其他部分隔离开


2.Docker简介


2.1Docker

  1)容器化技术,用于支持创建和使用Linux容器

  2)开源的Docker社区致力于改进这类技术,并免费提供给所有用户


3.Docker安装部署


3.1环境准备

[root@localhost ~]# cat /etc/redhat-release 

CentOS Linux release 7.4.1708 (Core) 

[root@localhost ~]# uname -r

3.10.0-693.el7.x86_64

[root@localhost ~]# getenforce 

Disabled

[root@localhost ~]# systemctl status firewalld.service 

● firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

   Active: inactive (dead)

     Docs: man:firewalld(1)

[root@localhost ~]# ifconfig

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

        inet 10.0.0.103  netmask 255.255.255.0  broadcast 10.0.0.255

        inet6 fe80::af24:1fe3:9292:9747  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:bb:d5:4a  txqueuelen 1000  (Ethernet)

        RX packets 288  bytes 56978 (55.6 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 111  bytes 13567 (13.2 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


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

        ether 00:0c:29:bb:d5:54  txqueuelen 1000  (Ethernet)

        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


lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        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


3.2安装相关依赖包

[root@localhost ~]# yum -y install yum-utils device-maper-persistent-data lvm2


3.3添加软件源

[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@localhost ~]# yum makecache fast


说明:软件源下载后,无法安装docker,请将docker源下载到Windows上,再上传到linux中


3.4安装Docker

[root@localhost ~]# yum install -y docker-ce-17.09.0.ce


3.5启动Docker

[root@localhost ~]# systemctl start docker.service


4.Docker命令操作


4.1查看docker相关信息

[root@localhost ~]# docker version 

Client:

 Version:      17.09.0-ce

 API version:  1.32

 Go version:   go1.8.3

 Git commit:   afdb6d4

 Built:        Tue Sep 26 22:41:23 2017

 OS/Arch:      linux/amd64


Server:

 Version:      17.09.0-ce

 API version:  1.32 (minimum version 1.12)

 Go version:   go1.8.3

 Git commit:   afdb6d4

 Built:        Tue Sep 26 22:42:49 2017

 OS/Arch:      linux/amd64

 Experimental: false


4.2docker镜像加速

[root@localhost ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://14c15248.m.daocloud.io

docker version >= 1.12

{"registry-mirrors": ["http://14c15248.m.daocloud.io"]}

Success.

You need to restart docker to take effect: sudo systemctl restart docker 

[root@localhost ~]# systemctl restart docker.service 


4.3运行docker

[root@localhost ~]# docker run -it centos


4.4搜索官方仓库镜像

[root@localhost ~]# docker search centos


4.5根据镜像名拉取镜像

[root@localhost ~]# docker pull centos


4.6查看当前主机镜像列表

[root@localhost ~]# docker images 


4.7导出镜像

[root@localhost ~]# docker image save centos > docker-centos.tar.gz


4.8删除镜像

[root@localhost ~]# docker image rm centos:latest


4.9导入镜像

[root@localhost ~]# docker image load -i docker-centos.tar.gz


4.10创建容器

[root@localhost ~]# docker create centos:later /bin/bash

[root@localhost ~]# docker start stupefied_nobel


4.11查看正在运行的容器

[root@localhost ~]# docker ps


4.12查看所有容器

[root@localhost ~]# docker ps -a


4.13删除所有容器

[root@localhost ~]# docker rm -f `docker ps -a -q`


5.手动将容器保存为镜像


5.1启动一个centos6.9的镜像

[root@localhost ~]# docker pull centos:6.9

[root@localhost ~]# docker run -it -p 1022:22 centos:6.9 /bin/bash

[root@58201b2b92b ~]# yum install -y openssh-server

[root@58201b2b92b ~]# echo "root:123456" | chpasswd

[root@58201b2b92b ~]# /etc/init.d/sshd start


5.2将容器提交为镜像

[root@localhost ~]# docker commit brave_mcclintock centos-ssh


6.docker 仓库


6.1创建仓库

docker run -d -p 5000:5000 --restart=always --name registry -v

/opt/myregistry:/var/lib/registry registry


6.2修改配置文件,使之支持http

[root@localhost ~]# cat /etc/docker/daemon.json

{

    "registry-mirrors": ["https://registry.docker-cn.com"],

    "insecure-registries": ["10.0.0.103:5000"]

}


6.3重启docker 

[root@localhost ~]# systemctl restart docker.service


6.4修改镜像标签

[root@localhost ~]# docker tag busybox:latest 10.0.0.103:5000/clsn/busybox:1.0

[root@localhost ~]# docker images

REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE

centos6-ssh                                latest              3c2b1e57a0f5      18 hours ago       393MB

httpd                                           2.4                 2e202f453940       6 days ago          179MB

10.0.0.100:5000/clsn/busybox    1.0                 5b0d59026729      8 days ago          1.15MB


6.5将新打标签的镜像上传到仓库

[root@localhost ~]# docker push   10.0.0.100:5000/clsn/busybox