Docker入门手册

20.Docker

20.1 Docker的起源

   2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司,这家公司主要提供基于PaaS的云计算技术服务。
   具体来说,是和LXC [ LXC,就是Linux容器虚拟技术(Linux container) ]有关的容器技术。后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为 Docker 。
   后来公司在竞争之下快坚持不下去时,他们就想到了把Docker给开源出去,让世界更多的人一起参与进来,贡献代码和意见。
   不开则已,一开惊人,越来越多的IT工程师发现了Docker的优点,然后蜂拥而至,加入Docker开源社区。之后Docker随之火爆流行全球。

20.2 Docker是什么

Docker和容器技术为什么会这么火爆?说白了,就是因为它“轻量级”。

在容器技术之前,业界的主流的虚拟化技术是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。相信很多人都用过虚拟机。虚拟机,就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来,在“子电脑”里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以变出好几个“子电脑”,里面都开上QQ。“子电脑”和“子电脑”之间,是相互隔离的,互不影响。
虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化,虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱购买激活码。

而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个Docker容器。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。正因为如此,容器技术受到了热烈的欢迎和追捧,发展迅速。

大家需要注意,Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。

虚拟机,类似于“子电脑”

imgimg

20.3 Docker的优势是什么

“Build, Ship and Run”!

“搭建、发送、运行”,三板斧。

举个例子:
我来到一片空地,想建个房子,于是我搬石头、砍木头、画图纸,一顿操作,终于把这个房子盖好了。
结果,我住了一段时间,想搬到另一片空地去。这时候,按以往的办法,我只能再次搬石头、砍木头、画图纸、盖房子。

但是,跑来一个老巫婆,教会我一种魔法,可以把我盖好的房子复制一份,做成“镜像”,放在我的背包里。
等我到了另一片空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住。

所以,Docker的第二句口号就是:“Build once,Run anywhere(搭建一次,到处能用)”。

20.4 Docker的核心概念

Docker技术的三大核心概念,分别是:

* 镜像(Image)
* 容器(Container)
* 仓库(Repository)

我刚才例子里面,那个放在包里的“镜像”,就是Docker镜像。而我的背包,就是Docker仓库。我在空地上,用魔法造好的房子,就是一个Docker容器。
说白了,这个Docker镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

也就是说,每次变出房子,房子是一样的,但生活用品之类的,都是不管的。谁住谁负责添置。

** 每一个镜像可以变出一种房子。那么,我可以有多个镜像呀 **

也就是说,我盖了一个欧式别墅,生成了镜像。另一个哥们可能盖了一个中国四合院,也生成了镜像。还有哥们,盖了一个非洲茅草屋,也生成了镜像。。。这么一来,我们可以交换镜像,你用我的,我用你的,岂不是很爽?

于是乎,就变成了一个大的公共仓库。
负责对Docker镜像进行管理的,是Docker Registry服务(类似仓库管理员)。
不是任何人建的任何镜像都是合法的。万一有人盖了一个有问题的房子呢?
所以,Docker Registry服务对镜像的管理是非常严格的。
最常使用的Registry公开服务,是官方的Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。

20.5 Docker的安装

1.安装依赖包
	$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 
2.设置阿里云镜像源
	$ sudo yum-config-manager --add-repo //mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
3.安装Docker-CE 
	$ sudo yum install docker-ce
4.启动docker
	# 开机自启
	sudo systemctl enable docker 
	# 启动docker服务
	sudo systemctl start docker
5.镜像加速配置
	#加速地址 : 阿里云控制台搜索容器镜像服务,进入容器镜像服务,左侧最下方容器镜像服务中复制加速器地址
	sudo mkdir -p /etc/docker
	sudo tee /etc/docker/daemon.json <<-'EOF'
	{
  		"registry-mirrors": ["你的加速器地址"]
	}
	EOF
	# 重新加载docker配置
		sudo systemctl daemon-reload
	# 重启docker
		sudo systemctl restart docker

20.6 Docker demo入门

1.拉去centoS:7镜像
	$ sudo docker pull centos:7
2.编写Dockerfile
   # 创建一个空文件夹
    $ sudo mkdir dockerFileStudy
   # 创建Dockerfile文件 (注意文件名称不要错,必须叫Dockerfile)
    $ sudo vim Dockerfile
   # 编写Dockerfile
    From centos:7
    ENTRYPOINT ["cd /"]
    ENTRYPOINT ["ls"]
   # 编译Dockerfile文件  -t 是后面的名字为打成镜像名
    $ sudo docker build -t test . 
   # 启动一个容器运行你的Dockerfile编译的镜像把
    $ sudo docker run test

20.7 下面你由你自己来翻阅资料编写一个Dockerfile来集成Tomcat并使用docker启动一个Tomcat吧~~~~

20.8 常见问题 :

1.安装Docker-ce报错 
    --> Processing Conflict: 1:docker-ce-cli-18.09.6-3.el7.x86_64 conflicts docker
    --> Processing Conflict: 1:docker-ce-cli-18.09.6-3.el7.x86_64 conflicts docker-io
    --> Processing Conflict: 3:docker-ce-18.09.6-3.el7.x86_64 conflicts docker
    --> Processing Conflict: 3:docker-ce-18.09.6-3.el7.x86_64 conflicts docker-io
    --> Finished Dependency Resolution	
    Error: docker-ce conflicts with 2:docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
    Error: docker-ce-cli conflicts with 2:docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
     You could try using --skip-broken to work around the problem
     You could try running: rpm -Va --nofiles --nodigest
# 尝试删除本机上的所有docker服务再次安装
	# 1、查看安装过的docker:
		$ yum list installed | grep docker
			containerd.io.x86_64                 1.3.7-3.1.el7                  @docker-ce-stable
			docker-ce.x86_64                     3:19.03.13-3.el7               @docker-ce-stable
			docker-ce-cli.x86_64                 1:19.03.13-3.el7               @docker-ce-stable
	# 2、卸载docker:
		$ sudo yum remove -y containerd.io.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64   
	# 3、删除容器镜像:
		$ sudo rm -rf /var/lib/docker
	# 4、 重新安装docker
		$ sudo yum install docker-ce
2. 编译Dockerfile报错 
		unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /usr/dockerbuild/Dockerfile: no such file or directory
# 查看Dockerfile名称是否有误
# 查看Dockerfile语法是否正确 左侧docker保留命令是否大写,右侧执行命令是否小写
3. 删除镜像报错
        Error response from daemon: conflict: unable to remove repository reference "test" (must force) - container cac0f265950c is using its referenced image 20c5428b958d
        
 # 使用 docker ps -a 查看此镜像是否有启动过的容器 ,如果有,先使用 docker rm 容器id 删除容器 再删除镜像 注意 docker ps - a 查看的是无论是否启动的容器都显示 而 docker ps 是只显示启动的容器
Tags: