江门网站制作报价,门户网站开发框架,天津市做网站的公司,怎样设计一个网站平台Docker是什么
Docker是一个快速构建#xff0c;运行#xff0c;管理应用的工具
传统基于linux安装程序较为复杂繁琐#xff0c;使用docker可以快速的进行项目部署和管理 镜像与容器
Docker进行安装应用时#xff0c;会自动搜索并下载应用镜像(image)。镜像不仅包含应用本…Docker是什么
Docker是一个快速构建运行管理应用的工具
传统基于linux安装程序较为复杂繁琐使用docker可以快速的进行项目部署和管理 镜像与容器
Docker进行安装应用时会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身还包括应用所运行的环境配置系统函数库Docker在运行景象时会创建一个隔离环境称为容器(container)。
只要安装好了dockerdocker的镜像能够忽略操作系统的差异直接进行部署运行因为所有跟系统环境相关的部分docker镜像中都是包含的
不同的容器之间是相互隔离的不会相互产生影响也不会因为需求不同的环境出现问题
Docker的基本使用
docker run命令
docker run -d \ #--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORDctrl \mysql
通过这样一个命令就能实现mysql的下载直接到运行
命令解读
docker run -d \ #--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORDctrl \mysql
docker run创建并运行一个容器-d让容器在后台运行--name : 为容器起名必须唯一-p 3306:3306:设置端口映射 前者为宿主机端口后者为容器内端口-e KEYValue : 设置环境变量具体参数可以查看镜像官方文档mysql : 指定运行的镜像名 镜像名一般由两部分组成[repository]:[tag]repository为镜像名tag为镜像版本如果不写名称默认为最新版本 关于镜像和容器常用指令
docker save -o nginx.tar nginx
将镜像保存为其他文件
-o 想要得到的文件名 镜像名
docker load -i nginx.tar
将其他类型文件加载为镜像
-i 想要加载的文件名
docker rmi 镜像名
移除镜像
docker rm 容器名
移除容器
docker exec 容器名
进入容器
docker ps --format 格式参数
可以进行简化
查看容器 给常用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
然后执行命令使别名生效
source /root/.bashrc 数据卷
数据卷(volume)是一个虚拟目录是容器内目录与宿主机目录之间映射的桥梁
因为容器是对外隔离的想要修改容器内文件需要进入到容器内部但容器内的环境和函数库是精简到极致的所以操作不方便。
使用数据卷与主机文件系统的目录进行映射然后再使数据卷与容器内部的文件目录进行挂载
docker就实现了宿主机目录和容器内目录的双向绑定在其中一侧所进行的操作都会在另一侧映射出来 通过数据卷作为媒介完成挂载
数据卷挂载在执行docker run命令时使用-v 数据卷容器内目录 可以完成数据卷挂载
当创建容器时如果挂载了数据卷且数据卷不存在会自动创建数据卷
如果创建容器时没有完成数据卷挂载就无法再进行挂载了 基于本地目录直接挂载
容器的挂载还有第二种方式即基于本地目录直接挂载
语法与数据卷挂载类似区别在于-v参数之后不写数据卷直接写本地目录即可 自定义镜像
日常开发中不仅仅需要使用Docker官方提供的镜像还有可能会用到docker官方没有提供的镜像这个时候就需要我们自己自定义镜像了
重新介绍一遍镜像就是包含了应用程序程序运行的系统函数库运行配置等文件的文件包。
构建镜像的过程其实就是把上述文件打包的过程。
镜像是分为很多层的比如最底层的基础镜像就是应用依赖的系统函数库环境配置文件最顶层的入口层镜像运行入口一般是程序启动的脚本和参数中间添加安装包依赖配置等每次操作也会形成新的一层。
制作镜像就是将这些层分别压缩打包
你可以观察到在从docker官方拉取镜像的时候如果本地已经有了另一个镜像需要的基础镜像会直接跳过这一层
DockerFile
DockerFile就是一个文本文件其中包含指令用于说明在构建镜像的过程中需要进行什么样的操作
以下为常见指令 FROM openjdk:11.0-jre-buster
COPY docker-demo.jar /app.jar
ENTRPOINT [java,-jar,/app.jar]
当编写好了DockerFile可以用以下命令来构建镜像
docker build -t myImage:1.0 .
-t: 是给镜像起名格式依然是respositorytag的格式不指定tag时默认为latest. : 是指定Dockerfile所在目录如果就在当前目录则指定为“.”
网络
默认情况下所有容器都是以bridge方式连接到docker的一个虚拟网桥上的 但是这种情况下随着容器的开启和关闭容器被分配到的ip也是变化的如果想让不同容器通过ip进行通信不太可行需要用到自定义网络 docker compose
在日常开发中我们在进行项目部署的时候基本上都会同时用多个docker容器比如比较经典的数据库nginx项目本体而一个一个手动部署启动过于繁琐所以我们需要用到docker compose 使用docker 查看镜像无权限问题
报错
[yichenbogon ~]$ docker images
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json: dial unix /var/run/docker.sock: connect: permission denied
解决命令
sudo chown root:docker /var/run/docker.sock # 修改docker.sock权限为root:docker
sudo groupadd docker # 添加docker用户组
sudo gpasswd -a $USER docker # 将当前用户添加至docker用户组
newgrp docker