docker基础和使用(一)

Docker 入门篇



一、docker简介

docker官网:http://www.docker.com
Docker Hub官网: https://hub.docker.com
docker安装流程-官网:https://docs.docker.com/engine/install/

1.1、docker说明:

  1. Docker是基于Go语言实现的云开源项目
  2. docker是容器虚拟化技术,让每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响
  3. docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
  4. 在Docker镜像的最底层是引导文件系统bootfs
  5. rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了

1.2、docker镜像说明:

什么是镜像?

是一种轻量级、可执行的独立软件包
比如mysql镜像运行起来就变成了mysql容器

1.2.1、UnionFS(联合文件系统)

  1. Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统。
  2. 它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下
  3. Union 文件系统是 Docker 镜像的基础
  4. 镜像可以通过分层来进行继承-----重点

特性:

一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统
联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

好比画卷:
在这里插入图片描述
以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载
在这里插入图片描述

1.2.2、docker镜像分成的好处

镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用

说明:

  1. 比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;
  2. 同时内存中也只需加载一份 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 execdocker 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、导入和导出容器

  1. export 导出容器的内容留作为一个tar归档文件
  2. 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容器内的数据保存进宿主机的磁盘中,数据持久化

  1. 卷就是目录或文件
  2. 卷的设计目的就是数据的持久化,完全独立于容器的生存周期
  3. 因此Docker不会在容器删除时删除其挂载的数据卷
  4. 删除容器后,挂载的文件可以在重新运行起容器找回来

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、阿里云配置和上传流程

流程:

  1. 选择控制台,进入容器镜像服务
  2. 选择个人实例
  3. 创建命名空间
  4. 创建仓库名称
  5. 进入管理界面获得脚本
  6. 将镜像推送到阿里云

如图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

得到脚本
在这里插入图片描述

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
  1. commit 我们处理好的容器生成镜像文件
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
  1. 推送 (可以先去私服创建目录在推送)
# 将新镜像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性能优化(四

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suqinyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值