主要为windows下docker的安装与使用~
初始Docker
Docker理解
对于docker的加简介,我们可以官网获取它的概念,接下来就从什么是docker、为什么要使用docker以及它的作用来进行一个快速入门
前提:项目在发布时,不仅需要其jar包同时需要配置其环境,在不同的平台上,每一个平台都需要配置一次,这个流程相当的繁琐且重复,这个时候,docker就提供了解决办法
1. 什么是docker
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
2. docker的作用
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
3. 为什么使用docker
简化开发流程:开发者可以将应用程序及其依赖项打包成一个容器,避免由于环境差异导致的问题。
提高部署效率:容器可以快速部署和启动,节省了部署时间。
提高系统资源利用率:Docker可以更高效地利用系统资源,减少资源浪费。
提高可维护性:容器可以更容易地管理和更新,确保应用程序的稳定性和安全性。
Docker架构
docker的基本组成包括镜像、容器、仓库
1. 镜像(images)
镜像是用于创建docker容器的模板,就相当于是一个 root 文件系统,里边包含了程序、资源、配置等
2. 容器(container)
容器是独立运行的一个或一组应用,是镜像运行时的实体。
3. 仓库(Repository)
仓库可看成一个代码控制中心,用来保存镜像,可以理解为代码控制中的代码仓库。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
4. 各组件之间的关系
仓库用来存放镜像,当然我们自己的镜像也可以存放的私有仓库中。镜像下载后需要进行,运行的过程中就会产生容器,我们的服务由容器来提供。用面向对象进行理解的话,镜像就相当于我们的一个类,里边包含了对象和属性,但是这个类使用时需要实例化,实例化这个就是我们的容器。
Docker在windows的安装
windows安装参照Windows Docker 安装 | 菜鸟教程
Docker安装Mysql
- 使用$ docker pull mysql:latest命令拉取mysql最新版镜像
- $ docker images命令行可以查看是否成功安装
- $ docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql运行mysql容器:
- -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
- MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码
- -e :设置环境变量,参数类型为KEY=VALUE,可以设置多个,环境由要安装应用的官方提供
- mysql:指运行镜像的名字,一般由两部分组成,镜像名:镜像版本,不写版本默认最新版本
在第一次运行时发生了如下错误,端口号被占用
#执行查询端口 netstat -ano| findstr :3306 查看端口使用情况
使用taskkill -PID 4 杀死该进程
如果显示拒绝访问,则使用管理身份打开cmd,然后执行
- 使用docker ps查看
Docker数据持久化
对于docker的概念请理解上来看,docker所具有的隔离性,会使得容器消失时,容器内的数据也随之消失,但是在某些情况下,容器丢弃后,可是容器中的数据我不想丢弃的时候,我们一般会使用两种方法,一个是数据卷,一个是挂载主目录。
数据卷
数据卷可以理解为目录或文件,设计目的就是为了数据的持久化和共享;
挂载数据卷的容器,称为数据卷容器;数据卷完全独立于容器的生存周期,所以容器删除时,对应挂载的数据卷不会被删除。
通过将容器内的目录挂载到主机上面,就可以让数据实时同步,不管是主机改动,还是容器里有变动,都会同步更新
1.1. Docker数据卷的创建与查看方法
1.1.1. 创建一个数据卷 My_Volume是数据卷名
docker volume create My_Volume
1.1.2. 查看本地数据卷
docker volume ls
1.1.3. 查看某个数据卷的具体信息
docker volume inspect My_Volume
1.1.4. docker启动一个挂载数据卷的容器
docker run -d -P \
--name web \
--mount source=My_Volume,target=/webapp \
training/webapp \
python app.py
- -d表示创建的docker容器以后台方式运行;
- -P表示将docker容器所有端口发布到主机端口,docker容器将每个公开的端口绑定到主机上一个随机端口,且主机的随机范围在/proc/sys/net/ipv4/ip_local_port_range文件中查看;
- --name web表示创建的容器名字为web;
- --mount source=My_Volume,target=/webapp表示加载My_Volume数据卷到web容器的/webapp目录上;
- training/webapp表示创建web容器的镜像;
1.2. docker数据卷的删除
1.2.1. docker删除某个数据卷
docker volume rm 数据卷名
1.2.2. docker删除所有数据卷
docker volume prune
1.3. MySql在docker中的持久化
1.3.1. 删除之前的mysql容器
这里只是因为反复练习所以需要删除,如果不是联系的话,可以不删除
1.3.2. 创建MySql_Volume数据卷
docker volume create MySql_Volume
1.3.3. docker启动一个挂载数据卷的容器
docker run -itd --name mysql01 --mount source=MySql_Volume,target=/data mysql
--name :该容器的名称
--mount:表述挂载,等同于-v
source=MySql_Volume,target=/data:表示将该容器挂载在数据卷MySql_Volume的data下
mysql:表示创建该容器的镜像
挂载成功校验:
1.通过 exec 命令对指定的容器执行 bash:
docker exec -it 容器ID或name bash
2.切换到指定的容器目录下
3.创建一个文件
4.在本地目录进行查看
挂载本地目录
Docker容器启动时,如果要挂载宿主机上的一个目录,可以用-v 或者 - mount参数指定。
# docker run -it -v 主机目录:容器目录
-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。
冒号”:”前后的路径必须是绝对路径,以下斜线“/”开头。
宿主机目录如果不存在,则会自动生成。
1.1. MySql在docker中的持久化
1.1.1. 删除之前mysql容器
1.1.2. 使用命令运行容器并挂载
run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
其中,/home/mysql/conf 是主机目录,/etc/mysql/conf.d是容器目录,后边data是容器目录
注意:如果按照上述方法写主机目录,docker会在虚拟机寻找此目录而非虚拟机
挂载在windows目录下,地址为/d/home/... /d表示挂载在d盘
1.1.3. 查看是否成功
tips:
--mount 以及 -v的区别:
--mount 参数:
这是一种更为灵活和强大的挂载方式,允许你指定多个选项。
使用 --mount 参数,你可以指定挂载的类型(volume、bind mount),源路径、目标路径,并且可以设置一些额外的选项,比如读写权限。
-v 参数:
这是一种简化的挂载方式,提供了较为简洁的语法。
用 -v 参数,你只需提供源路径和目标路径即可。
Docker容器相关命令
常用的镜像命令
忘记命令时可以使用--help查看
1)查看安装的镜像:
docker images
2)下载指定镜像:从docker仓库下载指定镜像,也叫拉取和git相同
docker pull 镜像名
3)打包指定镜像:
docker save -o 打包的包名 要打包的镜像名:版本号
4)删除指定镜像:
docker rmi 镜像名:版本
5)解析打包的镜像:
docker load -i 包名 -q
-i :后跟要解析的包名
-q :不要输出信息,可选
常用的容器命令
1)创建容器:
docker run -d --name 容器名 -p 宿主机端口:进程端口(容器内) 镜像名称
-d:表示后台运行,一般不省略
--name :后跟容器名
-p :后跟端口映射
-e :环境变量,可选
命令最后添加镜像名称
2)查看运行的容器:
docker ps
3)查看所有容器:
docker ps -a
4)停止容器:
docker stop 容器名
5)启动容器:
docker start 容器名
6)查看日志:
docker logs -f 容器名
-f:持续输出日志信息
7)进入容器:一个容器就模拟了一个操作系统
docker exec -it 容器名 bash
-it:表示添加一个可输入的终端,后跟容器名
bash:交互方式,bash表示命令行交互方式
8)删除容器:
docker rm 容器名
注意:删除运行的容器时会提示报错,有两种办法:1、停止在删除,2、容器名后面添加-f参数进行强制删除
9)查看容器详情:
docker inspect 容器名