文章目录
- 前言
- Docekr
- 镜像命令
- Docekr
- 镜像命令
- 容器操作
- 创建容器
- 查看容器日志
- 查看容器状态
- 进入容器
- 数据卷
- 数据集操作命令
- 给nginx挂载数据卷
- 给MySQL挂载本地目录
- Dockerfile自定义镜像
- 镜像结构
- 使用Dockerfile构建Java项目
- 基于Ubuntu构建Java项目
- 基于java8构建Java项目
- Docker-Compose
- 初识DockerCompose
- 部署微服务集群
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
Docekr
首先去DockerHub中选择一个镜像 这里以nginx镜像为例
镜像命令
- 镜像拉取
docker pull nginx
- 查看拉取到的镜像
docker images
- 保存镜像
docker save --help //查看用法
docker save -o [保存的目标文件名称] [镜像名称]
docker save -o nginx.tar nginx:latest //导出镜像到磁盘
- 导入镜像
先删除本地的nginx镜像:
docker rmi nginx:latest
然后运行命令,加载本地文件:
docker load -i nginx.tar
Docekr
首先去DockerHub中选择一个镜像 这里以nginx镜像为例
镜像命令
- 镜像拉取
docker pull nginx
- 查看拉取到的镜像
docker images
- 保存镜像
docker save --help //查看用法
docker save -o [保存的目标文件名称] [镜像名称]
docker save -o nginx.tar nginx:latest //导出镜像到磁盘
- 导入镜像
先删除本地的nginx镜像:
docker rmi nginx:latest
然后运行命令,加载本地文件:
docker load -i nginx.tar
容器操作
其中:
-
docker run:创建并运行一个容器,处于运行状态
-
docker pause:让一个运行的容器暂停
-
docker unpause:让一个容器从暂停状态恢复运行
-
docker stop:停止一个运行的容器
-
docker start:让一个停止的容器再次运行
-
docker rm:删除一个容器
创建容器
创建并运行nginx容器的命令:
docker run --name containerName -p 80:80 -d nginx
命令解读:
- docker run :创建并运行一个容器
- –name : 给容器起一个名字,比如叫做mn
- -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
- -d:后台运行容器
- nginx:镜像名称,例如nginx
默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。
现在,将容器的80与宿主机的80关联起.
查看容器日志
docker logs
- 添加 -f 参数可以持续查看日志
查看容器状态
docker ps
- docker ps -a 查看所有容器,包括已经停止的
进入容器
docker exec -it [容器名] [要执行的命令]
数据卷
**数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。
虚拟的数据卷指向文件系统
但容器中的文件指向数据卷
即操作文件系统内的文件相当于操作容器
数据集操作命令
数据卷的作用:
- 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
数据卷操作:
- docker volume create:创建数据卷
- docker volume ls:查看所有数据卷
- docker volume inspect:查看数据卷详细信息,包括关联的宿主机目录位置
- docker volume rm:删除指定数据卷
- docker volume prune:删除所有未使用的数据卷
单纯创建一个数据卷
docker volume create html
查看数据卷在宿主机目录位置
docker volume ls
查看数据卷详细信息卷
docker volume inspect html
可以看到,我们创建的html这个数据卷关联的宿主机目录
给nginx挂载数据卷
已经知道nginx的html目录所在位置/usr/share/nginx/html
- 在创建nginx容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx
-v html:/usr/share/nginx/html
:把html数据卷挂载到容器内的/usr/share/nginx/html这个目录中
- 查看html数据卷所在文件系统位置
# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html
给MySQL挂载本地目录
上述是系统为我们分配数据卷映射到宿主机位置,
需要 docker volume inspect 去查看位置
下面我们介绍直接挂栽到宿主机目录上的方式
-
目录挂载与数据卷挂载的语法是类似的:
-
-v [宿主机目录]:[容器内目录]
-
-v [宿主机文件]:[容器内文件]
-
-
创建并运行一个MySQL容器,将宿主机目录直接挂载到容器
-
在将课前资料中的mysql.tar文件上传到虚拟机,通过load命令加载为镜像 docker -i load ~
-
创建目录/tmp/mysql/data
-
创建目录/tmp/mysql/conf,将课前资料提供的hmy.cnf文件上传到/tmp/mysql/conf
-
去DockerHub查阅资料,创建并运行MySQL容器,要求:
① 挂载/tmp/mysql/data到mysql容器内数据存储目录
② 挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件
③ 设置MySQL密码
-
目录挂载自己动手创建目录 直接实现 宿主机目录 与 容器目录 相映射, 虽然耦合度高 但易查找
数据卷挂载 docker 管理 耦合度低 但目录深
Dockerfile自定义镜像
镜像结构
构建自定义的镜像时,并不需要一个个文件去拷贝,打包。
我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。
而描述上述信息的文件就是Dockerfile文件。
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder
使用Dockerfile构建Java项目
基于Ubuntu构建Java项目
基于Ubuntu镜像构建一个新镜像,运行一个java项目
-
新建一个空文件夹docker-demo
-
拷贝资料提供的Dockerfile到docker-demo这个目录
-
其中的内容如下:
# 指定基础镜像 FROM ubuntu:16.04 # 配置环境变量,JDK的安装目录 ENV JAVA_DIR=/usr/local # 拷贝jdk和java项目的包 COPY ./jdk8.tar.gz $JAVA_DIR/ COPY ./docker-demo.jar /tmp/app.jar # 安装JDK RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8 # 配置环境变量 ENV JAVA_HOME=$JAVA_DIR/java8 ENV PATH=$PATH:$JAVA_HOME/bin # 暴露端口 EXPOSE 8090 # 入口,java项目的启动命令 ENTRYPOINT java -jar /tmp/app.jar
-
步骤5:进入docker-demo
将准备好的docker-demo上传到虚拟机任意目录,然后进入docker-demo目录下
-
步骤6:运行命令:
docker build -t javaweb:1.0 .
就可以访问你的web项目了
基于java8构建Java项目
我们都可以在一些安装了部分软件的基础镜像 ------ java:8-alpine 上做改造
-
① 新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile
-
② 拷贝课前资料提供的docker-demo.jar到这个目录中
-
③ 编写Dockerfile文件:
-
a )基于java:8-alpine作为基础镜像
-
b )将app.jar拷贝到镜像中
-
c )暴露端口
-
d )编写入口ENTRYPOINT
内容如下:
FROM java:8-alpine COPY ./app.jar /tmp/app.jar EXPOSE 8090 ENTRYPOINT java -jar /tmp/app.jar
-
-
④ 使用docker build命令构建镜像
-
⑤ 使用docker run创建容器并运行
Docker-Compose
初识DockerCompose
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下:
version: "3.8"
services:
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "/tmp/mysql/data:/var/lib/mysql"
- "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
web:
build: .
ports:
- "8090:8090"
上面的Compose文件就描述一个项目,其中包含两个容器:
微服务集群不犹豫端口映射
-
第一个容器名称即 mysql。 环境变量(environment) ; 镜像名称(image);
数据卷映射(volumes)
-
第二个容器名称即 web。这里没有镜像,选择了先在当前目录构建镜像
部署微服务集群
将之前文章写好的 user_service 和 order_service的项目进行微服务集群部署
-
先建立一个cloud_demo文件,在里面建立三个微服务文件夹gateway, user-service, order-service 并编写Dockerfile。并将每个项目jar包放进去
-
Dockerfile是自定义构建镜像, 并运行java项目的Jar包 构成微服务
-
FROM java:8-alpine COPY ./app.jar /tmp/app.jar ENTRYPOINT java -jar /tmp/app.jar
-
-
另外三个微服务是基于mysql的,还要建mysql文件夹,并包含conf daya文件配置
-
使用docker-compose文件搭建微服务,所以在建个docker-compose,yml
-
项目,将数据库、nacos地址都命名为docker-compose中的服务名
-
version: "3.2" services: nacos: image: nacos/nacos-server environment: MODE: standalone ports: - "8848:8848" mysql: image: mysql:5.7.25 environment: MYSQL_ROOT_PASSWORD: 123 volumes: - "$PWD/mysql/data:/var/lib/mysql" - "$PWD/mysql/conf:/etc/mysql/conf.d/" userservice: build: ./user-service orderservice: build: ./order-service gateway: build: ./gateway ports: - "10010:10010"
-
nacos
:作为注册中心和配置中心image: nacos/nacos-server
: 基于nacos/nacos-server镜像构建environment
:环境变量MODE: standalone
:单点模式启动
ports
:端口映射,这里暴露了8848端口
mysql
:数据库image: mysql:5.7.25
:镜像版本是mysql:5.7.25environment
:环境变量MYSQL_ROOT_PASSWORD: 123
:设置数据库root账户的密码为123
volumes
:数据卷挂载,这里挂载了mysql的data、conf目录,其中有我提前准备好的数据
userservice
、orderservice
、gateway
:都是基于Dockerfile临时构建的
-
- 将cloud-demo上传至虚拟机,利用 docker-compose up -d 来部署
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。