提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
首先去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
首先去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
命令解读:
默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。
现在,将容器的80与宿主机的80关联起.
docker logs
- 添加 -f 参数可以持续查看日志
docker ps
- docker ps -a 查看所有容器,包括已经停止的
docker exec -it [容器名] [要执行的命令]
**数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。
虚拟的数据卷指向文件系统
但容器中的文件指向数据卷
即操作文件系统内的文件相当于操作容器
数据卷的作用:
数据卷操作:
单纯创建一个数据卷
docker volume create html
查看数据卷在宿主机目录位置
docker volume ls
查看数据卷详细信息卷
docker volume inspect html
可以看到,我们创建的html这个数据卷关联的宿主机目录
已经知道nginx的html目录所在位置/usr/share/nginx/html
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数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html
上述是系统为我们分配数据卷映射到宿主机位置,
需要 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 管理 耦合度低 但目录深
构建自定义的镜像时,并不需要一个个文件去拷贝,打包。
我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。
而描述上述信息的文件就是Dockerfile文件。
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder
基于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项目了
我们都可以在一些安装了部分软件的基础镜像 ------ 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创建容器并运行
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账户的密码为123volumes
:数据卷挂载,这里挂载了mysql的data、conf目录,其中有我提前准备好的数据userservice
、orderservice
、gateway
:都是基于Dockerfile临时构建的
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。