别人买了域名做违法网站,装饰设计乙级资质承接范围,用dw制作网站模板下载地址,招聘网站推广怎么做Docker 入门
基础
不同操作系统下其安装包、运行环境是都不相同的#xff01;如果是手动安装#xff0c;必须手动解决安装包不同、环境不同的、配置不同的问题
而使用Docker#xff0c;这些完全不用考虑。就是因为Docker会自动搜索并下载MySQL。注意#xff1a;这里下载…Docker 入门
基础
不同操作系统下其安装包、运行环境是都不相同的如果是手动安装必须手动解决安装包不同、环境不同的、配置不同的问题
而使用Docker这些完全不用考虑。就是因为Docker会自动搜索并下载MySQL。注意这里下载的不是安装包而是**镜像(image)。镜像中不仅包含了MySQL本身还包含了其运行所需要的环境、配置、系统级函数库。因此它在运行时就有自己独立的环境就可以跨系统运行也不需要手动再次配置环境了。这套独立运行的隔离环境我们称为容器(container)** Docker安装软件的过程就是自动搜索下载镜像然后创建并运行容器的过程
Docker本身包含一个后台服务我们可以利用Docker命令告诉Docker服务帮助我们快速部署指定的应用。Docker服务部署应用时首先要去搜索并下载应用对应的镜像然后根据镜像创建并允许容器应用就部署完成 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123 \mysql解读
docker run -d 创建并运行一个容器d则是让容器以后台进程运行-name mysql : 给容器起个名字叫mysql你可以叫别的p 3306:3306 : 设置端口映射。 容器是隔离环境外界不可访问。但是可以将宿主机端口映射容器内到端口当访问宿主机指定端口时就是在访问容器内的端口了。容器内端口往往是由容器内的进程决定例如MySQL进程默认端口是3306因此容器内端口一定是3306而宿主机端口则可以任意指定一般与容器内保持一致。格式 p 宿主机端口:容器内端口示例中就是将宿主机的3306映射到容器内的3306端口 e TZAsia/Shanghai : 配置容器内进程运行时的一些参数 格式e KEYVALUEKEY和VALUE都由容器内进程决定案例中TZAsia/Shanghai是设置时区MYSQL_ROOT_PASSWORD123是设置MySQL默认密码 mysql : 设置镜像名称Docker会根据这个名字搜索并下载镜像 格式REPOSITORY:TAG例如mysql:8.0其中REPOSITORY可以理解为镜像名TAG是版本号在未指定TAG的情况下默认是最新版本也就是mysql:latest
Docker 常见命令
命令说明文档地址docker pull拉取镜像https://docs.docker.com/engine/reference/commandline/pull/docker push推送镜像到DockerRegistryhttps://docs.docker.com/engine/reference/commandline/push/docker images查看本地镜像https://docs.docker.com/engine/reference/commandline/images/docker rmi删除本地镜像https://docs.docker.com/engine/reference/commandline/rmi/docker run创建并运行容器不能重复创建https://docs.docker.com/engine/reference/commandline/run/docker stop停止指定容器https://docs.docker.com/engine/reference/commandline/stop/docker start启动指定容器https://docs.docker.com/engine/reference/commandline/start/docker restart重新启动容器https://docs.docker.com/engine/reference/commandline/restart/docker rm删除指定容器https://docs.docker.com/engine/reference/commandline/rm/docker ps查看容器https://docs.docker.com/engine/reference/commandline/ps/docker logs查看容器运行日志https://docs.docker.com/engine/reference/commandline/logs/docker exec进入容器https://docs.docker.com/engine/reference/commandline/exec/docker save保存镜像到本地压缩文件https://docs.docker.com/engine/reference/commandline/save/docker load加载本地压缩文件到镜像https://docs.docker.com/engine/reference/commandline/load/docker inspect查看容器详细信息https://docs.docker.com/engine/reference/commandline/inspect/ docker run 相当于 docker create 和 docker start启动镜像时不要使用 docker run
以Nginx为例演示上述命令
# 第1步去DockerHub查看nginx镜像仓库及相关信息# 第2步拉取Nginx镜像
docker pull nginx# 第3步查看镜像
docker images
# 结果如下
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 16 months ago 141MB
mysql latest 3218b38490ce 17 months ago 516MB# 第4步创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx# 第5步查看运行中容器
docker ps
# 也可以加格式化方式访问格式会更加清爽
docker ps --format table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}# 第6步访问网页地址http://虚拟机地址# 第7步停止容器
docker stop nginx# 第8步查看所有容器
docker ps -a --format table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}# 第9步再次启动nginx容器
docker start nginx# 第10步再次查看容器
docker ps --format table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}# 第11步查看容器详细信息
docker inspect nginx# 第12步进入容器,查看容器内目录
docker exec -it nginx bash
# 或者可以进入MySQL
docker exec -it mysql mysql -uroot -p# 第13步删除容器
docker rm nginx
# 发现无法删除因为容器运行中强制删除容器
docker rm -f nginx给常用Docker命令起别名方便访问
# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下
# .bashrc# User specific aliases and functionsalias rmrm -i
alias cpcp -i
alias mvmv -i
alias dpsdocker ps --format table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}
alias disdocker images# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fi数据卷
容器提供程序的运行环境但是程序运行产生的数据、程序运行依赖的配置都应该与容器解耦
数据卷volume是一个虚拟目录是容器内目录与宿主机目录之间映射的桥梁 在上图中
我们创建了两个数据卷conf、htmlNginx容器内部的conf目录和html目录分别与两个数据卷关联。而数据卷conf和html分别指向了宿主机的/var/lib/docker/volumes/conf/_data目录和/var/lib/docker/volumes/html/_data目录
这样以来容器内的conf和html目录就 与宿主机的conf和html目录关联起来我们称为挂载。此时我们操作宿主机的/var/lib/docker/volumes/html/_data就是在操作容器内的/usr/share/nginx/html/_data目录。只要我们将静态资源放入宿主机对应目录就可以被Nginx代理了 /var/lib/docker/volumes这个目录就是默认的存放所有容器数据卷的目录其下再根据数据卷名称创建新目录格式为/数据卷名/_data 为什么不让容器目录直接指向宿主机目录呢 因为直接指向宿主机目录就与宿主机强耦合了如果切换了环境宿主机目录就可能发生改变了。由于容器一旦创建目录挂载就无法修改这样容器就无法正常工作了但是容器指向数据卷一个逻辑名称而数据卷再指向宿主机目录就不存在强耦合。如果宿主机目录发生改变只要改变数据卷与宿主机目录之间的映射关系即可一般数据卷目录比较深不好寻找通常让容器直接与宿主机目录挂载而不使用数据卷
数据卷的相关命令有
命令说明文档地址docker volume create创建数据卷https://docs.docker.com/engine/reference/commandline/volume_create/docker volume ls查看所有数据卷https://docs.docker.com/engine/reference/commandline/volume_ls/docker volume rm删除指定数据卷https://docs.docker.com/engine/reference/commandline/volume_prune/docker volume inspect查看某个数据卷的详情https://docs.docker.com/engine/reference/commandline/volume_inspect/docker volume prune清除数据卷https://docs.docker.com/engine/reference/commandline/volume_prune/
容器与数据卷的挂载要在创建容器时配置对于创建好的容器是不能设置数据卷的。而且创建容器的过程中数据卷会自动创建
数据卷的目录结构较深如果操作数据卷目录会不太方便。在很多情况下会直接将容器目录与宿主机指定目录挂载。挂载语法与数据卷类似
# 挂载本地目录
-v 本地目录:容器内目录
# 挂载本地文件
-v 本地文件:容器内文件本地目录或文件必须以 / 或 ./开头如果直接以名字开头会被识别为数据卷名而非本地目录名
-v mysql:/var/lib/mysql # 会被识别为一个数据卷叫mysql运行时会自动创建这个数据卷
-v ./mysql:/var/lib/mysql # 会被识别为当前目录下的mysql目录运行时如果不存在会创建目录参考 黑马程序员Docker快速入门到项目部署MySQL部署Nginx部署docker自定义镜像DockerCompose项目实战 day02-Docker — 张虎翼