2小时带你学会Docker

目录

一.Docker简介

1.Docker简介

2.为什么要用Docker

3.虚拟化与Docker

4.Docker核心概念

二.Docker核心命令

1.安装Docker

2.安装DockerCompose

3.Docker核心命令-镜像命令

4.Docker核心命令-容器命令

5.Docker核心命令-其他命令

三.Docker实战

1.安装JDK

2.安装Tomcat

3.安装MySQL

4.为什么使用数据卷

5.配置数据卷

6.容器数据卷Volume

7.MySQL持久化


一.Docker简介

1.Docker简介

(1).什么是Docker?

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

logo解释:

标志是一头鲸鱼携带着一堆容器。它正在向您发送这些信息的途中。Docker直译过来是码头工人,然而Docker给人的第一感觉是容器,容器技术英译为Linux Container, Container的直译有集装箱,容器两个意思。

(2).什么是"集装箱技术"

们都知道码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色,在于其格式划一,并可以层层重叠, 集装箱与集装箱之间互不影响于是乎,IT领域借鉴了这一理念,大家就在想,有没有可能大家 只需要关注程序本身?

我们都知道码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色, 「在于其格式划一,并可以层层重叠, 集装箱与集装箱之间互不影响」

(3).Docker概述

Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。

总结:说白了,Docker其实就是可以打包程序和运行环境,把环境和程序一起发布的容器。

2.为什么要用Docker

(1).Docker容器虚拟化好处

开发者需要能方便高效构建应用,并且任何时间任何地点都可以获取。

(2).Docker在开发和运维中的优势

对开发和运维( DevOps)人员来说,可能最梦寐以求的就是一次性地创建或配置,可以在任意环境、任意时间让应用正常地运行。而Docker恰恰是可以实现这一终极目标的瑞士军刀。

优势:

  • 更快速的交付和部署
  • 更高效的资源利用
  • 更轻松的迁移和扩展
  • 更简单的更新管理

(3).Docker与虚拟机对比

作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势。

特性

容器

虚拟机

启动速度

秒级

分钟级

磁盘使用

一般为MB

一般为GB

性能

接近原生

弱于

系统支持量

单机支持上千个容器

一般几十个

隔离性

完全隔离

完全隔离

3.虚拟化与Docker

(1).虚拟化技术

虚拟化技术是一个通用的概念,在不同领域有不同的理解。在计算领域,一般指的是计算虚拟化或通常说的服务器虚拟化。

简单的说,「虚拟化」,顾名思义,就是「虚拟」的,是「假」的,是形而上的,是观念上、逻辑上的划分。

举例说明

假设你现在手头上有一套房子,并且你要把它给租出去,租金的市场价是2000元/月。那么有没有办法把它租得更贵,获得6000元的租金呢?你想到了两个办法:

  1. 找一个不差钱的傻X租户,让他每月交6000元。
  2. 把房子租给4个单身狗,租金为1500元/人/月。

虚拟化分类:

  • 完全虚拟化
  • 硬件辅助虚拟化
  • 部分虚拟化
  • 超虚拟机化
  • 操作系统虚拟化

(2).简单理解:

可以理解为一栋楼是物理机、一栋楼里的各个房子是虚拟机、一个房子的几个小屋子是Docker

4.Docker核心概念

(1).Docker技术的三大核心概念:

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

(2).Docker镜像

Docker 镜像 (Image) 类似于虚拟机镜像,可以将它理解为个面向 Docker引擎的模板,包含了文件系统。

镜像从何而来

  • 从Docker Hub下载 maven-> 中央仓库
  • 通过Docker file自己创建出来

(3).Docker容器

Docker容器(Container)类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。

注意:

容器和镜像一样,也是若干层的叠加,唯一区别是所有只读层的最上面一层,是一层可读可写层,可以记住这个简单的公式:容器 = 容器镜像 + 可读可写层

(4).Docker仓库

Docker仓库(Repository)类似于代码仓库,是Docker集中存放镜像文件的场所。目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供稳定的国内访问。

注意:

Docker利用仓库管理镜像的设计理念与Maven非常相似。

二.Docker核心命令

1.安装Docker

(1).关闭防火墙

systemctl stop firewalld

(2).关闭selinux

vim /etc/selinux/config
SELINUX=disabled

(3).安装Docker引擎

yum install -y  docker

(4).启动Docker

systemctl start docker

(5).设置Docker自启动

systemctl enable docker

(6).测试Docker是否安装成功

docker run hello-world

2.安装DockerCompose

因为老Docker已经 停止服务了

(1).卸载

yum remove docker \
          docker-client \
          docker-client-latest \
          docker-common \
          docker-latest \
          docker-latest-logrotate \
          docker-logrotate \
          docker-selinux \
          docker-engine-selinux \
          docker-engine \
          docker-ce

 (2).关闭防火墙

systemctl stop firewalld

(3).关闭selinux

vim /etc/selinux/config
SELINUX=disabled

(4).设置安装仓库

#安装yum的工具包
yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2 --skip-broken
#更新本地镜像源
# 设置docker镜像源
yum-config-manager \
  --add-repo \
   https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
#将软件包信息提前在本地索引缓存,用来提高搜索安装软件的速度,建议执行这个命令可以提升yum安装的速度。
yum makecache fast

 (5).安装Docker引擎

yum install -y  docker

(6).启动Docker

systemctl start docker

(7).设置Docker自启动

systemctl enable docker

(8).测试Docker是否安装成功

docker run hello-world

(9).修复

vim /etc/docker/daemon.json

{
  "registry-mirrors": [

             "https://docker.nju.edu.cn",

        "https://hub.littlediary.cn",

        "https://hub.xdark.top",

        "https://dockerpull.org",

        "https://hub.crdz.gq",

        "https://docker.1panel.live",

        "https://docker.unsee.tech"

  ]
}

systemctl daemon-reload
systemctl restart docker

3.Docker核心命令-镜像命令

Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。

镜像下载

镜像是Docker运行容器的前提。

语法格式:
 

docker pull 镜像名字:[tag]

注意:

如果不指定tag,则下载Docker Hub公共注册服务器中仓库的最新版本。

查看镜像

列出本地主机上已有的镜像。

[root@docker ~]# docker images
REPOSITORY  TAG    IMAGE ID  CREATED  SIZE

参数:

  • 来自于哪个仓库,比如 ubuntu仓库。镜像的标签信息,比如14.04。
  • 镜像的ID号(唯一)。
  • 创建时间。
  • 镜像大小。

镜像的ID信息十分重要,它唯一标识了镜像。

镜像搜索

搜索远端仓库中共享的镜像,默认搜索Docker Hub官方仓库中的镜像。

docker search  [镜像名字]

参数:

可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、星级 (表示该镜像的受欢迎程度)、是否官方创建、是否自动创建等。

删除镜像

使用镜像的标签删除镜像

docker rmi 源名字
docker rmi image id

id写前两位就可以了

4.Docker核心命令-容器命令

当我们有了镜像,才可以创建容器, 创建一个centos容器来学习

(1).创建容器

Docker的容器十分轻量级,用户可以随时创建或者删除容器。

语法格式:

docker create -it 镜像名字

注意:

使用docker create命令新建的容器处于停止状态,可以使用docker start命令来启动它。

(2).列出容器

docker ps

参数:

  • -a: 显示未启动容器
  • -q:返回容器id号

(3).新建并启动容器

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态( stopped)的容器重新启动。所需要的命令主要为docker run,等价于先执行docker create命令,再执行docker start命令。

语法格式:

docker run 镜像名字 /bin/echo 'hello world'

Docker在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载。
  • 利用镜像创建并启动一个容器。
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
  • 从地址池配置一个IP地址给容器。
  • 执行用户指定的应用程序。
  • 执行完毕后容器被终止。

下面命令则启动一个bash端,运行用户交互

docker run -t -i 镜像名字  /bin/bash

参数:

其中,-t选项让Docker 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。

exit命令退出。

(4).守护态运行

多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。用户可以通过添加-d参数来实现。

语法格式:

docker run -d 镜像名字 /bin/sh -c  "while true; do echo hello world ;sleep 1 ;done"

容器启动后会返回一个唯一的ID,也可以通过docker ps命令来查看容器信息:

docker ps

(5)获取容器输出信息

docker logs 容器id

(6).终止容器

语法格式:

docker stop 容器id

处于终止状态的容器,可以通过docker start命令来重新启动:

docker start 容器id

此外,docker restart命令会将一个运行态的容器终止,然后再重新启动

docker restart 容器id

(7).进入容器

在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息。某些时候如果需要进入容器进行操作,有多种方法,包括使用docker attach命令、docker exec命令,以及nsenter工具等。

attach命令

语法格式

docker attach 容器id

exec命令

Docke自1.3版本起,提供了一个更加方便的工具exec,可以直接在容器内运行命令。例如进入到刚创建的容器中,并启动一个bash:

docker exec -it 容器id  /bin/bash

简单总结:

attach的话我exit以后这个镜像自动stop,exec的话我exit依然还在

(8).删除容器

语法格式

docker rm 容器id

参数:

  • -f, --force=false强行终止并删除一个运行中的容器。
  • -l, --link=false删除容器的连接,但保留容器。
  • -V,--volumes=false删除容器挂载的数据卷。

(9).退出

#如果docker容器在启动的时候没有加 -d 参数
exit # 会直接停止同期并退出
Ctrt + p + q # 容器不停止 并退出

5.Docker核心命令-其他命令

(1).查看日志

语法格式

docker logs 容器id
参数:
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

(2).查看容器里面的进程

语法格式:

docker top 容器id

(3).从容器拷贝文件到主机上

docker cp 容器id:容器内路径   目录路径

三.Docker实战

1.安装JDK

(1).查看JDK镜像

docker  search  openjdk:17

(2).下载JDK镜像

docker  pull  openjdk:17

(3).运行JDK镜像

docker run   openjdk:17  java -version

2.安装Tomcat

(1).查看Tomcat镜像

docker search docker.io/tomee

(2).下载Tomcat镜像

docker pull docker.io/tomee

(3).启动Tomcat镜像

[root@docker ~]# docker run -d --name mytomcat -p 9090:8080 docker.io/tomee

3.安装MySQL

(1).查看MySQL镜像

docker search mysql:5.7

(2).下载MySQL镜像

docker pull mysql:5.7

(3).启动MySQL镜像

docker run --name mysql -d  -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456  mysql:5.7
参数:
-p 我们以后使用3307 端口来访问mysql 为了防止黑客攻击
-e 配置环境变量
MYSQL_ROOT_PASSWORD 设置容器内mysql root 密码

4.为什么使用数据卷

(1).什么是容器数据卷

Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)

(2).问题引入:

  • Docker容器删除后,在容器中产生的数据还在吗?
  • Docker容器和外部机器可以直接交换文件吗?
  • 容器之间能进行数据交互?

(3).数据卷概念

  • 数据卷是宿主机中的一个目录或文件。
  • 当容器目录和数据卷目录绑定后,对方修改会立即同步。
  • 一个数据卷可以同时被多个容器同时挂载。
  • 一个容器也可以被挂载多个数据卷。

(4).数据卷使用

  • 容器数据持久化。
  • 外部机器和容器间接通信。
  • 容器之间数据交换。

5.配置数据卷

(1).命令

docker run  -v 宿主机目录(文件):容器内目录(文件)
webapps
注意事项
1. 目录必须是绝对路径
2. 如果目录不存在则会自动创建
3. 可以挂载多个数据卷

示例:

给Tomcat服务器挂载/opt/webapps路径。

docker run -d --name mytomcat -p 8080:8080 -v 
/opt/webapps:/usr/local/tomcat/webapps tomcat

6.容器数据卷Volume

(1).Volume基本使用

参数: create # 创建数据卷 inspect #查看数据卷元数据 ls #查看数据卷列表 prune #删除所有未使用的卷 rm #删除数据卷

(2).自定义一个

docker volume create edc-tomcat-vol
其实这个volume create和直接docker create区别不大的 只不过这个是先创建再用那个是先用,发现没有再创建

(3).查看所有容器卷

docker volume ls

(4).查看置顶容器卷详情信息

docker volume inspect edc-tomcat-vol

(5).删除数据卷

docker volume rm edc-tomcat-vol

(6).使用指定卷容器

docker run -d -it --name=edc-tomcat -p 8080:8080 -v edc-tomcat-vol:/usr/local/tomcat/webapps tomcat
注意:
-v代表挂载数据卷,这里使用自定数据卷edc-tomcat-vol,并且将数据卷挂载到/usr/local/tomcat/webapps 。如果没有通过-v指定,那么Docker会默认帮我们创建匿名数据卷进行映射和挂载。

7.MySQL持久化

(1).搜索镜像

docker search mysql:5.7

(2).下载镜像

docker pull mysql:5.7

(3).运行镜像:

docker run -d -p 3306:3306  \
-v /opt/mysql/conf:/etc/mysql/conf.d  \
-v /opt/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 --name my-mysql mysql:5.7

(4).具名和匿名挂载

语法格式:

-V   容器内路径             #匿名挂载
-v   卷名:容器内路径           #具名挂载
-v   /宿主内路径:容器内路径        #指定路径挂载

扩展:

ro  readonly  # 只读
rw  readwrite # 可读可写
参数:
通过 -v 容器内路径 ro rw 改变目录读写权限

示例:

docker run -d -P --name tomcat -v my-nginx:/etc/nginx:ro tomcat


docker run -d -P --name tomcat -v my-nginx:/etc/nginx:rw tomcat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值