Docker 入门篇
文章目录
- Docker 入门篇
- 一、docker简介
- 1.1、docker说明:
- 1.2、docker镜像说明:
- 1.2.1、UnionFS(联合文件系统)
- 1.2.2、docker镜像分成的好处
- 1.2.3、docker平台架构图
- 二、docker的常用命令
- 1.1、手册查询
- 1.2、docker启停和信息查询
- 1.3、容器启停
- 1.4、镜像查询和查找和下载
- 1.5、删除镜像
- 1.6、运行容器命令
- 1.7、查看容器日志和进程和细节
- 1.8、进入容器的2种方式和区别
- 1.9、文件拷贝
- 2.0、commit生成新镜像
- 2.1、导入和导出容器
- 2.1、镜像备份及还原
- 2.2、其他常用命令
- 三、Docker容器数据卷
- 1.1、权限问题
- 1.2、挂载
- 1.3、规则继承
- 四、本地镜像发布到阿里云
- 1.1、阿里云配置和上传流程
- 1.2、拉取上传的镜像文件
- 四、本地镜像发布到私有库
- 1.1、搭建私有DockerHub
- 1.2、推送镜像
- 1.2.1、修改配置文件使之支持http
- 1.2.2、查看私服镜像
- 入门完结
一、docker简介
docker官网:http://www.docker.com
Docker Hub官网: https://hub.docker.com
docker安装流程-官网:https://docs.docker.com/engine/install/
1.1、docker说明:
- Docker是基于Go语言实现的云开源项目
- docker是容器虚拟化技术,让每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响
- docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
- 在Docker镜像的最底层是引导文件系统bootfs
- rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了
1.2、docker镜像说明:
什么是镜像?
是一种轻量级、可执行的独立软件包
比如mysql镜像运行起来就变成了mysql容器
1.2.1、UnionFS(联合文件系统)
- Union文件系统(UnionFS)是一种
分层
、轻量级并且高性能的文件系统。 - 它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下
Union 文件系统是 Docker 镜像的基础
- 镜像可以通过分层来进行继承-----重点
特性:
一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统
联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
好比画卷:
以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载
1.2.2、docker镜像分成的好处
镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用
说明:
- 比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;
- 同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享
1.2.3、docker平台架构图
二、docker的常用命令
1.1、手册查询
#手册命令
docker help 查看帮助手册
docker run --help 查看关于docker run 的帮助手册
1.2、docker启停和信息查询
#docker 启动类命令
systemctl start docker 启动docker
systemctl stop docker 停止docker
systemctl restart docker 重启docker
systemctl status docker 查看docker状态
systemctl enable docker 开机启动
docker info 查看docker概要信息
docker system df 表示查看镜像/容器/数据卷所占的空间
1.3、容器启停
#容器启停
启动: docker start 容器ID或者容器名
重启: docker restart 容器ID或者容器名
停止: docker stop 容器ID或者容器名
强制停止: docker kill 容器ID或容器名
删除停止的容器: docker rm 容器ID
一次性删除多个:
1.docker rm -f $(docker ps -a -q)
2.docker ps -a -q | xargs docker rm
1.4、镜像查询和查找和下载
#镜像命令
docker ps 列出当前所有正在运行的容器
docker images 列出本地主机上的镜像
docker images -a 列出本地所有的镜像(含历史映像层)
docker images -q 只显示镜像ID
docker search 某个XXX镜像名字
例:
docker search redis 表示查询关于redis的镜像
docker search --limit 5 redis 表示只列出5个镜像,默认25个
docker pull 某个XXX镜像名字 表示下载镜像
例:
docker pull redis:latest 拉取最新的redis镜像
docker pull redis:6.2.1 拉取redis6.2.1版本的镜像
1.5、删除镜像
#删除镜像
docker rmi 某个XXX镜像名字ID
docker rmi -f 镜像ID 表示删除单个
docker rmi -f 镜像名1:TAG 镜像名2:TAG 表示删除多个
docker rmi -f $(docker images -qa) 删除全部
1.6、运行容器命令
#拉取并运行容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
例
docker run -it redis:6.0.8 表示前台交互式启动
docker run -d redis:6.0.8 表示后台守护式启动
docker run -it redis:6.0.8 /bin/bash 表示前台交互式启动,有个交互式Shell,用的是/bin/bash。
参数说明:
-d 表示后台启动
-i 表示使用交互式启动。
-t 终端,要有黑窗口
-it 表示交互式启动有黑窗口,可以输入命令行
-e 表示设置环境变量参数
-v 表示数据挂载
-p 表示指定端口
--name 表示给容器取名称
--privileged 表示权限
/bin/bash 交互式Shell用/bin/bash模式
例子:
docker run --privileged=true --name elasticsearch6.8 \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms128m -Xmx2048m" \
-v /data/mydata/elasticsearch6/config/elasticsearch.yml:/usr/share/elasticsearch6/config/elasticsearch.yml \
-v /data/mydata/elasticsearch6/data:/usr/share/elasticsearch6/data \
-v /data/mydata/elasticsearch6/plugins:/usr/share/elasticsearch6/plugins \
-d elasticsearch:6.8.8
1.7、查看容器日志和进程和细节
#查看容器日志和进程和细节:
查看日志
docker logs 容器ID
查看容器内运行的进程
docker top 容器ID
查看容器内部细节(很常用,很重要)
docker inspect 容器ID
1.8、进入容器的2种方式和区别
#进入容器
docker exec -it 容器ID bashShell 例:docker exec -it mysql /bin/bash
docker attach 容器ID
说明:
表示重新进入
attach 直接进入容器启动命令的终端,不会启动新的进程
用exit退出,会导致容器的停止。
docker exec 和 docker attach 区别:
exec 是在容器中打开新的终端,并且可以启动新的进程。用exit退出,不会导致容器的停止。
attach 直接进入容器启动命令的终端,不会启动新的进程。用exit退出,会导致容器的停止。
推荐使用 docker exec 模式
1.9、文件拷贝
#容器考到主机上
docker cp 容器ID:容器内路径 目的主机路径
例:将elasticsearch的nodes文件 拷贝到linux主机的/home/esdata/
docker cp -a elasticsearch:/usr/share/elasticsearch/data/nodes /home/esdata/
#主机考到容器上
例:将linux主机上的nodes拷贝进docker里面es容器中
docker cp -a /home/esdata/nodes elasticsearch6.8:/usr/share/elasticsearch/data
2.0、commit生成新镜像
语法:
docker commit [OPTIONS] 容器id 自己取的镜像名:自己写的版本号
[OPTIONS说明]
-a :提交的镜像作者
-c :使用Dockerfile指令来创建镜像
-m :提交时的说明文字
-p :在commit时,将容器暂停
2个示例:
docker commit -a sqy -m ”这是说明” c167ee237b87 mycentos:1.4
docker commit centos mycentos:2.0
2.1、导入和导出容器
- export 导出容器的内容留作为一个tar归档文件
- import 从tar包中的内容创建一个新的文件系统再导入为镜像
docker export 容器ID > 文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
导出
导入
2.1、镜像备份及还原
使用案例 :
镜像备份
docker save -o /opt-docker/backup/nextcloud.19.0.2.tar docker.io/nextcloud:19.0.2
或
docker save -o /opt-docker/backup/nextcloud.19.0.2.tar b1a46a1f87f3
还原镜像备份
docker load -q -i /opt-docker/backup/nextcloud.19.0.2.tar
2.2、其他常用命令
attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像
build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
commit Create a new image from a container changes # 提交当前容器为新的镜像
cp Copy files/folders from the containers filesystem to the host path #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container # 创建一个新的容器,同 run,但不启动容器
diff Inspect changes on a container's filesystem # 查看 docker 容器变化
events Get real time events from the server # 从 docker 服务获取容器实时事件
exec Run a command in an existing container # 在已存在的容器上运行命令
export Stream the contents of a container as a tar archive # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history Show the history of an image # 展示一个镜像形成历史
images List images # 列出系统当前镜像
import Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info Display system-wide information # 显示系统相关信息
inspect Return low-level information on a container # 查看容器详细信息
kill Kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应 save]
login Register or Login to the docker registry server # 注册或者登陆一个 docker 源服务器
logout Log out from a Docker registry server # 从当前 Docker registry 退出
logs Fetch the logs of a container # 输出当前容器日志信息
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
pause Pause all processes within a container # 暂停容器
ps List containers # 列出容器列表
pull Pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器
restart Restart a running container # 重启运行的容器
rm Remove one or more containers # 移除一个或者多个容器
rmi Remove one or more images # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run Run a command in a new container # 创建一个新的容器并运行一个命令
save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应 load]
search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像
start Start a stopped containers # 启动容器
stop Stop a running containers # 停止容器
tag Tag an image into a repository # 给源中镜像打标签
top Lookup the running processes of a container # 查看容器中运行的进程信息
unpause Unpause a paused container # 取消暂停容器
version Show the docker version information # 查看 docker 版本号
wait Block until a container stops, then print its exit code # 截取容器停止时的退出状态值
三、Docker容器数据卷
用处:将docker容器内的数据保存进宿主机的磁盘中,数据持久化
- 卷就是目录或文件
- 卷的设计目的就是数据的持久化,完全独立于容器的生存周期
- 因此Docker不会在容器删除时删除其挂载的数据卷
删除容器后,挂载的文件可以在重新运行起容器找回来
1.1、权限问题
Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个
--privileged=true
参数即可
1.2、挂载
读写模式:默认是读写也就是:rw,容器内和linux都可以读写操作文件
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
只读模式:容器实例内部被限制,只能读取不能写,挂载出来的才能修改
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
示例:
docker run --privileged=true --name elasticsearch6.8 \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms128m -Xmx2048m" \
-v /data/mydata/elasticsearch6/config/elasticsearch.yml:/usr/share/elasticsearch6/config/elasticsearch.yml \
-v /data/mydata/elasticsearch6/data:/usr/share/elasticsearch6/data \
-v /data/mydata/elasticsearch6/plugins:/usr/share/elasticsearch6/plugins \
-d elasticsearch:6.8.8
例子说明:
run 运行镜像生成容器,如果没有镜像会先拉取在生成
--privileged=true 表示放开权限
使用elasticsearch:6.8.8 的镜像文件
容器取名为elasticsearch6.8
-p 9200:9200 表示linux和容器端口做映射[外部端口:内部端口]。表示linux使用9200的端口访问到docker里面的9200端口
-v 表示挂载文件或者目录 公式为 -v /宿主机绝对路径目录 :/容器内目录
-d 表示后台运行
-e 表示设置环境变量
1.3、规则继承
比如 容器二 继承 容器一 的挂载规则
重点:
当父类容器被删除时,继承者的规则就消失了
语法:--volumes-from 要被继承的容器名(父类)
u1表示:ubuntu容器1
u2表示:ubuntu容器2
u2继承u1的挂载规则
docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu
四、本地镜像发布到阿里云
1.1、阿里云配置和上传流程
流程:
- 选择控制台,进入容器镜像服务
- 选择个人实例
- 创建命名空间
- 创建仓库名称
- 进入管理界面获得脚本
- 将镜像推送到阿里云
如图:
得到脚本
docker执行脚本如图:
1.2、拉取上传的镜像文件
docker pull 地址/镜像名称:版本号
四、本地镜像发布到私有库
1.1、搭建私有DockerHub
# 运行私有库Registry,相当于本地有个私有Docker hub
#拉取
docker pull registry
#运行镜像生成容器
#说明 默认情况,仓库被创建在容器的/var/lib/registry目录
docker run -d -p 5000:5000 \
-v /zzyyuse/myregistry/ :/tmp/registry \
--privileged=true \
--name=registry \
registry
1.2、推送镜像
1.2.1、修改配置文件使之支持http
docker默认不允许http方式推送镜像
vim /etc/docker/daemon.json
内容如下:
{
"registry-mirrors": ["https://aa25jngu.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.62.10:5000"]
}
说明:
第一行是阿里云镜像加速
第二行是让他支持http
- commit 我们处理好的容器生成镜像文件
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
- 推送 (可以先去私服创建目录在推送)
# 将新镜像myubuntu:1.2修改符合私服规范的Tag
#给镜像打tag
docker tag 镜像:Tag Host:Port/Repository:Tag
#例如:
docker tag myubuntu:1.2 192.168.43.10:5000/myubuntu:1.2
或者
docker tag 2e25d8496557 xxxxx.com/工程目录/myubuntu:1.2
#推送:
#公式:docker push xxxxx
#例如:
docker push 192.168.62.10:5000/myubuntu:1.2
1.2.2、查看私服镜像
方法一:登入私服
或者浏览器
docker login http://xxxxx.com
方法二:命令行直接查看
curl -XGET http://192.168.62.10:5000/v2/_catalog
入门完结
docker的基本入门完结
下一篇:DockerFile和docker网络与Docker-compose容器编排(二)
第三篇:Docker可视化工具与容器监控(三)
第四篇:Docker性能优化(四)