学习目标:
- 学习Docker, 部署上线毕设项目
学习内容:
黑马:https://www.bilibili.com/video/BV1CJ411T7BK?p=21
DOCKER做什么
开源的 应用容器 引擎
基于 GO 语言实现
Dockers让开发者将 应用+环境 一起打包到一个轻量级可移植的容器中,发布到Linux机器上
容器使用沙箱机制,相互隔离
安装Docker
# yum 包更新到最新
yum update
# 安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker,出现界面都按y
yum install -y docker-ce
# 查看docker版本
docker -v
Docker架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZNDHHxkS-1653805254204)(imgs/image-20220415100045229.png)]
Docker 须知
1、容器container的网络服务不能直接和外部机器通信
2、但!宿主机的网络服务可以和外部机器直接通信
3、容器container可以和宿主机直接通信
所以,我们可以在启动容器时,做好容器和宿主机的端口映射,外部机器即可访问容器container
配置-镜像加速器
使用 Alibaba 镜像加速器
登录自己的账号,每个人的加速器地址是不同的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-njX8qzMh-1653805254205)(imgs/image-20220415100415548.png)]
命令-服务
start - stop // restart // status // enable
systemctl --- docker
# 启动 docker 服务
systemctl start docker
# 停止 docker 服务
systemctl stop docker
# 重启 docker 服务
systemctl restart docker
# 查看 docker 服务状态
systemctl status docker
# 开启-------自启动-------- docker 服务
systemctl enable docker
命令-镜像
搜索 - 拉取 - 删除
查看本地镜像
docker ---
#搜索 远程镜像
docker search xxx
#拉取 远程镜像
docker pull xxx[:version] #如果不知道镜像版本,去dockerhub搜索对应镜像
# 本地镜像 列表 REPOSITORY TAG IMAGE_ID CREATED SIZE
# 仓库 - 版本 - 镜像ID - 创建时间 - 大小
docker images
#查看所有的镜像 ID
docker images -q
#删除 本地镜像
docker rmi IMAGE_ID
#删除所有的镜像
docker rmi `docker images -q`
命令-容器
临时启动并进入容器:
docker -run -it --name=c1 centos:7 /bin/bash
参数说明:
- -i: 保持容器运行
- -t: 分配终端
- -d: 以守护(后台)运行容器,需要使用docker exec进入容器
- –name:容器名字
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit: 容器随之停止运行
-it : 创建交互式容器
-id : 创建后台容器
启动容器后台运行:
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
docker run -id --name=c1 centos:7
**注:**加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec [进入容器,若从这个容器退出,容器不会停止]
#查看 正在运行 的容器
docker ps
#查看 所有 的容器
docker ps -a
#查看 所有 的容器的id
docker ps -aq
#进入后台容器【退出容器不会关闭】
docker exec -it 容器ID /bin/bash
#启动 start
docker start 容器ID
#停止 stop
docker stop 容器ID
#重启容器
docker restart 容器ID
#查看容器信息 inspect
docker inspect 容器ID
#删除 rm [只有容器停掉后,才能删除rm]
docker rm 容器ID
#删除所有终止状态(exited)的容器
docker container prune
数据卷
Docker应用部署
Mysql
1、搜索 镜像
docker search mysql
2、拉取 镜像
docker pull mysql:5.6
3、创建 容器,设置端口映射、目录映射
# 在/root下创建 mysql目录
mkdir ~/mysql
cd ~/mysql
# 启动mysql容器
docker run -id \
-p 3307:3306 \ #端口映射
--name=c_mysql \ #容器名称
# 挂载数据卷 [目录映射:配置文件、日志文件、持久化位置]
-v $PWD/conf:/etc/mysql/conf.d \ #mysql配置文件
-v $PWD/logs:/logs \ #mysql日志文件
-v $PWD/data:/var/lib/mysql \ #mysql数据持久化位置
# -------------------
-e MYSQL_ROOT_PASSWORD=123456 \ #mysql-root密码
mysql:5.6
#进入后台容器mysql
docker exec -it c_mysql /bin/bash
Tomcat
需求:在Dockers容器中部署Tomcat, 通过外部机器访问Tomcat部署的项目
1、搜索tomcat镜像 docker search tomcat
2、拉取tomcat镜像 docker pull tomcat
3、创建容器
#在root目录下创建tomcat目录
mkdir ~/tomcat
cd ~/tomcat
#启动tomcat容器
docker run -id \
-- name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
4、部署项目
将项目扔到tomcat目录下面
5、测试访问
Nginx
需求:在Dockers容器中部署Nginx,并通过外部机器访问Nginx
1、搜索Ngnix镜像
2、拉取Nginx镜像
3、创建容器
#创建目录
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
#在 ~/nginx/conf下创建 nginx.conf 文件,粘贴内容
vim nginx.conf
#启动容器
docker run -id \
--name=c_nginx \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
4、访问Nginx
Redis
需求:在Docker部署Redis容器,访问redis
1、搜索redis镜像
docker search redis
2、拉取redis镜像
docker pull redis:5.0
3、创建容器,设置端口映射
decker run -id --name=c_redis 6379:6379 redis:5.0
Dockerfile
Docker镜像原理
1、Linux文件系统分为 bootfs 和 rootfs 两部分
- bootfs: 包含引导加载程序、Kernel内核
- rootfs: root文件系统,不同的Linux发行版,rootfs 不同
2、 Docker镜像是由特殊的文件系统叠加而成
3、容器 container =》镜像 Image
docker commit 容器id 镜像名称:版本号 #将容器转为镜像
docker save -o 压缩文件名称 镜像名称:版本号 #把镜像转为压缩文件
docker load -i 压缩文件名称 #将压缩文件转为镜像
Dockerfile
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KKJe4vKq-1653805254212)(imgs/image-20220516222243022.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SCUqOup7-1653805254213)(imgs/image-20220516222438005.png)]
dockerfile是一个文件,包含了指令集 ,用于构建 build 出一个镜像Image
开发人员:可以为开发团队提供一个完全一致的开发环境
测试人员:直接拿开发时所构建的镜像 or Dockerfile文件构建一个Image
运维人员:部署时实现应用的无缝移植
# 创建一个 docker-files 目录
mkdir docker-files
# 创建一个 centos_dockerfile 文件
vim centos_dockerfile
# centos_dockerfile 文件
FROM centos:7
MAINTAINER itheima <dayda.@qq.com>
RUN yum install -y vim # linux命令
WORKDIR /usr # 定义工作目录
CMD /bin/bash # 定义容器启动后执行的命令
# 构建 镜像Image
docker build -f ./centos_dockerfile -t itheima_centos:1.0 .
# 创建 容器
docker run -id --name=c2 itheima_centos:1.0
部署springboot项目
1、将 springboot 项目打成 jar包
2、找到target目录,将 jar包 传到 服务器的 docker-files 目录下
3、编辑 dockerfile 文件
FROM java:8
MAINTAINER itheima
# 将jar包添加到容器中
ADD springboot.jar app.jar
CMD java-jar app.jar
4、构建 镜像 docker build -f dockerfile文件路径 -t 镜像名称:版本 .
5、创建 容器【配置端口映射9000-》8080】
docker run -id -p 9000:8080 镜像名称
6、访问 项目【端口9000】
7、方式一:把 dockerfile 给测试人员。方式二:把 Image 镜像给测试人员
8\还有个命令要提下,可以查看容器运行时的日志
docker logs 容器id
1
Docker 服务编排
1、安装dockercompose
2、卸载dockercompose
3、a
mkdir docker-compose
vim docker-compose.yml
version: '3'
services:
nginx:
image: nginx
ports:
-80:80
links:
-app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
-"8080"
4、创建 ./nginx/conf.d目录 ,创建配置文件vim itheima.conf
server{
listen:80;
access_log off;
location / {
proxy_pass http://app:8080;
}
}
5、启动
docker-compose up
6、访问Nginx
Docker 私有仓库
1、搭建私有仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZEkPJsV6-1653805254217)(imgs/image-20220416135123697.png)]
2、上传镜像到私有仓库
# 1\ 启动私有仓库容器
# 2、标记待传镜像IMAGE 为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
# 3\ 上传镜像到私有仓库
docker push 私有仓库服务器IP:5000/centos:7
3、拉取镜像
docker pull 私有仓库服务器IP:5000/centos:7
docker容器和传统虚拟机
学习产出:
- 上线毕设客户端和管理系统后台到腾讯云服务器