带你快速掌握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的使用的主要内容,如果未能解决你的问题,请参考以下文章