文章目录
一、认识docker
Docker是一个开源的容器化平台,它可以让开发者将应用程序及其依赖项打包成一个可移植的容器,之后在任何支持Docker的环境中运行
1.镜像
镜像是一个只读的模板,包含了运行容器所需的文件系统、应用程序代码、运行时环境、库等。
2.容器
容器是基于镜像创建的运行实例,它是一个独立的、可执行的环境,包含了应用程序及其所有依赖项。容器之间互相隔离,每位容器都有自己的文件系统、进程空间、网络配置等,如同在一台化学机上运行着多个互相独立的虚拟机一样,但容器相比虚拟机愈发轻量级,启动速率更快,资源占用更少。
浅显版解释
就好比我们用U盘拷贝了一份QQ,把她们置于其他笔记本上运行,其他笔记本就是容器,U盘里存的QQ就是镜像
一个容器就是一个独立的Linux系统,通过镜像创建容器,就是在Linux系统中运行这个镜像所指代的程序,如MySQL,Nginx等
3.库房
库房是用于储存和共享镜像的地方,类似于代码库房。Docker官方提供了一个公共的库房DockerHub,上面包含了大量的官方镜像和社区贡献的镜像,开发者可以便捷地从库房中拉取所需的镜像,也可以将自己打造的镜像推送到库房中供别人使用。
二、快速安装
考虑到大部份初学者没有Linux操作系统,本节教程将告诉你们怎么在windows上学习和使用docker命令
Linux下安装docker请看文章最后部份
首先先下载dockerdesktop:
安装完成后,可以测试一下在cmd中是否能执行docker命令
1.
可选
为docker配置镜像加速
直接在docker上拉取镜像会用到美国的库房,假如没有梯子可能会比较慢或则频繁拉取失败,可以会docker配置国外镜像来加速镜像的拉取
阿里云容器镜像服务地址:
每位人都有一个独属的加速器地址,复制自己的地址
打开设置,找到dockerengine,在如下位置粘贴刚刚复制的地址
2.创建并运行你的第一个docker容器
dockerrun-d--namemysql-p3306:3306-eTZ=Asia/Shanghai-eMYSQL_ROOT_PASSWORD=123mysql
启动成功,在dockerdesktop中点击containers可以看见我们的mysql容器早已启动
我们可以用Idea联接数据库测试一下,输入用户名root和密码123,显示联接成功,联接上后可以看见mysql默认的几个数据库
这么我们来解释一下这个命令是哪些意思呢
dockerrun-d--namemysql-p3306:3306-eTZ=Asia/Shanghai-eMYSQL_ROOT_PASSWORD=123mysql
综上所述,这条命令的作用是在后台创建一个名为mysql的容器红旗linux5.0,将主机的3306端口映射到容器内的3306端口,设置容器内的时区为北京时区,并将MySQL数据库root用户的密码设置为123,最后使用mysql镜像来启动容器并运行其中的MySQL服务。
可能有的男子伴会有疑惑,这个环境变量我起个名子叫MYSQL_ROOT_PASSWORD设置个123,我的mysql的root用户密码就是123了?
那我起别的名子行吗?我如何晓得要设置什么环境变量?
回答:起别的名子不行,要设置什么环境变量要按照镜像提供方的文档来决定,设置MYSQL_ROOT_PASSWORD环境变量是mysql镜像提供方设计的规则,设置好了以后,在创建容器的时侯,镜像里会有脚本代码读取这个环境变量的值设置给root用户的密码
三、常用docker命令1.dockerpull与dockerpush
dockerpull
拉取镜像到本地,如拉取mysql镜像可以用dockerpullmysql:版本号,不写默认是最新
dokcerpush【选学】
这儿用pushmysql到自己的库房做示范
在自己的dockerhub中登陆帐号,并创建库房
先给mysql镜像打个标签,dockertag本地镜像名:tagnamespace/库房名
之后再用dockerpush命令推送
可以在dockerhub库房中看见我们刚才推送的mysql镜像库房
2.dockerimages
查看本地都有什么镜像
3.dockerrmi
删掉本地镜像
4.dockerps
列举当前正在运行的Docker容器
dockerps-a,列举所有创建的容器,包括停止运行的容器,-a代表--all,“ps”是“processstatus”的简写
5.dockerrm
删掉指定容器,删掉前须要停止运行容器,或使用dockerrm-f强制删掉
dockerrm容器ID或则容器名都可以删掉容器
6.dockerlogs
查看容器运行日志
7.dockerexec
进行容器内部
dockerexec-itrabbitmqbash这条命令的意思是在一个正在运行的名为rabbitmq的Docker容器中执行交互式的bash命令
-i和-t是两个常用的选项,一般一起使用。
-i表示交互式(interactive)操作docker images 目录,它会保持标准输入打开,促使用户可以与容器内的命令进行交互docker images 目录,输入命令并获取输出。
-t表示分配一个伪终端(tty),它为容器内的命令提供了一个类似于终端的环境,致使命令的输出更便于阅读和交互,而且支持一些基于终端的操作,如使用上下键查看历史命令等。
8.dockerstop和dockerstart
dockerstop停止容器运行
dockerstart开始运行容器
9.dockerrun
后面早已演示过使用dockerrun创建并运行mysql镜像
dockerrun-d--namemysql-p3306:3306-eTZ=Asia/Shanghai-eMYSQL_ROOT_PASSWORD=123mysql
这么dockerrun和dockerstart有哪些区别呢?
10.dockersave和dockerload
dockersave把镜像打包到本地,tar和zip包都行,假若一个镜像有多个tag,可以在前面加上tag保存指定版本的镜像,倘若不写的话,所有版本就会被保存,加载的时侯所有版本也就会被加载
dockerload用于加载本地的压缩包成为docker镜像
11.dockerbuild
通常dockerbuild是拿来执行Dockerfile文件的,制做自己的镜像时会用到
假定当前目录下有一个Dockerfile文件
dockerbuild-tparan/myapp:3.0-f./Dockerfile.
-t--tag:用于为建立的镜像指定标签和名称,格式为
库房地址
用户名
镜像名
标签
,不写库房地址默认就是dockerhub的地址,没有私服可以不用管。-f--file:指定Dockerfile的路径和文件名。最后的.代表重构上下文的路径,也就是告诉Docker,将当前目录及其包含的所有文件和子目录作为建立镜像时可访问的范围。
Dockerfile文件示例
# 基础镜像
FROM openjdk:8-jre-slim
# 作者
MAINTAINER xxx
# 配置
ENV PARAMS=""
# 时区
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 添加应用
ADD target/my-app.jar /my-app.jar
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /my-app.jar $PARAMS"]
四、数据卷
数据卷的作用就是把容器内部的文件或文件夹映射到宿主机上,这样想更改某个文件就不须要再用dockerexec命令挪到容器内部了,比较便捷,同时如mysql储存的文件,我们希望它能挂载到宿主机上红旗linux6.0,这样不会造成容器的容积过大,或则删掉容器造成数据也没了。
容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的
命令作用
dockervolumecreate
创建数据卷
dockervolumels
查看所有数据卷
dockervolumerm
删掉指定数据卷
dockervolumeinspect
查看某个数据卷详情
dockervolumeprune
去除数据卷
1.快速体验
dockerrun-d--namenginx-p80:80-vhtml:/usr/share/nginx/htmlnginx
把nginx容器内部的/usr/share/nginx/html映射到html数据卷上,这儿映射的是文件夹,映射文件和文件夹都行
使用dockervolumeinspecthtml命令查看数据卷的详尽信息,发觉html数据卷对应的是/var/lib/docker/volumes/html/_data文件夹(Linux系统下有效)
假如把html换成一个本地存在的目录,它就不会默认储存到/var/lib/docker/volumes/xxx/_data下了,而是会储存到你给的本地目录下
# 挂载本地目录
-v 本地目录:容器内目录
# 挂载本地文件
-v 本地文件:容器内文件
五、docker网路