1.Docker作用
一个项目中,部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突。给部署带来了极大的困难。
而Docker确巧妙的解决了这些问题,
Docker为了解决依赖的兼容问题的,采用了两个手段:
-
将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
-
将每个应用放到一个隔离容器去运行,避免互相干扰
2.常用操作命令及概念
镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。(一般是一个.tar 或者.zip结尾的压缩包)
容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。
镜像,就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。
容器,就是将这些文件中编写的程序、函数加载到内存中允许,形成进程,只不过要隔离起来。因此一个镜像可以启动多次,形成多个容器进程。
下载了一个QQ,如果我们将QQ在磁盘上的运行文件及其运行的操作系统依赖打包,形成QQ镜像。然后你可以启动多次,双开、甚至三开QQ,跟多个妹子聊天。
镜像运行起来就是容器,一个镜像可以运行多个容器
DockerHub
https://hub.docker.com/
是官方的下载镜像的地址。
1.下载镜像
1)首先去镜像仓库搜索nginx镜像,比如DockerHub:
2)根据查看到的镜像名称,拉取自己需要的镜像,通过命令:docker pull nginx
3)通过命令:docker images 查看拉取到的镜像
2.导出、导入镜像
将nginx容器整理为镜像,并打包镜像为.tar 文件,就可以在其他机器上运行这个镜像了。
为了验证导入的镜像确实是我自己的,我把nginx的配置文件中的端口号修改为了5000,以和官方镜像做区别。
1)将nginx容器整理为镜像
运行命令:
docker commit nginx5000 nginx5000images
-- nginx5000 容器名
-- nginx5000images 新的镜像名
结果如图:会新增一个镜像
2)打包新镜像为.tar 文件
docker save -o nginx5000images.tar nginx5000images
-- nginx5000images.tar 镜像打包的文件
-- nginx5000images 镜像名称
在命令行当前位置,会多一个nginx5000images.tar文件:
3)将.tar 文件加载到docker成为镜像
如果在本地测试,需要先把旧的那个镜像删掉。
docker rmi nginx:latest
运行命令,加载本地文件:
docker load -i nginx5000images.tar
结果:
4)根据镜像新建容器并启动
注意:如果有端口号映射,一定要在这一步,否则后面不能修改了
docker run -d -p 5000:5000 --name nginx5000containers nginx5000images
-- -p: 将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-- -d:后台运行容器
-- nginx5000containers 容器名称
-- nginx5000images 镜像名称
可以在浏览器输入localhost:5000 查看是否容器的nginx启动成功
5)容器启动和停止命令
docker start nginx5000containers
docker stop nginx5000containers
三。docker 常用命令
查看当前运行的容器 docker ps
进入容器内部 docker exec -it nginx5000containers bash
-- nginx5000containers 容器名称或id
3.导出和导入多个容器
recovery下有五个容器,且有一定的依赖关系,这种需要借助docker-compose 导出
1》检查docker-compose
docker-compose --version
有结果就没问题
2》将容器整理为新镜像
docker commit ragflow-server new-ragflow-server-images
docker commit ragflow-mysql new-ragflow-mysql-images
docker commit ragflow-minio new-ragflow-minio-images
docker commit ragflow-redis new-ragflow-redis-images
docker commit ragflow-es-01 new-ragflow-es-01-images
3》将新镜像打包为tar文件
docker save -o new-ragflow-server-images.tar new-ragflow-server-images
docker save -o new-ragflow-mysql-images.tar new-ragflow-mysql-images
docker save -o new-ragflow-minio-images.tar new-ragflow-minio-images
docker save -o new-ragflow-redis-images.tar new-ragflow-redis-images
docker save -o new-ragflow-es-01-images.tar new-ragflow-es-01-images
这一步可能会卡住,如果时间长了还不行,按一下enter
4》复制文件
查看这个集合的文件夹,将所有文件复制,和上面的tar 文件一起传输到新机器上。
5》在新电脑上 新建docker镜像
docker load -i new-ragflow-server-images.tar
docker load -i new-ragflow-mysql-images.tar
docker load -i new-ragflow-minio-images.tar
docker load -i new-ragflow-redis-images.tar
docker load -i new-ragflow-es-01-images.tar
6》在新电脑上根据镜像新建容器并启动 (注意!!一定要在上面第四步 放置那些文件的地方启动cmd)
docker compose -f ./docker-compose.yml up -d
访问localhost:80 可以看到页面。