Docker 架构
三个基本概念
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
Docker daemon(Docker 守护进程):
运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)与Docker daemon交互。
Images(镜像):
将软件环境打包好的模板,用来创建容器的,一个镜像可以创建多个容器。
Containers(容器):
Docker的运行组件,启动一个镜像就是一个容器,容器与容器之间相互隔离,并且互不影响。
常用命令
查找镜像
docker search 关键词
下载镜像
docker pull 镜像名:TAG
Tag表示版本,有些镜像的版本显示latest,为最新版本
查看镜像
docker images
删除镜像
docker rmi -f 镜像ID或者镜像名:TAG
-f 表示强制删除
获取元信息
docker inspect 镜像ID或者镜像名:TAG
运行镜像
docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录:容器目录:ro 镜像TD或镜像名:TAG
docker run --name how2jtmall -dit --privileged -p21:21 -p80:80 -p8080:8080 -p30000-30010:30000-30010 how2j/tmall:latest /usr/sbin/init # --name 指定容器名,可自定义,不指定自动命名
--privileged 启动容器的时候,把权限带进去。 这样才可以在容器里进行完整的操作
-i 以交互模式运行容器
-t 分配一个伪终端,即命令行,通常组合来使用
-p 指定映射端口,将主机端口映射到容器内的端口
-d 后台运行容器
-v 指定挂载主机目录到容器目录,默认为rw读写模式,ro表示只读
容器列表
docker ps -a -q
-a 查看所有容器(运行中、未运行)
-q 只查看容器的ID
启动容器
docker start 容器ID或容器名
停止容器
docker stop 容器ID或容器名
删除容器
docker rm -f 容器ID或容器名
-f 表示强制删除
查看日志
docker logs 容器ID或容器名
进入正在运行容器
docker exec -it 容器ID或者容器名
/bin/bash 进入正在运行的容器并且开启交互模式终端
/bin/bash是固有写法,作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。
也可以用docker exec在运行中的容器执行命令
拷贝文件
docker cp 主机文件路径 容器ID或容器名:容器路径
主机中文件拷贝到容器中
docker cp 容器ID或容器名:容器路径 主机文件路径
容器中文件拷贝到主机中
获取容器元信息
docker inspect 容器ID或容器名
创建镜像
更新镜像
先使用基础镜像创建一个容器,然后对容器内容进行更改,然后使用docker commit命令提交为一个新的镜像(tomcat为例)。
1.根据基础镜像,创建容器
docker run --name mytomcat -p 80:8080 -d tomcat
2.修改容器内容
docker exec -it mytomcat /bin/bash cd webapps/ROOT rm -f index.jsp echo hello world > index. html exit
3.提交为新镜像
docker commit -m="描述消息" -a="作者" 容器ID或容器名 镜像:TAG # 例: # docker commit -m="修改了首页" -a="测试" mytomcat zong/tomcat:v1.0
4.使用新镜像运行容器
docker run --name tom -p 8080:8080 -d zong/tomcat:v1.0
使用Dockerfile构建镜像
Dockerfile是一个包含创建镜像所有命令的文件,使用docker build命令可以根据Dockerfile的内容创建镜像(以tomcat为例)。
1.创建一个Dockerfile文件vi Dockerfile
#注意dockerfile指令须大写
FROM tomcat
MAINTAINER zong
RUN rm -f /usr/local/tomcat/webapps/ROOT/index.jsp
RUN echo "<h1>hello world2<h1>" > /usr/local/tomcat/webapps/ROOT/index.html
2.构建新镜像
docker build -f Dockerfile -t zong/tomcat:v2.0 .
# -f Dockerfile路径,默认是当前目录
# -t 指定新镜像的名字以及TAG
使用Dockerfile构建Spring Boot应用镜像
—、准备
- 把你的spring boot项目打包成可执行jar包
- 把jar包上传到Linux服务器
二、构建
1.在jar包路径下创建Dockerfile文件vi Dockerfile
# 指定基础镜像,本地没有会从dockerHub pull下来 FROM java:8 # 可执行jar何复制到基础镜像的根目录下 ADD test.jar /test.jar # 镜像要暴露旳端口,如要使用端口,在执行docker run命令时使用-p生效 EXPOSE 8080 # 在镜像运行为容器后执行旳命令 ENTRYPOINT ["java", "-jar", "/test.jar"]
2.使用docker build命令构建镜像,基本语法
docker build -f Dockerfile -t zong/mypro:v1 . # -f 指定Dockerfile文件的路径 # -t 指定镜像名字和TAG # . 指当前目录,这里实际上需要一个上下文路径
三、运行
运行自己的Spring Boot镜像
docker run --name pro -p 80:80 -d 镜像名:TAG