Docker学习笔记总结


一、Docker介绍

1.1 引言

Docker解决的痛点:
环境不一致问题,多用户操作系统下会互相影响,运维成本过高问题,关于安装软件成本过高等。

1.2 Docker的思想

  1. 集装箱

    会将所有需要的内容放到不同的集装箱中,谁需要这些环境就直接拿这个集装箱就可以。

  2. 标准化

    1. 运输的标准化:Docker有一个中央码头,所有上传的集装箱都放在这个中央码头。当需要某一环境,就直接指派“大海豚”去搬运这个集装箱。
    2. 命令的标准化:Docker提供了一系列的命令,帮助我们去获取\上传集装箱等操作。
    3. 提供了REST的API:衍生出了很多的图形化界面:Rancher等。
  3. 隔离性

    Docker在运行集装箱中的内容时,会在Linux的内核中单独开辟出一部分空间,这部分空间不会影响到其他程序。

  • 注册中心(中央码头):上面放的就是集装箱
  • 镜像:集装箱
  • 容器:运行起来的镜像

二、Docker的基本操作

2.1 安装Docker

# 1. 下载关于Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-data lvm2
# 2. 设置Docker的镜像源,否则默认国外的拉取非常慢
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3. 安装Docker
yum makecache fast
yum -y install docker-ce
# 4. 启动并设置为开机自动启动,测试

# 启动Docker服务
systemctl start docker

# 设置开机自动启动
systemctl enable docker

# 测试,使用hello-world模块
docker run hello-world

安装成功效果:
在这里插入图片描述

2.2 Docker的中央仓库

  1. Docker官方的中央仓库:镜像最全,但因为在国外,所以下载速度很慢。

    (hub.docker.com)

  2. 国内镜像网站:

    网易蜂巢(c.163yun.com/hub)、

    daoCloud(hub.daocloud.io)(免登录!)等。

  3. 在公司内部会采用私服的方式拉取镜像。

    (需要添加配置:/etc/docker/daemon.json)若不存在需要手动创建文件

    {
    	"registry-mirrors":["https://registry.docer-cn.com"],
    	"insecure-registries":["<公司docker服务ip>:<公司docker服务port>"]
    }
    # 重启两个服务
    systemctl daemon-reload
    systemctl restart docker
    

2.3 镜像的操作

docker pull:拉取镜像到本地
docker pull 镜像名称[:tag]		# tag:标签,为可选项,镜像版本

举例:docker拉取tomcat镜像

  1. 进入daocloud搜索tomcat,选择版本,点击拉取。

在这里插入图片描述

  1. 复制拉取命令。

在这里插入图片描述

  1. 执行docker指令。
docker pull daocloud.io/library/tomcat:8.5.16-jre8-alpine

执行效果:

在这里插入图片描述

联网进行下载,下载完成后进行SHA256校验,下载完毕。

Digest: sha256:0952282d72bf6254ebd361078d4262820973b94e250e30367048afb78cd8d9c6
Status: Downloaded newer image for daocloud.io/library/tomcat:8.5.16-jre8-alpine
daocloud.io/library/tomcat:8.5.16-jre8-alpine
docker images:查看全部本地的镜像

在这里插入图片描述

特别的,CREATED表示在中央仓库创建的时间。

docker rmi:删除本地镜像
docker rmi 镜像id
  • rmi:remove image的缩写。
  • 镜像id:即IMAGE ID,镜像的标识,是镜像的唯一id。
    (可以简写为前几个字母/数字)

在这里插入图片描述

docker load/save:镜像的导入、导出(不规范)

因为镜像大多是联网下载的。

将本地镜像导出:

docker save -o 导出路径 镜像id

加载本地镜像文件:

docker load -i 镜像文件

演示:

  1. 将本地环境下已安装的tomcat镜像打包导出,命名为my_tomcat.image:
    命令:docker save -o ./my_tomcat.image 4560891aa934
    在这里插入图片描述2. 为了演示差异性,先行删除已安装好的tomcat镜像
    在这里插入图片描述3. 导入我们产生的tomcat镜像文件
    命令:docker load -i my_tomcat.image
    在这里插入图片描述4. 此时tomcat镜像就已经导入成功。我们发现它的镜像id、文件大小都是和之前网络上下载的tomcat版本无异,说明此tomcat镜像id确实是唯一的。但是他的名称和tag都为<none>,所以为了后续操作,我们还是修改一下其名称比较好。
docker tag:镜像的重命名
docker tag 镜像id 重命名名称:tag名称

演示:
修改刚刚导入镜像的名称为my_tomcat,tag设为666,译为版本号
在这里插入图片描述

2.4 容器的操作

docker run:运行容器

简单写法:

docker run 镜像id
或
docker run 镜像名称[:tag]

常用写法:

docker run -d -p 宿主机端口:容器端口 --name 容器名称[:tag]

如果本地存在此镜像id或镜像名称,就会直接运行容器。
如果不存在,就会在网络上下载后完成运行。

  • -ddaemon):表示后台运行容器。不加此选项即为前台进程,会占满整个shell界面,如果想要执行其他操作,容器就随即停止了。
  • -pport):指定特殊端口。为了映射当前Linux系统端口和容器端口。
  • –name:容器名称。指定容器的名称。
docker start:启动容器

因为容器启动后内部环境不会变化,所以使用者希望重新启动容器时使用此命令。

docker start 容器id
docker stop:停止容器
docker stop 容器id

停止全部容器的命令:docker stop $(docker ps -qa)

docker rm:删除容器
docker rm 容器id

删除全部容器的命令:docker rm $(docker ps -qa),前提是需要先停止容器。

docker ps:查看正在运行的容器
docker ps [-q] [-a]
  • -aall):表示查看所有的容器,包括没有运行的容器。
  • -q:表示只查看容器的标识(id),不查看其他信息。
docker logs:查看容器日志
docker logs -f 容器id
  • -fflush):表示滚动查看日志的最后几行。
docker exec:进入容器内部
docker exec -it 容器id bash

run是启动镜像,带的是镜像id。start启动的是容器,带的是容器的id。

三、Docker应用

3.1 准备工程文件

如Java项目打包好的的war文件。

3.2 准备MySQL容器

运行MySQL容器

docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:5.7.4

3.3 准备tomcat容器

运行tomcat容器,之后将war包通过命令部署到容器内部即可。
命令:

docker cp 文件名称 容器id:容器内部路径

如本项目:docker cp ssm.war fe12ed123:/usr/local/tomcat

此时,通过web访问ip:3306端口就可以查看到ssm服务。

四、数据卷

前面为了部署ssm的工程,需要使用cp命令将宿主机内的ssm.war文件复制到容器内部。

  • 数据卷
    将宿主机的一个目录映射到容器的一个目录中。在宿主机中操作目录中的内容,那么容器内部的文件也会跟着一起改变。就像是容器在本地的一个操作符

4.1 创建数据卷

docker volume create 数据卷名称

创建数据卷之后,默认会存放在一个目录下:/var/lib/docker/volumes/数据卷名称/_data,此时只是在宿主机上创建目录,还未映射到容器内部。

4.2 查看具体数据卷详细信息

docker volume inspect 数据卷名称

4.3 查看全部数据卷

docker volume ls

4.4 删除数据卷

docker volume rm 数据卷名称

4.5 应用数据卷

  1. 当映射数据卷时,若数据卷不存在,Docker会自动创建。
    特点:会将容器内部自带的文件,存储在默认的存放路径中。
docker run -v 数据卷名称:容器内部的路径 镜像id
  1. 指定一个路径作为数据卷的存放位置【推荐】
    特点:不会将容器内部自带的文件,存储在默认的存放路径中。
docker run -v 路径:容器内部的路径 镜像id

eg:
docker run -d -p 8080:8080 --name ssm_tomcat -v /data/local/giturtle:/usr/local/tomcat/webapps b8djw6wd
启动容器时创建数据卷在giturtle这个数据卷目录,此目录时/usr/local/tomcat/webapps目录的映射,这个路径下是空的

五、Docker自定义镜像

我们拉取镜像的中央仓库,也是Docker的用户们上传上去的。下面讲解如何上传自定义的镜像文件。

1. 创建一个Dockerfile文件,并且指定自定义镜像信息,主要包括:

  • from:指定当前自定义镜像依赖的环境。
  • copy:将相对路径下的内容复制到自定义镜像中。
  • workdir:声明镜像的默认工作目录。
  • cmd:需要执行的命令(在workdir下执行,cmd可以写多个,但只以最后一个为准)。

eg:自定义一个tomcat镜像,并将ssm.war部署到tomcat中

from daocloud.io/library/tomcat:8.5.15-jre8 
copy ssm.war /usr/local/tomcat/webapps

(保证ssm.war与Dockerfile在同一目录)

  1. 将准备好的Dockerfile和相应文件拖拽到Linux操作系统中,通过Docker命令制作镜像。
docker build -t 镜像名称:[tag] .

此时创建出了自定义镜像,通过docker images可查看到。
.表示把当前目录下的Dockerfile文件制作成自定义镜像)

六、Docker-Compose

之前运行一个镜像需要添加大量的参数,现在可以通过Docker-Compose编写这些参数。类似于Makefile文件。
Docker-Compose可以帮我们批量的管理容器。
只需要通过docker-compose.yml文件维护即可。

6.1 下载Docker-Compose

  1. 去GitHub官网搜索Docker-Compose。
    (推荐1.24.1版本)
  2. 将下载好的文件发送至Linux操作系统中。
  3. 需要将文件名修改为Docker-Compose,给予其可执行权限。
  4. 方便后期操作,配置一个环境变量。在/etc/profile中环境变量里,添加/usr/local/bin目录,此目录下存放的就是Docker-Compose文件。
    (放置在两:之间即可)
  5. source /etc/profile加载一下配置文件,使其生效。此时在任意目录输入docker-compose命令,出现许多Options选项时说明配置加载成功。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

giturtle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值