Docker之带你走一遍篇

一、为什么要使用Docker

  • 首先,我们要知道为什么要用Docker!
  • 传统的虚拟化 要做硬件虚拟化,因此在性能上会打上折扣。而且还很占资源。
  • Dokcer 不做硬件虚拟化,直接将应用程序运行在宿主的内核上,性能接近原生,而且资源消耗小。 使用Dokcer,就是快!

二、Docker 引擎

1.客户端
	有一个cli命令行工具,可以通过输入命令。让客户端去请求服务器的rest api.
2.服务器
	是一个守护进程,对外暴露了rest api,也就是说客户端可以通过rest api来操作服务器

Docker引擎管理着镜像、容器、网络、数据卷。

在这里插入图片描述

  • 使用了Docker以后,就会得到这样的效果 开发了一个项目,部署到服务器上。此时,服务器上需要有java,tomcat.
    所以我们需要安装java,tomcat,但是安装的过程非常繁琐,而且容易出现bug,而且配置信息还不一定是成功的,等等这些因素都可能出现。
    所以可以使用Docker,直接从远程仓库,拉取一个Tomcat镜像。这个镜像里就已经拥有了Java,拥有了常用的配置信息。然后可以直接运行得到一个容器,启动容器,就能使用了!

三、容器和镜像的概念

1.镜像
镜像就好比面向对象中的类。
2.容器
容器就好比面向对象中的对象。

docker客户端通过命令去通知docker服务器,让docker服务器去远程仓库上拉取一个镜像到本地。
再通过docker客户端执行创建容器的命令。让docker服务器通过镜像创建出容器。

四、Docker镜像

  • 镜像的分层构建
    Docker镜像被设计时是按照分层构建的思路进行设计,也就是说每一次都是相对独立的事物,上一层和下一层之间的联系不大,这样在操作镜像时得到复用。

五、Docker 容器

镜像创建出的一个运行状态的事物。 容器和容器之间是独立的,是隔离的。

容器的操作:
1.启动容器
	docker  run  tomcat
	docker  start 容器id/容器名  
2.停止容器
	docker  stop 容器id/容器名 
3.删除容器
	docker rm容器id/容器名
4.查看容器
	docker ps
5.查看所有容器,包括已经停止的容器
	docker  ps  -a
6.以守护态的形式运行容器
	docker run -d tomcat    
7.运行容器时映射容器暴露的端口
	docker  run -p 80:8080 tomcat 
	docker run -P tomcat
-P: 提供一个随机映射的端口
8.运行容器时给容器命名
	docker   run   -p 8080:8080 -d   --name  容器名   镜像名
9.停止所有容器
	docker stop $(docker ps)
10.删除所有容器
	docker rm $(docker ps -a)

六、在Ubuntu上安装Docker

1.安装Docker
$ curl -fsSL get.docker.com -o get-docker.sh
--可能会出现 404 错误,请移步下面的特别说明
$ sudo sh get-docker.sh --mirror Aliyun

2.配置镜像加速器
	vim /etc/docker/daemon.json
	加入以下内容:
{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ]
}
再重启docker服务
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

七、操作Docker镜像

1. 拉取镜像
	docker  pull   镜像名    ==>  从官方仓库中拉取镜像,拉取的是镜像的latest版本
	docker  pull   tomcat:9.0.22  ==》 从官方仓库中拉取镜像,拉取的是9.0.22版本
	docker  pull  192.168.2.177:6533/tomcat:9.0.22 ==>  从私有仓库中拉取镜像

2.运行镜像,得到容器
1)直接运行容器

docker  run  镜像名
2)以交互的方式运行容器并进入容器
  docker run -it --rm 镜像名 bash
3)以交互的方式进入到正在运行的某一个容器
  docker  exec -it --rm 容器名/容器id bash

3.查看当前所有的镜像
	docker images

4.删除镜像
	docker  image  rm   镜像名
	docker  rmi   镜像名

八、自定义镜像

无论是官方的镜像,还是自定义镜像,都得通过Dockerfile文件来创建。
如何编写Dockerfile文件,来创建自定义镜像

1.Dockerfile文件中可以使用的命令有哪些?
	FROM
	RUN
2.如何通过Dockerfile文件创建出自定义镜像?
	docker build -t 镜像名[:标签]  .

目标:将项目整合在tomcat中,创建出一个自定义Docker镜像

九、Dockerfile命令

 - 1.FROM 	 指明当前镜像的基础镜像
   	2.RUN  		执行shell脚本的指令
   	3.WORKDIR    		确定工作路径
   	4.COPY 			将文件复制到指定路径内
   	5.ADD 			往往用于将tar.gz压缩包复制到指定镜像内的路径内,然后自动解压,解压完后自动删除压缩包。

下面图示是通过运行dockerfile文件来将自己的一个项目压缩包copy到目标tomcat下,从而在该tomcat镜像获得的容器中可以访问到我copy过去的项目:

在这里插入图片描述
Dockerfile(这里使用的是ADD,效果和COPY一样,但是显得更加方便好用):

FROM tomcat
WORKDIR /usr/local/tomcat/webapps/ROOT/
RUN rm -rf *
ADD ./ROOT.tar.gz .
WORKDIR /usr/local/tomcat/

附上一些很常用也很基础的docker命令:

docker ps
docker images
docker ps -a
docker rm 容器id
docker stop 容器id
docker start 容器id
docker stop $(docker ps)
docker rm $(docker ps -a)

Dockerfile的指令:

1、FROM  RUN   WORKDIR   COPY   ADD
2、ENV
		设置环境变量,通过设备变量,就可以在RUN中使用
		ENV  my_version 1.0
		RUN  $my_version

3、 CMD
		运行一个文件。并传入参数
		CMD ["catalina.sh", "run"]   运行catalina.sh文件并传入参数run
4、 VOLUME 
		指定数据卷
		数据卷的作用就是将一些动态的数据和本地文件/文件夹进行绑定,在读写时使用的是本地的文件/文件夹。    
5.ENTRYPOINT 
		和cmd类型,但是cmd只能执行一次,entrypoint可以执行多次。

十、Docker Compose

1.介绍
服务编排技术

Docker 搞微服务的程序员的春天

我们会了哪些技术:
Docker的常用命令、Dockerfile来自定义镜像、Docker数据卷

Docker Compose是对服务进行编排成项目的技术
1.服务: 一个容器
2.项目:  多个容器的组合

2.安装

请求安装包	
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
改变权限
chmod +x /usr/local/bin/docker-compose

3.使用docker-compose
1)编写docker-compose.yml文件

注意:		yml实际上是一种配置文件的格式文件。
			yml中不能使用tab键,层级关系必须使用空格来表示。
			名字后的冒号后,必须带一个空格
示例:
    version: '3'       yml语法的版本
    services:         编排的项目   固定的
      web1:         服务名称   自定义
        restart: always  当虚拟机重启后 服务也自动重启
        image: 'tomcat'  该服务使用的镜像
        ports:          映射的端口 (数组)
          - '80:8080'    - 表示一个数据项
      web2:
        image: 'tomcat'
        container_name: 'tomcat1'      容器名字
        ports:
          - '81:8080'
      mysql:
        image: 'mysql:5.7.25'
        container_name: 'mysql'
        ports:      - '3306:3306'
        volumes:       数据卷
          - '/usr/local/docker/mysql/conf:/etc/mysql'
          - '/usr/local/docker/mysql/logs:/var/log/mysql'
          - '/usr/local/docker/mysql/data:/var/lib/mysql'

2)使用docker-compose up命令来启动项目

注意: docker-compose up 命令不能随意使用。必须在docker-compose.yml相同路径下才能使用
	docker-compose up 以主进程的方式启动项目中的所有服务,并且打印服务日志
	docker-compose up -d 以守护太的方式启动所有服务
	docker-compose restart 重启所有服务

3)docker-compose down 来关闭服务

如果向把服务删除,服务中又配置了restart  always,那么必须先docker-compose down,再删除docker-compose.yml,否则restart  always的容器是一直会在的。

补充

镜像的上下文路径

构建镜像时 实际上是docker服务器来完成,因此Dockerfile里的每一行指令都是Docker服务器在执行。
当执行到"ADD ./ROOT.zip ."时,这个ROOT.zip哪里来?
不是来自于客户端本地,而是客户端已经将该资源打包发送给Docker服务器。

客户端会把哪些资源打包发送给docker服务器呢?
就是通过构建的命令 : "docker build -t 自定义镜像名."其中这个"."就是指明上下文路径,也就是说该路径下的所有的资源都会被打包,发送给docker 服务器。
画个简图:
在这里插入图片描述
以上就是我对docker理解的大概总结,希望能帮到大家,如果有错的话也欢迎指出,不喜勿喷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值