怎么用自助网站,老干部活动中心网站建设方案,wordpress用什么系统好,信息港官网安装docker步骤#xff1a;https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d 1.docker Docker 是一种容器化平台#xff0c;用于帮助开发者打包、发布和管理应用程序及其依赖关系。通过 Docker#xff0c;开发者可以将应用程序及其所有依赖项打包到一个称为…
安装docker步骤https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d 1.docker Docker 是一种容器化平台用于帮助开发者打包、发布和管理应用程序及其依赖关系。通过 Docker开发者可以将应用程序及其所有依赖项打包到一个称为容器的可移植单元中。这些容器可以在几乎任何环境中快速、一致地运行无论是开发、测试、还是生产环境。 Docker 的主要优势之一是它提供了轻量级、独立的运行环境同时保证了应用程序在不同环境中的一致性和可移植性 2.镜像和容器 当我们利用Docker安装应用时Docker会自动搜索并下载应用镜像image。镜像不仅包含应用本身还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境称为容器container。
镜像仓库存储和管理镜像的平台Docker官方维护了一个公共仓库Docker Hub。 docker deamon守护进程会在后台运行和监听事假当客户端发送命令该命令会被守护进程监听并且解析比如客户端的命令是启动mysql服务的话守护进程解析完会去镜像仓库寻找应用镜像。第二次运行的时候就不需要再次下载。 总结
Docker是做什么的 Docker可以帮助我们下载应用镜像创建并运行镜像的容器从而快速部署应用什么是镜像 将应用所需的函数库、依赖、配置等与应用一起打包得到的就是镜像什么是容器? 为每个镜像的应用进程创建的隔离运行环境就是容器什么是镜像仓库? 存储和管理镜像的服务就是镜像仓库 DockerHub是目前最大的镜像仓库其中包含各种常见的应用镜像 3.docker命令 3.1 docker run 参数说明 参数说明
docker run 创建并运行一个容器-d 是让容器在后台运行
--name mysql 给容器起个名字必须唯一
-p 3306:3306 设置端口映射
-e KEYVALUE 是设置环境变量
mysql 指定运行的镜像的名字 为什么需要端口映射
在 Docker 中运行容器时进行端口映射是因为 Docker 容器本质上是在宿主机上运行的进程每个容器都有自己的网络命名空间和 IP 地址。外部机器通过容器的ip地址访问容器是访问不到的但是端口映射允许容器中运行的应用程序能够通过宿主机的 IP 地址和端口与外部通信。 -p 3306:3306 设置端口映射一般改的话只会改宿主机的端口号也就是第一个参数可以通过不同的端口号开启多个mysql服务。 3.2 镜像名字规范 镜像名称一般分两部分组成[repository]:[tag]。
其中repository就是镜像名 tag是镜像的版本 在没有指定tag时默认是latest代表最新版本的镜像
如果镜像名字只是mysql的话那么版本号默认最新版。
如果我想要mysql的5.7版本的话就应该是这样 mysql:5.7 4.docker基础 常见命令 Docker最常见的命令就是操作镜像、容器的命令详见官方文档https://docs.docker.com/ 注意事项
docker run 相当于一条龙服务它会帮你需要的镜像从镜像仓库拉取到本地仓库
并且创建和运行容器需要注意的是docker run一个镜像只需要进行一次后续无论是虚拟机重
启你也只需要启动或者停止相应的容器因为容器本来就存在不需要重复的创建。
容器有独立的网络有独立的内存等等 案例实践
查看DockerHub拉取Nginx镜像创建并运行Nginx容器 需求
在DockerHub中搜索Nginx镜像查看镜像的名称 拉取Nginx镜像
docker pull nginx
查看本地镜像列表
docker images
保存镜像
#可以通过下面指令,看看需要什么参数
docker save --help
#最后的指令(-o 是参数)
docker save -o nginx.tar nginx:latest
删除镜像
docker rmi nginx:latest
加载镜像(将上面的save的.tar压缩文件加载下来)
#先通过帮助文档看看需要什么参数
docker load --help
#最后的指令
docker load -i nginx.tar
创建并运行Nginx容器
docker run -d --name nignx -p 80:80 nginx
删除Nginx容器
docker rm nginx
查看容器
#查看正在运行的容器
docker ps
#查看所用的容器
docker ps -a
停止容器
docker stop nginx
再次启动容器
docker start nginx
进入Nginx容器
#通过命令行的方式进入容器
docker exec -it nginx sh
#这样可以直接进去mysql命令行
docker exec -it mysql sh
mysql -uroot -p123 查看nginx日志
#正常
docker logs nginx
#如何想要看到实况
docker logs -f nginx 5.数据卷 5.1 数据卷的定义 数据卷的存在解决了容器文件不能通过vi 来修改文件的信息。
数据卷volume是一个虚拟目录是容器内目录与宿主机目录之间映射的桥梁。两者会进行双向绑定也就是如果你修改宿主机的数据卷关联的文件容器对应的文件也会被同步反过来也一样这就完成了绑定的效果。 5.2 数据卷的相关命令 5.3 数据卷的创建 在执行docker run命令时使用 -v 数据卷:容器内目录
可以完成数据卷挂载当创建容器时如果挂载了数据卷且数据卷不存在会自动创建数据卷 案例1-利用Nginx容器部署静态资源
需求 创建Nginx容器修改nginx容器内的html目录下的index.html文件查看变化将静态资源部署到nginx的html目录。 首先需要去官方文档看一下nginx的html的目录在哪个位置。 我在宿主机放了一张图片可以通过网络访问 可以看到nginx容器的html的目录已经通过实现了数据的同步 案例2-mysql容器的数据挂载
需求 查看mysql容器判断是否有数据卷挂载 基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载查阅官方镜像文档
挂载/root/mysql/data到容器内的/var/lib/mysql目录挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录携带课前资料准备的SQL脚本挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录携带课前资料准备的配置文件 docker run -d --name mysql -p 3306:3306 -e TZAsia/Shanghai -e MYSQL_ROOT_PASSWORD123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql执行 docker inspect mysql 查看mysql容器详情 可以看到数据同步过来了 可以看到mysql会有自动挂载的数据卷名字是系统给的该数据卷称为“匿名数据卷”。
如果mysql容器被删除重新下载其他版本的mysql会生成另外一个匿名数据卷这就导致之前的数据卷的mysql数据二进制文件等丢失但是如果你参考镜像mysql的存储位置(data,init,conf)自己实现目录挂载下次就不会存在上述问题。 注意事项
在执行docker run命令时使用 -v 本地目录 : 容器内目录 可以完成本地目录挂载
本地目录必须以“/”或 ./ 开头如果直接以名称开头会被识别为数据卷而非本地目录
-v mysql : /var/lib/mysql 会被识别为一个数据卷叫mysql
-v ./mysql : /var/lib/mysql 会被识别为当前目录下的mysql目录 5.4 数据卷挂载有两种方式 数据卷名:容器目录本地目录:容器目录 6.自定义镜像 6.1 镜像的结构 镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。 6.2 Dockerfile Dockerfile就是一个文本文件其中包含一个个的指令(Instruction)用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。常见指令如下 因此有了Dockerfile我们只需要告诉docker镜像包含的一些列东西然后它会帮我们执行相关的操作。
更新详细语法说明请参考官网文档 https://docs.docker.com/engine/reference/builder 基于Ubuntu基础镜像利用Dockerfile描述镜像结构 我们可以基于Ubuntu基础镜像利用Dockerfile描述镜像结构也可以直接基于JDK为基础镜像省略前面的步骤 当编写好了Dockerfile可以利用下面命令来构建镜像
-t 是给镜像起名格式依然是repository:tag的格式不指定tag时默认为latest
. 是指定Dockerfile所在目录如果就在当前目录则指定为. 而且可以访问说明自定义的镜像已经部署完成 6.3 总结 镜像的结构是怎样的
镜像中包含了应用程序所需要的运行环境、函数库、配置、以及应用本身等各种文件这些文件分层打包而成。
Dockerfile是做什么的
Dockerfile就是利用固定的指令来描述镜像的结构和构建过程这样Docker才可以依次来构建镜像
构建镜像的命令是什么
docker build -t 镜像名 Dockerfile目录 7.网络 默认情况下所有容器都是以bridge方式连接到Docker的一个虚拟网桥上 只有在同一个网桥上的容器才能相互访问如果在不同网桥上的容器你发现会ping不通
如何让不同网桥实现互通呢 解决方案
加入自定义网络实质就是创建自定义的网桥让容器加入进来的容器可以实现容器名互相访问Docker网络命令如下 执行
docker inspect mysql 执行
docker inspect nginx 两者处于同一个网桥可以ping成功 如果两个网桥不同步可以这样
docker network create xiaolin 然后让mysql容器加进来其他容器加进来实现同一个网桥可以实现互通
docker network connect xiaolin mysql
发现多了一个 如果想要避免默认分配容器ip也可以这样
docker run -d --name demo -p 8080:8080 --network xiaolin docker-demo 8.部署Java应用 首先把相应的java父项目打包打包完会生成对应的jar包
然后再进行dockerfile文件的编写
然后把这两个放在同一个目录下
执行
docker build -t hm-service .docker run -d --name hm -p 8080:8080 hm-servicedocker logs -f hm
这样就完成部署和启动项目了 9.部署前端代码 需求创建一个新的nginx容器将课前资料提供的nginx.conf、html目录与容器挂载
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network xiaolin \
nginx 然后可以进行前后端联调 10.DockerCompose 10.1 DockerCompose定义 Docker Compose通过一个单独的docker-compose.yml 模板文件YAML 格式来定义一组相关联的应用容器帮助我们实现多个相互关联的Docker容器的快速部署。 其实DockerCompose就是可以进行多个容器同时进行docker run 只不过是它有自己的语法
如果我们把前端、后端以及mysql的相关信息写到DockerCompose就可以实现一键开启一键结束这样避免我们一个一个容器开启的过程中遇到的错误。 10.2 相关命令 docker compose [OPTIONS] [COMMAND] 10.3 DockerCompose内容 写一个yml文件 version: 3.8services:mysql:image: mysqlcontainer_name: mysqlports:- 3306:3306environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- ./mysql/conf:/etc/mysql/conf.d- ./mysql/data:/var/lib/mysql- ./mysql/init:/docker-entrypoint-initdb.dnetworks:- hm-nethmall:build: context: .dockerfile: Dockerfilecontainer_name: hmallports:- 8080:8080networks:- hm-netdepends_on:- mysqlnginx:image: nginxcontainer_name: nginxports:- 18080:18080- 18081:18081volumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf- ./nginx/html:/usr/share/nginx/htmldepends_on:- hmallnetworks:- hm-net
networks:hm-net:name: hmall
然后可以通过
docker compose up
启动文件配置的所有容器这个行为都是自动化的你只需要执行相关指令