Docker总结
2021-01-12 19:13:11 0 举报
AI智能生成
doker知识总结,备忘使用
作者其他创作
大纲/内容
简介
开源项目,诞生于2013年初。基于GO语言。加入了Linux基金会。在github上维护。
目标
实现轻量级的操作系统虚拟化解决方案。
为什么使用?
更快的交付和部署
目标:一次创建或配置,可以任意地方部署
秒级启动
更高效的虚拟化
内核级别的虚拟化
更轻松的迁移和扩展
几乎可以在任何平台上运行,物理机,虚拟机,公有云,私有云,个人电脑,服务器等
更简单的管理
所有的修改都以增量的方式被分发和更新
对比传统虚拟机
架构
子主题
基础概念
镜像
一个只读模版,可以用来创建容器
容器
镜像运行的实例
可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等和运行在其中的应用程序)
仓库
集中存放镜像文件的场所
有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)
仓库分为 公开仓库(public) 和私有仓库(private)
Docker Hub是最大的公开仓库,存放了数量庞大的镜像供用户下载。用户可也可在本地网络创建私有仓库。
容器/镜像运行关系
子主题
安装
安装分类
centos7 中自带docker,可以直接 sudo yum install docker 安装,但不是最新版
最新版安装
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install docker-ce
问题
Problem: package docker-ce-3:20.10.2-3.el7.x86_64 requires containerd.io >= 1.4.1, but none of the p
解决
需先安装:io
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.3-3.1.el7.x86_64.rpm
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.3-3.1.el7.x86_64.rpm
查看docker版本
docker version
docker info
启动docker
sudo service docker start
开机启动:sudo chkconfig docker on
基本操作
容器操作
创建容器
create [镜像名]
创建新容器,但不启动
run [镜像名]
创建新容器,并运行一个命令
起停容器
start/stop/restart [容器名]
杀掉容器
kill [容器名]
删除停止的容器
rm [容器名]
注意:未停止的容器不能删除
暂停/恢复容器
pause/unpause [容器名]
查看容器列表
ps
查看容器配置信息
inspect [容器名]
进入容器环境中进行交互操作
exec -it [容器名] /bin/bash
查看日志
logs --since="2019-02-01" -f -taiil=10
数据拷贝
cp path1 [容器名]:path
容器归档
export -o test.tar [容器名] 或者 export [容器名] > test.tar
导入归档文件,生成镜像
import test.tar
镜像操作
查看镜像列表
images
删除镜像
rmi [镜像名:版本]
标记镜像
tag [镜像名:版本] [仓库]/[镜像名:版本]
创建镜像(dockerfile)
build -t [镜像名:版本] [path]
查看镜像创建历史
history [镜像名:版本]
保存镜像为 tar 归档文件
save -o xxx.tar [镜像名:版本] 或者 save [镜像名: 版本] > xxx.tar
从归档文件加载镜像
load --input xx.tar 或者 load < xxx.tar
容器详解
交互式创建容器并进入
命令
docker run -it --name centos centos:latest /bin/bash
退出
退出且关闭容器
exit
退出不关闭容器
Ctrl+P+Q
后台启动容器
docker run -d --name nginx nginx
注意:-d表示后台运行, -it交互shell
进入已经运行的容器
docker exec -it nginx /bin/bash
查看容器元数据
docker inspect nginx
绑定容器端口到主机
docker run -d -p 8080:80 --name nginx nginx:latest
挂载主机文件目录到容器内
docker run -dit -v /root/peter_dir/:/pdir --name centos centos:lastest
复制主机文件到容器内
docker cp config.xml centos:/var
镜像的创建
由容器提交镜像
镜像与容器,采用联合文件技术管理文件
子主题
dockerfile创建(常用)
dockerfile
基础要素
详解
FROM
FROM {base镜像}, 必选,放在第一行,表示从那个baseimage 开始构建
MAINTAINER
可选,表示image作者
RUN
可选,每个RUN命令都是 启动一个容器,然后执行命令,再提交存储层文件变更
如果需要一次执行多条命令,可以使用 && 进行连接
CMD
作为执行container时候的默认行为,类似linux的初始化命令。
一个dockerfile只能有一个有效的CMD,当定义多个CMD当时候,只有最后一个会生效
当运行container的时候声明了command,则不用再用 image 中的CMD默认所定义的命令
EXPOSE
EXPOSE指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在Dockerfile中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是dockerrun-P时,会自动随机映射EXPOSE的端口。
entrypoint
entrypoint的作用是,把整个container变成可执行的文件,且不能够通过替换CMD的方法来改变创建container的方式。但是可以通过参数传递的方法影响到container内部
每个Dockerfile只能够包含一个entrypoint,多个entrypoint只有最后一个有效
当定义了entrypoint以后,CMD只能够作为参数进行传递
ADD & COPY
把主机上的文件或者目录复制到image中(能够进行自动解压压缩包)
ENV
用来设置环境变量,RUN可以使用它所创建的环境变量
WORKDIR
用来指定当前工资目录(类似linux中cd到某目录中)
RUN
运行RUN指令的用户
VOLUME
用来创建一个在image之外的 mount point
应用
主业
介绍
docker理念里,容器启动时,应当指定它的主业是什么,如nginx容器的主业是nginx代理服务,tomcat容器是web服务等
注意
容器创建时,必须指定主业任务,如不指定,则容器无事可做则立即退出。
类型
默认主业
在dockerfile打包镜像等时候,可以使用cmd命令指定一个默认的主业
注意:创建容器时,可以覆盖默认命令
稳定主业(推荐)
使用ENTRYPOINT,指定后不能更改用途
ENTRYPOINT,字义即容器入口,不能被run中的cmd覆盖
执行
docker build -它nginx:v3 .
举例
手动打包springboot镜像
1 将springboot打好的jar包上传
2 在同级目录下,创建Dockerfile 文件
3 docker打包业务镜像
4 启动镜像,业务运行
maven源码打包(常用)
1 上传源码到docker环境中(一般时git/svn拉取源码)
2 maven 打包:maven clean package
3 执行docker命令生成镜像
maven插件打包(方便开发人员)
使用插件
docker-maven-plugin
步骤
1 pom文件中加入 docker-maven-plugin插件配置
2 maven 命令编译项目,打包镜像:mvn clean package docker:build
仓库
数据管理
Docker-Compose
Swarm集群管理
0 条评论
下一页