文章目录
- [1. docker 基础](#1. docker 基础)
- 2.自定义镜像
-
- [2.1 dockerfile](#2.1 dockerfile)
- [2.2 try 构建一个Java镜像,并部署](#2.2 try 构建一个Java镜像,并部署)
- [2.3 总结:](#2.3 总结:)
- [3. docker 网络](#3. docker 网络)
- 项目部署
1. docker 基础
1.1 docker 安装
-
查看是否安装的镜像已经在系统中存在:
docker images (存在2,不存在 3)
-
卸载旧版本
yum remove docker
-
首先安装 yum 工具
yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 --skip-broken
-y
是yum 的一个命令,表示在安装软件包的时候不需要用户确认。使用 -y 选线会自动回答yes
来确认安装
--skip-broken:
这是yum命令的另一个选项。当使用--skip-broken选项时,yum会尝试安装尽可能多的软件包,而不会停止在遇到依赖问题或错误的软件包上。
lvm2:
这是要安装的第三个软件包的名称。lvm2是Logical Volume Manager的一个实现,用于管理磁盘卷和逻辑卷。 -
设置docker 镜像
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache
-
安装docker,
安装docker时直接安装docker-compose
(安装docker时直接安装docker-compose) -
systemctl stop firewalld
,启动docker,要关闭防火墙 -
systemctl disable firewalld
禁止开机启动防火墙 -
查看防火墙状态
systemctl status firewalld
-
启动docker
systemctl start docker
-
查看docker的状态:
systemctl status docker
-
查看docker 的版本
docker -v
还没结束哦!!看接下来的...
配置镜像加速器
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"] } EOF
复制内容,注意把其中的镜像加速地址改成你自己的sudo systemctl daemon-reload
重新加载sudo systemctl restart docker
重启docker
拉取镜像的仓库:
docker 本身也是一个拂服务,输入的一切命令都是发给进程的。
docker 部署Mysql 镜像
按照下图运行即可:
docker run
--name mysql
-e MYSQL_ROOT_PASSWORD=密码
-p 3309:3306 -- 端口映射
-v /root/images/mysqlImage/tmp/mysql/conf/hmy.cnf://etc/mysql/conf.d/hmy.cnf
-v /root/images/mysqlImage/tmp/mysql/data:/var/lib/mysql -d mysql:5.7.25
注:
- 当我们利用docker 安装应用的时候,docker 会自动搜索并下载
应用镜像
,镜像不仅包含应用本身,还包含应用运行所需要的环境、配置 、函数库
。docker 会在运行镜像时创建一个隔离环境,称为容器。 - 运行镜像时创建一个隔离环境,因此可以开启多个服务。
docker 命令的详细解释
-d
服务器在后台运行--name 容器名
:给容器起一个名字-p 宿主机端口():容器内端口(进程不需要改动)
转到容器内部-e key = value
eviorment -e 配置环境变量 ,由镜像的制作者mysql:版本号
镜像的名称,版本号
docker 常见命令
docker 最常见的命令就是操作镜像,容器的命令,详见官方文档:https://docs.docker.com
docker pull
从镜像中拉取镜像docker images
查看所有镜像docker rmi
删除镜像docker rm
删除容器docker build
自己构建镜像docker save
将自己构建的镜像通过 命令 保存到本地,形成一个压缩文件。docker load
拿到压缩包,解压用docker push
推送到镜像仓库中docker exec
进入容器
**注意:
- **
docker stop
相当于停止的时容器内部的进程。容器还在 下次运行可以用docker start
运行。 docker run
运行一个新的容器
案例实现:
- 去docker hub 中搜索nginx 拉取nginx镜像
docker pull nginx
- 查看镜像
docker images
- 创建并运行容器
docker run -d --name nginxnana -p 80:80 nginx
- 查看运行的容器
docker ps
- 停掉容器
docker stop 容器名
- 查看容器日志
docker logs -f nginxnana
- 进入容器内部
docker exec -it 容器名 bash
- 退出容器
exit
- 删除容器
docker rm 容器名 -f
-f 强制删除 - 还有命令的别名,可以自己研究~~~
docker 数据卷
定义: 容器内目录与宿主机目录的之间的映射的桥梁。
案例: 创建一个nginx
-
创建有挂载数据卷的 nginx 容器
-
查看数据卷详细信息
docker volume inspect 数据卷名称
案例2 :
查看mysql 是是否有数据卷挂载
docker inspect 容器名
Mouth 放的是挂载的信息
基于数组机目录实现Mysql 数据目录,配置文件,初始化脚本的挂载。
在使用docker run
的时候,使用-v 本地目录:容器内目录
可以完成本地目录的挂在
docker 相关命令总结
docker images
: 查看镜像docker rmi
:删除镜像docker push
: 推送镜像到镜像服务器docker save
:会将镜像保存为一个压缩包,可以用U盘拷贝,之后docker load 加载压缩包为镜像。docker inspect 容器名
: 查看docker 容器
2.自定义镜像
镜像中的概念:
- 镜像是分层的
- 基础镜像不用每次下载
- 入口
2.1 dockerfile
当我们编写好了dockerfile,可以用命令请去构建镜像: docker build -t myImage.1.0 .
-t
是给构建的镜像起名字,格式: repository:tag, 不指定tag,默认为latest.
是指定dockerfile 所在的目录,如果就在当前目录则指定为.
2.2 try 构建一个Java镜像,并部署
- 将文件打为jar包,上传到linux中:
- 加载镜像
docker load -i
- 构建镜像:
docker build -t 镜像名字 dockerfile文件名
- 运行:
docker run -d --name 名字 -p 端口映射 镜像名字
- docker ps 查看运行状态
docker logs -f 容器名
访问: ip:端口号/路径
2.3 总结:
3. docker 网络
docker inspect 容器名称
: 查看某个容器的配置
配置中有 NetWork
网络的配置。
分析: 在安装docker 的时候,docker 会在虚拟机中创建虚拟网卡,名字默认是docker0
.
如上图,每个容器虽然是独立的,但是因为通过 docker 建立了连接(是同一网络段的),因此可以相互访问。测试:通过进入容器,对其他容器 ping ip地址
但是上面的通过ip ping 的是有风险的,如果一个容器关闭了,新的容器启动占用了上一个容器的ip地址,这时候就ping 不通了,因此这样不合适。因此出现了 自定义网络
。
自定义网络
加入自定义网络 直接 ping 容器名称
就可以,即使 ip 改变也可以ping的通
docker network ls
docker network create 名字
ip addr
docker network connect 网络名 网段名
让容器加入网络docker run -d -name 名字 -p 映射端口:端口 --network 网络名称 镜像名称
启动容器的时候就是指定连接的网络
注意: 部署项目的时候容器互联的问题就解决了。
项目部署
后端部署
- 项目打包为jar包
- 构建镜像
docker build -t 名字:tag dockerfile
- 运行容器
docker run -d --name 名字 -p 端口映射:端口 --netwok 网络名称 镜像名称
- 查看日志
前面有讲过
前端部署
创建一个nginx 容器,提供的nginx.conf、html目录与容器挂载
docker run -d --name nginx -p 18080:18080 -p 18081:18081 -v 宿主路径:/usr/share/nginx/html -v 宿主文件:/etc/nginx/nginx.conf --netwok 网络名称 nginx
11111