这是我参与8月更文挑战的第28天,活动详情查看:8月更文挑战
4. 应用部署
4.1 MySQL部署
步骤: 1 搜索mysql镜像
docker search mysql
2 拉取mysql镜像
docker pull mysql:5.6
3 创建容器,设置端口映射、目录映射
# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
参数说明:
- -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。
- -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf (配置目录)
- -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs.(日志目录)
- -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql .(数据目录)
- **-e MYSQL_ROOT_PASSWORD=root:**初始化 root 用户的密码
4 进入容器,操作mysql
docker exec –it c_mysql /bin/bash
5 使用客户端连接数据库
4.2 Tomcat部署
步骤: 1 搜索tomcat镜像
docker search tomcat
2 拉取tomcat镜像
docker pull tomcat
3 创建容器,设置端口映射、目录映射
# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
参数说明:
-
-p 8080:8080:将容器的8080端口映射到主机的8080端口 -
-v $PWD:/usr/local/tomcat/webapps:将主机中当前目录挂载到容器的webapps
4 在主机中/tomcat目录中上传一个html页面,使用外部机器访问tomcat
4.3 Redis部署
步骤: 1 搜索redis镜像
docker search redis
2 拉取redis镜像
docker pull redis:5.0
3 创建容器,设置端口映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0
4 连接redis数据库
- 使用client连接
./redis-cli.exe -h 192.168.149.135 -p 6379
- 使用redis桌面客户端连接
5. Docerfile
5.1 Docker 镜像原理
引入问题: Q1: Docker 镜像本质是什么? A1:是一个分层文件系统.
Q2:Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G? A2:Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层.
Q3:Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?
A3:由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小500多MB.
5.2 镜像制作
5.2.1 容器转为镜像
1 使用docker commit命令可以将容器保存为镜像 命令形式:docker commit 容器名称 镜像名称
docker commit 381827f60f70 my_tomcat:1.0
2 使用docker save命令可以将已有镜像保存为tar 文件 命令形式:docker save –o tar文件名 镜像名
docker save -o my_tomcat.tar my_tomcat:1.0
3 使用docker load命令可以根据tar文件恢复为docker镜像 命令形式:docker load -i tar文件名
# 加载恢复镜像
docker load -i my_tomcat.tar
# 在镜像恢复之后,基于该镜像再次创建启动容器
docker run -di --name=new_tomcat -p 8080:8080 my_tomcat:1.0
注意:新的镜像制作后,原本容器中挂载的目录将失效, 索引一般在恢复镜像创建容器容器的时候需要重新挂载。
5.3 Dockerfile 概念
Dockerfile 是一个文本文件,包含了一条条的指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像.
- 对于开发人员:可以为开发团队提供一个完全一致的开发环境
- 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件 构建一个新的镜像开始工作了
- 对于运维人员:在部署时,可以实现应用的无缝移植
5.4 Dockerfile 入门案例
案例1
- 自定义centos7镜像
- 默认登录路径为 /usr
- 可以使用vim
实现步骤: ① 定义父镜像:FROM centos:7 ② 定义作者信息:MAINTAINER itheima Michael@gmail.com ③ 执行安装vim命令: RUN yum install -y vim ④ 定义默认的工作目录:WORKDIR /usr ⑤ 定义容器启动执行的命令:CMD /bin/bash ⑥ 通过dockerfile构建镜像:docker bulid –f dockerfile文件路径 –t 镜像名称:版本 第1步 填写centos_dockerfile文件内容
vim ./centos_dockerfile
# 文件内容
FROM centos:7
MAINTAINER itheima <Michael@gmail.com>
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash
# 保存 退出
第2步 文件编写完成执行命令构建:
docker build -f ./centos_dockerfile -t my_centos:1 .
案例2 定义dockerfile,发布springboot项目
实现步骤: 实现步骤 ① 定义父镜像:FROM java:8 ② 定义作者信息:MAINTAINER itheima Michael@gmail.com ③ 将jar包添加到容器: ADD springboot.jar app.jar ④ 定义容器启动执行的命令:CMD java–jar app.jar ⑤ 通过dockerfile构建镜像:docker bulid –f dockerfile文件路径 –t 镜像名称:版本
第1步 填写java8_dockerfile文件内容
vim ./java8_dockerfile
# 文件内容
FROM java:8
MAINTAINER itheima <Michael@gmail.com>
ADD springboot.jar app.jar
CMD java–jar app.jar
# 保存 退出
第2步 文件编写完成执行命令构建:
docker build -f ./java8_dockerfile -t app .
6. 服务编排
6.1 服务编排概念
微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大.
6.2 Docker Compose 概述
Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建 ,启动和停止。使用步骤: 1 利用 Dockerfile 定义运行环境镜像 2 使用 docker-compose.yml 定义组成应用的各服务 3 运行 docker-compose up 启动应用
7. Docker 私有仓库
7.1 Docker 私有仓库
一、私有仓库搭建
# 拉取私有仓库镜像
docker pull registry
# 启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
# 修改daemon.json
vim /etc/docker/daemon.json
# 重启docker 服务
systemctl restart docker
docker start registry
** 二、将镜像上传至私有仓库**
# 1、标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
# 2、上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7
三、 从私有仓库拉取镜像
#拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7