带你快速掌握Docker的使用

Posted 小样5411

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你快速掌握Docker的使用相关的知识,希望对你有一定的参考价值。

一、 数据卷

承接上一篇:带你快速掌握Docker的使用(1)

经过上篇的部署操作,我们知道部署一个工程,需要使用cp命令将宿主机内的library.war文件复制到容器内部,这样如果要操作容器内部的文件是十分不方便的,我们一般不会直接cd进入容器内部进行操作,而会用数据卷这个东西。数据卷就是将宿主机的一个目录映射到容器的一个目录中。这样可以在宿主机中操作目录中的内容,同时,容器内部映射的文件也会跟着一起改变,这样就会起到一种联动的效果,间接操纵容器。

docker volume create 数据卷名称		//创建默认在var/lib/docker/volumes/数据卷/_data下

在这里插入图片描述映射内容会在_data目录下
在这里插入图片描述

docker volume inspect 数据卷名称
docker volume ls		//查看所有数据卷
docker volume rm 数据卷名称		//删除数据卷

在这里插入图片描述
在这里插入图片描述

docker run -v 数据卷名称:容器内部的路径 镜像id	//当映射数据卷时,若数据卷不存在,Docker会帮你自动创建
docker run -v 路径:容器内部的路径 镜像id		//直接指定一个路径作为数据卷的存放位置(推荐)

用下面命令把容器停止并删除,再用上面命令重新创建

docker stop 容器id
docker rm 容器id
docker ps -a		//查看是否还有
docker volume create volume_library_tomcat		//创建数据卷
docker run -d -p 8080:8080 --name library_tomcat -v volume_library_tomcat:/usr/local/tomcat/webapps fa	//运行容器并和数据卷做一个映像

输入地址,可以运行
在这里插入图片描述

将library.war包复制到_data目录下

 cp library.war /var/lib/docker/volumes/volume_library_tomcat/_data

再次输入地址,即可访问,这次我们并没有把war包放进容器内,但是却可以访问,这就证明,数据卷映射到了容器中
在这里插入图片描述
接下来尝试第二种手动指定一个路径作为数据卷的存放位置
如下

docker run -d -p 8080:8080 --name library_tomcat -v /opt/volume_ssm_tomcat:/usr/local/tomcat/webapps/ fa

在这里插入图片描述
在这里插入图片描述

两种创建方式的区别

docker run -v 数据卷名称:容器内部的路径 镜像id
docker run -v 路径:容器内部的路径 镜像id			(推荐)

上面创建数据卷会连带tomcat容器文件一起放在数据卷中,下面手动指定路径方式不会将tomcat容器中文件带到数据卷中,数据卷创建出来是空的,需要手动添加,以后常常用第二种

二、Docker的自定义镜像

我们要知道中央仓库有供我们下载的许多镜像,但也是Docker用户自己上传上去的,现在我们就来自定义自己的Docker文件

新建一个文件,没有后缀叫Dockerfile,进去编辑信息,下面介绍自定义镜像常用内容,注意这里必须是Dockerfile,其他名字还不行

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

Dockerfile中先写下面两行,意思是自定义daocloud.io/library/tomcat:8.0.45这个镜像,然后把当前目录的library.war复制到 /usr/local/tomcat/webapps目录下
在这里插入图片描述

from daocloud.io/library/tomcat:8.0.45
copy library.war /usr/local/tomcat/webapps

下一步:Dockerfile文件和library.war文件拖拽到Linux系统中,通过Docker的命令来制作镜像

docker build -t 镜像名称:[tag] .		//[tag]表示版本 .表示当前目录
docker build -t library_tomcat:1.0.0 .

先创建一个library_tomcat目录,然后将刚刚两个文件拖拽到这个目录下
在这里插入图片描述
在这里插入图片描述
这样就library项目已经部署到镜像里面去了,我们只要运行即可

docker run -d -p 8081:8080 --name library_tomcat_my a54

在这里插入图片描述
输入地址,访问成功
在这里插入图片描述
你这边运行成功以后,那么就可以把这个自定义的镜像传给其他人,其他人也只要拿到镜像,run就行了,这样别人用的环境也和你的完全一致

三、Docker-Compose

之前运行一个镜像,需要添加大量的参数,不方便。我们可以用Docker-Compose编写这些参数,比如以前写一个run,后面跟一堆参数run -d -p …,以后只要通过一个docker-compose.yml文件去维护即可,这样就方便了许多,十分便捷的管理mysql和Tomcat容器。

3.1 下载Docker-Compose

下面这篇博客里有这个Docker-Compose,提取密码是lu0x,下载的版本是1.24.1
https://blog.csdn.net/thethefighter/article/details/107565144
下载好直接拖拽到root目录下,然后放到/usr/local目录下,将docker-compose变成可执行文件

chmod 777 docker-compose

在这里插入图片描述
放到bin目录下
在这里插入图片描述
vi /etc/profile配置一下环境变量,将/usr/local/bin放到环境变量中,之后再加载一下source /etc/profile
在这里插入图片描述
在这里插入图片描述
输入docker-compose如果出现下面情况,则证明已经配置成功
在这里插入图片描述

3.2 编写docker-compose.yml

配置yml文件格式跟重要,key: value,key和value之间有空格,层级之间缩进打两下,是空格,不要打tab制表符,yml不识别tab,打注释都不能有tab,yml就是不能存在tab制表符

version: '3.1'
services:
  mysql:  #服务的名称
    restart: always
    image: daocloud.io/library/mysql:5.7.7
    container_name: mysql  #指定容器的名称
    ports: 
      - 3306:3306  #指定端口号
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Shanghai  #指定时区,东八区
    volumes:
      - /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql  #映射数据卷
  tomcat:
    restart: always
    image: daocloud.io/library/tomcat:8.0.45
    container_name: tomcat  #指定容器的名称
    ports: 
      - 8080:8080  #指定端口号
    environment:
      TZ: Asia/Shanghai  #指定时区
    volumes:
      - /opt/docker_mysql/tomcat_webapps:/usr/local/tomcat/webapps  #映射数据卷
      - /opt/docker_mysql/tomcat_logs:/usr/local/tomcat/logs

好不容易写完了yml文件后,就可以用docker-compse命令管理容器了
在这里插入图片描述
i进入编辑模式,将编写好的内容复制进去,wq保存退出
在这里插入图片描述
将之前启动的容器全部停止并删除

docker-compose up -d		#运行yml文件

在这里插入图片描述
在这里插入图片描述
这样就通过yml直接创建了容器,以后就直接用yml文件即可
还有一些命令可以了解下

docker-compose down	# 关闭并删除容器
docker-compose	start | stop | restart  #启动,关闭,重启容器

在这里插入图片描述
在这里插入图片描述

这样的话,用docker-compose管理就简单很多了,不用跟以前一样输入很多参数,一行命令就可以把需要启动的容器全部启动,只要开始配置一下yml文件即可

3.3 docker-compose配合Dockfile使用

部署项目工程,也只需要配置一个yml文件

version: '3.1'
  services:
    library:
      restart: always
      build:
        context: ../  #指定Dockerfile文件的路径,我这放在项目文件的上级目录
        dockerfile: Dockerfile  #指定Dockerfile文件名称
      image: library1.0.0
      container_name: library
      ports:
        - 8081:8080
      environment:
        TZ: Asia/Shanghai

到根目录mkdir命令新建一个目录docker_project,然后把自己创建的文件拖拽进根目录,Dockerfile内容和之前的一样,万一报utf8错误就把注释删了即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
cd到放docker-compose.yml文件夹下,运行yml文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以访问,即成功,但这个也存在一些问题,如果项目更新了,那么我们就又要打包成一个war包,然后通过这一步步的流程部署到容器中,这是一个机械的重复操作,能不能像git一样,直接输入git add. 以及git commit -m,这样的命令直接快速自动化打包上传部署,于是就不用我们繁琐的去操作,有!!!就是后面第3篇将会讲的Docker CI、CD

以上是关于带你快速掌握Docker的使用的主要内容,如果未能解决你的问题,请参考以下文章

初学C语言很难?带你快速掌握关键字!

一文带你快速掌握FastJSON的使用

带你快速了解 Docker 和 Kubernetes

Docker | 带你快速了解Docker

带你快速了解 Docker 和 Kubernetes

Docker | 大白话带你快速安装Docker,不懂你捶我