快速构建、运行、管理应用的工具(一键部署)
快速入门
1.Mysql 部署 镜像:
拉取MySql镜像
docker pull mysql:latest
查看本地镜像(是否成功安装了MySql)
docker images
运行容器
mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
查看是否安装成功(查看进程)
docker ps
查看所有进程
docker ps -a
2.命令解读
docker run -itd
--name mysql-test
-p 3306:3306
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123456
mysql
docker run :创建并运行一个容器,-d 是让容器在后台运行
--name mysql:给容器起个名字,必须唯一
-p 3306:3306:设置端口映射
-e KEY=VALUE︰是设置环境变量
mysql:指定运行的镜像的名字
3.常见命令
Docker最常见的命令就是操作镜像、容器的命令,详见官方文档Docker Docs
进入到容器内部的详细命令
一、进入容器内部
docker exec -it mysql-test bash
二、进入mysql
mysql -uroot -p
或者
docker exec -it mysql-test mysql -uroot -p
4.数据卷挂载
(1)概念
数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
也就是说,我们在修改宿主机(虚拟机)的定义的文件内容的时候。对应的也是Nginx容器内容的修改
(2)案例一:利用Nginx容器部署静态资源
需求:
-
创建Nginx容器,修改nignx容器的html目录下的index.html文件,查看变化
-
将静态资源部署到nginx的html目录
提示:·在执行docker run命令时,使用-v数据卷:容器内目录可以完成数据卷挂载·当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷
创建数据卷
docker run -d --name nginx-test -p 80:80 -v html:/usr/share/nginx/html nginx
//查看详细命令
docker volume --help
//查看对应数据卷的详细信息
docker volume inspect html
//切换到对应的数据卷的 _data文件下
cd /var/lib/docker/volumes/html/_data
ll//查看静态文件
。。。修改对应静态文件
小结:
什么是数据卷?
-
数据卷是一个虚拟目录,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据
如何挂载数据卷?
-
在创建容器时,利用-v数据卷名:容器内目录完成挂载·容器创建时,如果发现挂载的数据卷不存在时,会自动创建
数据卷的常见命令有哪些?
-
docker volume ls:查看数据卷
-
docker volume rm:删除数据卷
-
docker volume inspect:查看数据卷详情
-
docker volume prune:删除未使用的数据卷
5.本地目录挂载
(1)案例2-MySql容器的数据挂载
需求:
-
查看mysql容器,判断是否有数据卷挂载
-
基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载(查阅官方镜像文档)
挂载/rootimysqlidata到容器内的tvar?libt mysql目录 挂载/root/mysql/ init到容器内的/docker-entrypoint-initdb.d目录,携带课前资料准备的SQL脚本
挂载/root/mysql/conf到容器内的/etyf mysql/conf.d目录,携带课前资料准备的配置文件
//查看详情
docker inspect ---
提示: 在执行docker run命令时,使用-v本地目录:容器内目录可以完成本地目录挂载 本地目录必须以“/”或"./”开头,如果直接以名称开头,会被识别为数据卷而非本地目录.
-v mysql : /var/lib/mysql 会被识别为一个数据卷叫mysql -v ./mysql : /var/lib/mysql 会被识别为当前目录下的mysql目录
1.删除原来的Mysql容器
docker rm -f mysql-lastest
docker ps(查看是否删除)
2.进入root目录
cd ~
创建并运行新的mysql容器,挂载到本地目录
在 root目录操作
mkdir mysql
进入mysql目录
cd mysql/
#创建以下三个目录
mkdir data
mkdir conf
mkdir init
在root的家目录执行运行如下命令
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql
可以看到data目录有文件了
6.自定义镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。
(1)Java镜像部署
在linux系统上部署一个Java应用程序:
(2)镜像结构
(3)Dockerfile定义
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。
(4)常见指令:
基于Ubunbtu基础镜像,利用Dockerfile描述镜像结构,也可以直接基于JDK为基础镜像,省略前面的步骤:(也就是说,我们只需要改变我们要导入的jar包即可)
1.创建文件夹
mkdir -p /usr/local/java
2.切换到java目录下
cd /usr/local/java
3.将保存好的Dockerfile文件、jdk8.tar.gz拷贝到java目录下,以及要运行的jar包
4.创建自定义镜像
docker build -t jdk1.8:v1.0 .
5.查看当前镜像 是否存在名为jdk1.8的镜像
docker images
6.创建镜像
docker build -t docker-demo .
7.执行
docker run -d --name dd -p 8090:8090 docker-demo
8.查看运行日志
docker logs -f dd
9.登录网站
http://192.168.169.128:8090/hello/count
(5)小结:
镜像的结构是怎样的?
镜像中包含了应用程序所需要的运行环境、函数库、配置、以及应用本身等各种文件,这些文件分层打包而成。
Dockerfile是做什么的? Dockerfile就是利用固定的指令来描述镜像的结构和构建过程,这样Docker才可以依次来构建镜像 构建镜像的命令是什么?
docker build -t镜像名Dockerfile目录
7.网络
默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上
不能用以上方法,IP地址不固定,如果先启动别的容器地址就会被占用。
加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下:
(1)网络被创建后,进行容器的连接。
a. 创建一个网络
docker network create heima
网络名
b.查看是否存在名为heima 的网络learning\Docker
docker network ls
c. 查看IP 地址
ip addr
//IPAddress": "172.18.0.2",
d. 将mysql 连接网络
docker network connect heima mysql-lastest
网络名 容器名
e. 查看mysql容器详情(是否存在172.18.0.XX)
docker inspect mysql-lastest
(2)在容器创建的时候直接进行网络连接
a. 删除 dd 容器
docker rm -f dd
b.创建 dd 容器时,加入网络
docker run -d --name dd -p 8090:8090 --network heima docker-demo
c. 查看dd详情(不存在默认网络,创建时加入指定的网络,就不会出现默认为的网络啦~)
docker inspect dd
d. 进入dd容器
docker exec -it dd bash
ping mysql-lastest //连接成功
ping nginx-test //连接失败 //不在同一个网桥下,当然不能连接了