亅新厦建设集团网站,鞍山微信小程序开发公司,搬瓦工建wordpress,公司开发网站建设价格文章目录 一、基本概念1、体系结构2、容器与镜像1#xff09;镜像2#xff09;容器a、容器内部结构b、容器生命周期 3、执行流程 二、常用命令docker pull 镜像名:tags #xff1a;从远程仓库抽取镜像docker images#xff1a;查看本地镜像docker run 镜像名:t… 文章目录 一、基本概念1、体系结构2、容器与镜像1镜像2容器a、容器内部结构b、容器生命周期 3、执行流程 二、常用命令docker pull 镜像名:tags 从远程仓库抽取镜像docker images查看本地镜像docker run 镜像名:tags 创建容器启动应用docker ps 查看正在运行中的容器docker ps -a查看所有容器docker rm -f 容器id/容器名删除容器、-f表示强制删除docker rmi -f 镜像名:\tags删除镜像docker exec [-it] 容器id/容器名 命令在容器中执行命令 三、Docker快速部署Tomcat运行四、Dockerfile1、基础命令FROMLABEL 或 MAINTAINERWORKDIRADD 或 COPYENVEXPOSE 2、运行指令RUN执行命令ENTRYPOINT启动命令CMD默认命令案例演示 3、Dockerfile自动部署Tomcat应用4、Dockerfile构建Redis镜像 五、镜像分层六、容器间通信1、Link单向通信2、Bridge双向通信 七、容器间共享数据1、为什么要数据共享2、如何实现 八、Docker-compose1、是什么2、适用场景3、如何安装4、应用实战 总结 一、基本概念
Docker是容器化平台是提供应用打包,部署与运行应用的容器化平台
1、体系结构
客户端通过API访问服务器 运维人员可以通过API访问不同服务器
2、容器与镜像
1镜像 可以理解为软件的安装包 镜像是文件,是只读的,提供了运行程序完整的软硬件资源,是应用程序的集装箱 2容器 可以理解为运行的软件 是镜像的实例,由Docker负责创建,容器之间彼此隔离 a、容器内部结构
每部署1个Tomcat容器自动包含了3个组件 docker部署容器底层都会有1个迷你linux操作系统
docker本身具备了部分虚拟化职能介于容器化和虚拟化之间的一个产品很迷你的操作系统很多命令是没有的比如没有ll命令 默认安装的镜像和容器存放位置/var/lib/docker下的containers和image
b、容器生命周期 kill和stop的区别一个是杀掉进程一个是暂停而已
3、执行流程
Client用户发送命令DOCKER_HOST接受和处理命令Registry提供镜像 客户端发送命令-》服务器从本地仓库看看有没有没有就去远程仓库获取-》等到运行时会创建容器
二、常用命令
docker pull 镜像名:tags 从远程仓库抽取镜像 注不加tags默认拉取最多使用的 docker images查看本地镜像
docker run 镜像名:tags 创建容器启动应用 注运行时镜像不存在会先进行拉取 拓展参数说明-p、-d、-name 端口映射加参数-p 宿主机端口:容器端口 后台运行-d 指定容器名运行–name dockerName docker ps 查看正在运行中的容器
docker ps -a查看所有容器
docker rm -f 容器id/容器名删除容器、-f表示强制删除
docker rmi -f 镜像名:tags删除镜像
docker exec [-it] 容器id/容器名 命令在容器中执行命令 参数说明 exec 在对应容器中执行后面的命令 -it 采用交互方式执行命令 例子docker exec -it xxx /bin/bash /bin/bash开启一个交互式的命令行会话进入什么目录 /usr/local/tomcat就是我们进入Tomcat容器的默认路径工作路径 三、Docker快速部署Tomcat运行
官方提供的远程镜像仓库hub.docker.com 进入官方搜索Tomcat有相关命令说明各种环境参数直接按照来即可 这里我们不用去看官方有什么镜像也可以直接执行下面的命令就会去拉取最常用的tomcat镜像了会提示Using default tag: latest
docker pull tomcat让容器跑起来执行下面命令
docker run tomcat这时候可以看到已经启动成功显示8080端口但是外部还是无法访问为啥默认情况下容器内的Tomcat服务只会绑定到容器的内部IP地址而不是主机的IP地址。 如果想在外部访问我们可以这么操作将容器的端口映射到主机的端口上。可以使用-p参数来指定端口映射。使用docker run -p 8000:8080 tomcat命令将容器的8080端口映射到主机的8000端口上这样我们就可以直接使用浏览器访问了如下访问返回404说明已经得到了响应 如果前面我们已经启动过需要先删除容器使用docker rm 容器ID但可以提示运行的容器无法删除可以先停止执行docker stop 容器ID命令然后再删除或者直接加上-f参数直接强制删除docker rm -f 容器ID
四、Dockerfile
Dockerfile是镜像描述文件是一个包含用于组合镜像的命令的文本文档Docker通过读取Dockerfile中的指令按步自动生成镜像 命令docker build -t 机构/镜像名:tags Dockerfile目录
1、基础命令
FROM 基于基准镜 FROM centos #制作基准镜像(基于centos:lastest) FROM scratch #不依赖任何基准镜像base image FROM tomcat: 9.0.22-jdk8-openjdk 尽量使用官方提供的Base Image LABEL 或 MAINTAINER 说明信息 MAINTAINER forlan.com LABEL version “1.0” LABEL description “forlan” WORKDIR 设置工作目录 WORKDIR /usr/local WORKDIR /usr/local/newdir 新目录或不存在的会自动创建 尽量使用绝对路径 ADD 或 COPY 复制文件 ADD hello /复制到根路径 ADD test.tar.gz /添加根目录并解压 ADD 除了复制还具备添加远程文件功能 ENV 设置环境常量 比如设置JDKENV JAVA_HOME /usr/local/openjdk8 RUN ${JAVA_HOME}/bin/java -jar test.jar 尽量使用环境常量可提高程序维护性 EXPOSE 声明容器运行时将监听的网络端口并不会实际打开或映射端口只是作为一种文档形式的声明用于向用户和其他开发人员传达容器的预期网络接口 比如EXPOSE 8080实际上外部还是访问不到这个 要实现端口映射还是得执行这个docker run -p 8000:8080 tomcat将容器内部端口暴露给物理机 2、运行指令
RUN 或 CMD 或 ENTRYPOINT RUN : 在Build构建时执行命令 ENTRYPOINT : 容器启动时执行的命令 CMD : 容器启动后执行默认的命令或参数 两种运行方式
Shell运行方式 格式xx1 xx2 使用Shell执行时当前shell是父进程生成一个子shell进程 在子shell中执行脚本脚本执行完毕退出子shell回到当前shell。 Exec运行方式 格式[“xx1”,“xx2”] 使用Exec方式会用Exec进程替换当前进程并且保持PID不变 执行完毕直接退出并不会退回之前的进程环境 常用的方式推荐使用Exec
RUN执行命令 构建时运行 RUN yum install -y vimShell运行方式 RUN [“yum”,“install”,“-y”,“vim”]Exec运行方式 ENTRYPOINT启动命令
一定会执行 ENTRYPOINT(入口点)用于在容器启动时执行命令 Dockerfile中只有最后一个ENTRYPOINT会被执行 ENTRYPOINT [“ps”] 注一定会被运行 CMD默认命令
不一定会被运行后面会演示案例 CMD用于设置默认执行的命令 如Dockerfile中出现多个CMD则只有最后一个被执行 如容器启动时附加指令ls则CMD被忽略比如这种会被取代 CMD [“ps” , “-ef”] 案例演示
写dockfile文件echo打印东西到控制台 cmd可以外部传参因为我们附加了其它命令它会被替代 ENTRYPOINT和CMD的东西会被拼接在一起执行
3、Dockerfile自动部署Tomcat应用
1编辑Dockerfile vi Dockerfile
FROM tomcat
MAINTAINER forlan.com
WORKDIR /usr/local/tomcat/webapps
ADD docker-web ./docker-web参数说明
FROM基准镜像WORKDIR类似cd命令进入目录特殊不存在会创建目录ADD复制文件A到B
2创建docker-web目录上传index.html index.html内容如下
h1forlan测试Docker应用1/h13构建镜像 docker build -t forlan.cn/webapp:1.0 . 注镜像名要小写 4查看所有镜像 5运行容器 docker run -p 8001:8080 -d forlan.cn/webapp:1.0 6验证 http://192.168.56.100:8001/docker-web/index.html
4、Dockerfile构建Redis镜像
1上传我们下下载好的文件 redis-4.0.14.tar.gz和redis-7000.conf 2创建dockerfile文件
FROM centos
RUN [yum,install,-y,gcc,gcc-c,net-tools,make]
WORKDIR /docker/docker-redis
ADD redis-4.0.14.tar.gz .
WORKDIR /docker/docker-redis/redis-4.0.14/src
RUN make make install
WORKDIR /docker/docker-redis/redis-4.0.14
ADD redis-7000.conf .
EXPOSE 7000
CMD [redis-server,redis-7000.conf]3构建镜像
docker build -t forlan.com/docker-redis .五、镜像分层 镜像层只读容器层可读可写、独立
mywebapp执行过程每执行一步都会有个临时容器相当于快照 有啥好处 命令没有发生变化时使用的是缓存 六、容器间通信
1、Link单向通信
注容器间不建议使用ip进行通信可以使用容器名称 1运行一个tomcat容器指定容器名为web docker run -d --name web tomcat 2运行一个MySQL容器指定容器名为database docker run -d --name database -it centos /bin/bash 3查看容器ip docker inspect 容器id/容器名 | grep IPAddress 4链接两个容器使用docker run -d --name web --link database tomcat命令但只是单向通信如图
2、Bridge双向通信
其实Link也可以实现双向通信但是麻烦我们来看看Bridge。 1查看网桥docker network ls 2创建新的网桥docker network create -d bridge forlan-bridge
3容器和网桥绑定docker network connect forlan-bridge 容器名 这样就实现双向通信了网桥相当于虚拟网卡如果需要和外部通信容器数据包需要通过虚拟网卡转成物理网卡的数据包
七、容器间共享数据
1、为什么要数据共享
假设我们部署了2个Tomcat容器存在相同的web页面文件发生变化每个容器都要进行其实我们可以把共享文件放到物理机上统一维护即可
2、如何实现 其实就是通过数据卷volume它就是保存数据的单位把共享文件放到宿主机 从原来下图的东西单独放各自的容器内 在容器外宿主机内挂一个目录控制容器内的目录文件 通过设置-v挂载宿主机目录 格式docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名 实例docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat 缺点每次都要输入很长的命令而且大小写要一样 通过–volumes-from 共享容器内挂载点 创建共享容器docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true/bin/true就是占位符没啥用 共享容器挂载点docker run --volumes-from webpage --name t1 -d tomcat 创建新的话就很简单了只需要t1改为t2docker run --volumes-from webpage --name t2 -d tomcat 八、Docker-compose
1、是什么
容器编排工具通过yml文件定义多容器如何部署可以控制先部署容器1再部署容器2… Docker Compose
2、适用场景
单机部署它是单机多容器部署工具
3、如何安装 WIN/MAC默认提供Docker Compose,Linux需安装 1下载最新版本的Docker Compose
curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose2 设置为可执行权限
chmod x /usr/local/bin/docker-compose3验证Docker Compose是否已成功安装
docker-compose --version4、应用实战
这里借鉴了一个bsbdj应用来实战下 1bsbdj上传到服务器 2编写Dockerfile构建镜像 app镜像
FROM openjdk:8u222-jre
WORKDIR /docker/bsbdj
ADD bsbdj.jar .
ADD application.yml .
ADD application-dev.yml .
EXPOSE 80
CMD [java,-jar,bsbdj.jar]执行构建
docker build -t forlan.com/app .db镜像官方规定SQL文件放到docker-entrypoint-initdb.d该目录就会自动初始化
FROM mysql:5.7
WORKDIR /docker-entrypoint-initdb.d
ADD init-db.sql .执行构建
docker build -t forlan.com/db .3运行容器
docker run -d --name db -e MYSQL_ROOT_PASSWORDroot forlan.com/db4进入MySQL容器内部验证数据库是否正常
docker exec -it db /bin/bash
mysql -uroot -proot执行show databases可以看到数据库已经安装好 5一键发布两个镜像
创建yml文件vim docker-compose.yml restart: always容器宕机会自动重启保证容器稳定 设置依赖的容器进行通信 端口映射宿主机端口容器端口 version: 3.3
services:db:build: ./bsbdj-db/restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: rootapp:build: ./bsbdj-app/depends_on:- dbports:- 80:80restart: always启动容器
docker-compose up -d查看日志
docker-compose logs [容器名]停止并移除容器docker-compose down
注意这里记得改下原先会报错localhost读取的是web容器的ip肯定读取不到改为db容器的 访问ip验证192.168.56.100
总结 首先我们介绍了Docker的体系结构、容器与镜像的基本概念以及执行流程。接着我们详细解释了常用的Docker命令包括镜像的抽取、本地镜像的查看、容器的创建与启动、正在运行中的容器的查看以及容器的删除与镜像的删除等。此外我们还介绍了在容器中执行命令的方法。然后我们通过一个案例演示了如何使用Docker快速部署Tomcat运行并详细解释了Dockerfile的编写包括基础命令、运行指令以及案例演示。此外我们还介绍了镜像分层和容器间通信的相关内容。最后我们解释了为什么要数据共享以及如何实现数据共享并介绍了Docker-compose的相关内容包括其定义、适用场景、安装方法以及应用实战。 总的来说Docker用于创建和管理容器化的应用程序环境Dockerfile用于定义构建镜像的步骤而Docker-compose用于定义和管理多个容器的组合Link和Bridge用于实现容器间通信Volume用于持久化存储数据共享数据。