文章目录
- 1. 了解linux基础
- 2. Docker概述
- 2.1 Docker简介
- 2.2 Docker架构
- 2.3 Docker架构图
- 3. Docker的安装和简单测试
- CentOS7下Docker安装文档
- 3.1 卸载旧的Docker版本(未使用过docker不必操作)
- 3.2 安装Docker
- 3.3 镜像加速(购买过阿里云服务器的读者)
- docker镜像加速参考文档
- 4. Docker的常用命令
- 4.1 镜像相关命令
- 4.2 容器相关命令
- 5. Docker安装Nginx
- 6.Docker安装Tomcat
- DockerHub地址
- 7.Docekr安装redis
- 8. Docker数据管理
- 8.1 数据卷
- 8.2 数据卷容器
- 9. DockerFile
- 9.1DockerFile常用命令
- 9.2使用DockerFile构建自己的springboot项目镜像
- 9.3将自己的镜像发布到docker hub
1. 了解linux基础
Linux基础知识参考
2. Docker概述
2.1 Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
DockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器
2.2 Docker架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。
2.3 Docker架构图
3. Docker的安装和简单测试
CentOS7下Docker安装文档
3.1 卸载旧的Docker版本(未使用过docker不必操作)
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
3.2 安装Docker
1下载所需工具包
yum install -y yum-utils
2安装docker(使用阿里云镜像)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3启动docker
systemctl start docker
4测试hello-world
docker run hello-world
5查看本地docker镜像仓库
docker images
3.3 镜像加速(购买过阿里云服务器的读者)
docker镜像加速参考文档
4. Docker的常用命令
4.1 镜像相关命令
docker images 列出本地镜像
- -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
- -f : 显示满足条件的镜像
- q :只显示镜像id
docker version 显示docker版本信息
docker info 显示docker系统信息,包括镜像和容器数
docker rmi : 删除本地一个或多少镜像。
- -f : 强制删除
docker pull 从镜像仓库中拉取或者更新指定镜像
docker search : 从Docker Hub查找镜像
- -s : 列出收藏值不小于指定值的镜像
4.2 容器相关命令
docker run 镜像名称/id:创建一个新的容器并运行一个命令
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- -d: 后台运行容器,并返回容器id
- –name : 为容器指定一个名称;
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
docker start 容器名 :启动一个或多个已经被停止的容器
docker stop 容器名:停止一个运行中的容器
docker restart 容器名:重启容器
docker kill :杀掉一个运行中的容器。
docker rm :删除一个或多个容器。
docker ps: 列出所有的容器信息
- -a :显示所有的容器,包括未运行的。
- -n :列出最近创建的n个容器。
- -q :静默模式,只显示容器编号。
docker inspect 镜像名称/id 获取镜像或容器的元数据
docker top :查看容器中运行的进程信息,支持 ps 命令参数。
docker attach 容器名 连接到正在运行的某个容器
docker events /镜像名: 从服务器获取实时事件
- -f :根据条件过滤事件;
- -since :从指定的时间戳后显示所有事件;
- -until :流水时间显示到指定的时间为止;
docker logs 容器名 查看指定容器的日志
- -f : 跟踪日志输出
- –since :显示某个开始时间的所有日志
- -t : 显示时间戳
- –tail :仅列出最新N条容器日志
docker cp 主机文件路径 容器id容器路径 //将主机文件复制到容器中
docker cp 容器id容器路径 主机文件路径 //j将容器中的文件复制到主机举例 : 将主机文件复制到容器中
docker diff : 检查容器里文件结构的更改。
docker pause :暂停容器中所有的进程。
docker unpause :恢复容器中所有的进程。
docker create :创建一个新的容器但不启动它
用法同 docker run
5. Docker安装Nginx
- docker search nginx //搜索Nginx镜像
- docker pull nginx //远程拉取Nginx镜像到本地
- docker images //查看本地镜像仓库
- docker run --name nginx01 -p 8080:80 -d nginx //运行Nginx容器
参数说明:
- –name nginx01 :容器名称。
- -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
- -d nginx: 设置容器在在后台一直运行。
- curl localhost:8080 本地测试8080端口的连通性
6.远程浏览器测试
6.Docker安装Tomcat
DockerHub地址
1.docker pull tomcat:9.0 //拉取镜像
2.docker run --name tomcat01 -p 8080:8080 -d tomcat:9.0 //创建并运行容器
3.docker -exec -it tomcat01 //在运行容器中执行命令
4.cp -r webapps.dist/* webapps //复制webapps.dist下的所有文件到webapps目录下
5.exit //退出容器
6.curl localhost:8080 //本地连接测试
远程访问
成功
7.Docekr安装redis
- docker pull redis //拉取镜像
docker run --name redis-test -p 8002:6379 -d redis //创建并运行容器
docker exec -it redis-test /bin/bash //进入容器运行命令
redis-cli //开启客户端
8. Docker数据管理
8.1 数据卷
数据卷是一个可供容器使用的特殊目录,他将主机操作系统目录直接映射进容器,可以将多个容器目录映射到同一个主机目录,实现容器之间数据的共享和同步。
实现主机目录与容器目录映射的俩种方式
- 匿名挂载
1.创建容器进行匿名挂载,并在容器内已挂载目录上进行操作
2.docker inspect 容器名称
查看容器/home目录所挂载到的宿主机目录,在Mounts节点下查看,如图
3.可发现对容器内目录的操作已经同步到了宿主机目录
4.在宿主机目录下创建文件
5.在容器内home目录下进行查看,会发现宿主机下创建的目录同步到容器中
- 具名挂载
具名挂载与匿名挂载类似,不同点在于具名挂载将容器的目录挂载到了指定的宿主机目录,而匿名挂载是将容器的目录挂载到宿主机默认的路径下(/var/lib/docker/volumes/)。
8.2 数据卷容器
数据卷容器是一个专门提供数据卷供其它容器使用,来实现多个容器之间数据持续同步的容器。
一个列子带你秒懂数据卷容器:
1.创建一个数据卷容器,并使用这个数据卷容器创建俩个容器
2.实现了centos01容器与centos02容器的数据同步
总结:centos-containers提供/home卷让centos01容器和centos02进行挂载,最后实现三个容器/home目录下的数据同步。
9. DockerFile
什么是DockFile?
DockFile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
9.1DockerFile常用命令
- FROM : DockFile后续的操作都是基于FROM的镜像
- RUN :用于执行后面跟着的命令行命令,在docker build时运行
- COPY :复制上下文的目录或文件到容器的指定路径
- ADD :和COPY指令类似,不同之处在于会自动解压tar压缩文件
- CMD :和RUN指令类似,用于运行程序,在docker run时运行(如果DockerFile中存在多个CMD命令,仅最后一个生效)
- ENTRYPOINT : 类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序
- ENV : 定义环境变量,如果设置了环境变量,那么在后续的命令中就可以使用了
- VOLUME : 定义匿名数据卷,在启动时(docker run)忘记挂载数据卷,会默认挂载到这个匿名数据卷
- EXPOSE :声明端口,在docker run -P 时候,会随机映射EXPOSE的端口
- ARG :构建参数,与ENV类似,不同点在于ARG的作用域只在docker build的时候
- WORDDIR :指定工作目录,该目录必须提前创建好,会存在于docker镜像的每一层
- USER :用于指定后续命令的用户和用户组
- HEALTHCHECK :用来指定某个程序或指令来监控docker服务的运行状态
- ONBUILD :用于延迟构建命令的执行,简单来说就是本次dockerfile构建镜像时,不会执行其中的ONBUILD命令,当下一个DocekrFile在此DockerFile命令基础上构建镜像时,会执行之前DockerFIle文件里的ONBUILD指令
9.2使用DockerFile构建自己的springboot项目镜像
1.创建DockerFile文件,内容如下(同时将项目的jar包与DockerFIle文件放到同一个目录下)
FROM openjdk:8-jdk-alpine
MAINTAINER maoyu
ADD docker-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8081
ENTRYPOINT [“java”,"-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
2.构建镜像
docker build -t docker-boot . //构建镜像 (注意最后一个 .)
3.创建容器运行
docker run -d --name boot01 -p 8001:8001 docker-boot
4.测试
curl localhost:8001 //本机测试
远程测试
9.3将自己的镜像发布到docker hub
1.登录账号,push镜像
2.去自己的docker hub仓库查看