docker

一、docker官网

docker官网:https://docs.docker.com/engine/install/

1、Centos 7 能上外网
2、安装gcc相关环境

yum -y  install gcc
yum -y 	install gcc-c++

3、安装需要的软件包

yum 	-y	 install	 yum-utils

(1)官网源

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

(2)国内源

1) 阿里云
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2) 腾讯云
https://mirror.ccs.tencentyun.com
3) 华为云
https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com
4) docker中国
https://registry.docker-cn.com
5) 网易
http://hub-mirror.c.163.com

4、更新yum的软件包索引

yum makecache fast

失败原因:
以前可能安装过国内源、删除安装过的源

cd /etc/yum.repos.d
ll

5、安装docker ce

yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

6、启动docker

systemctl start docker

7、测试

docker run hello-world

8、docker 卸载

yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin 
docker-compose-plugin docker-ce-rootless-extras

rm -rf /var/lib/docker
rm -rf /var/lib/containerd

9、镜像加速配置
登录阿里云:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

https://elwjmxz5.mirror.aliyuncs.com
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://elwjmxz5.mirror.aliyuncs.com"]
}
EOF

重启配置文件重新加载
重启docker

systemctl daemon-reload
systemctl restart docker

二、命令

1、帮助启动类命令

systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker

开机自启动docker
systemctl enable docker
docker信息概要
docker info

2、镜像类命令

列出本地主机上的镜像
docker images [-a -q]
搜寻某个镜像是否在远程仓库
docker  search  [--limit  数字]  [镜像名]
下载镜像在远程仓库中
docker pull [镜像名]:tag
查看镜像容器数据卷的占用量
docker  system df
强制删除某个镜像
docker rmi  -f  [镜像名] 
删除全部的docker
docker rmi  -f $(docker images -qa)

虚悬镜像:镜像名和标签都为none的有大小

3、容器命令
(1)启动交互式容器(前台命令行)

docker  run  [options]  images
options
--name="新容器的名字"    为容器指定一个名称
-d:后天运行容器的并返回容器ID,也即启动守护式容器(后台执行)
-i:已交互式模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i使用;
   也即启动交互式容器的(前台有伪终端,等待交互)
-P:随机端口映射
-p:指定端口映射

(2)列出所有正在运行的容器

docker ps
options
-a:列出当前所有正在运行的容器+历史上运行过的
-i:显示最近新建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号

(3)退出容器

exit                run进去容器,exit退出,容器停止
ctrl + p + q        run进去容器,ctrl+p+q退出,容器不会停止

(4)启动已停止运行的容器

docker start 	容器ID 名字

(5)重启容器

docker restart  容器ID名字

(6)停止容器

docker stop  容器ID名字

(7)强制停止容器

docker kill   容器ID名字

(8)删除已停止的容器

docker  rm  容器ID名字
一次性删除多个容器
docker rmi  -f $(docker images -qa)
docker ps -q -a | xargs docker rm

4、重要命令
有镜像才能创建容器,Redis 6.0.8 镜像演示

启动守护式容器(后天服务器)
有些场景只需要docker服务是在后台进行,可以通过-d 指定容器的后台运行模式
docker run -d
docker机制:docker容器后台启动,就必须有个前台进程,容器运行的命令如果不是那些一直挂起的命令,就是会自动退出的。
           容器后台启动后,会立即自杀因为他觉得没事可做
           所有,最佳解决方案是将你要运行的程序以前台进程的形式运行
           常见的就是命令行模式,表示还有交互操作。 
docker run  -it   前台交互式命令
docker run  -d    后天交互式命令
查看容器日志
docker logs  容器名
查看容器内运行的进程
docker top   容器ID
查看容器内部细节
docker inspect 容器ID
进入正在运行的容器并以命令行交互
docker exec -it  容器ID 
docker attach   容器ID
区别:attach 直接进入容器启动命令终端,不会启动新的进程用exit退出,会导致容器停止
     exec 是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器停止
以redis为例:
         docker exec -it  容器ID  /bin/bash
         docker exec -it  容器ID  redis-cli
从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径  目的主机路径
导入导出容器
export:导出容器的内容流作为一个tar归档文件[对应import命令]
import:从tar包中的内容创建一个新的文件系统在导入为镜像[对应export]
案例:
	docker export 容器ID	 >  文件名.tar
	cat  文件名.tar | docker import        -镜像用户/镜像名:镜像版本号

三、Docker镜像

1、UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统。Union文件系统是docker镜像的基础。镜像可以通过分层来继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,最终的文件系统会包含所有的底层文件和目录。
2、Docker的镜像加载原理:
docker的镜像实际上是由一层一层的文件系统组成,这种层级的文件系统UniosFS。
bootfs(boot file system)主要包含bootloader和kernel,bootloader主要加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。这一层与我们的典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核都在内存中了,此时内存的使用权已bootfs转交给内核,此系统的也会卸载到bootfs。
rootfs(root file system)在bootfs之上。包含的就是典型的Linux系统的/dev,/prov,/bin,/etc等标准目录和文件。rootfs就是各种不同操作系统发行版,比如Ubuntu,Centos等等。
3、为什么要镜像的分层理念呢? 共享资源,加载简单,重复复用。
4、docker镜像commit操作实例

docker commit 提交容器副本使之成为一个新的镜像
docker commit -m = "提交的描述信息"  -a ="作者" 容器ID    要创建的目标镜像名:[标签名]
案例演示 Ubuntu 安装vim 命令
条件:
	1、从hub上下载Ubuntu的镜像到本地并成功运行
	2、原始默认的Ubuntu镜像是不带vim命令的
	3、外网连通连通的情况下,安装vim
	(1)更新包管理工具                 apt-get update
	(2)安装我们需要的vim              apt-get install vim
	4、安装完成后,commit我们自己的新镜像
	docker commit -m="添加vim命令"  -a="作者名"  容器ID  镜像名   
	5、启动我们的新镜像并和原来的对比

四、本地镜像发布到阿里云

1、本地镜像发布到阿里云流程
2、镜像的生成方法
(1)docker镜像制作
(2)dockerfile文件
3、将本地镜像推送到阿里云
(1)本地镜像素材原型
myubuntu:1.0
(2)阿里云镜像平台
https://cr.console.aliyun.com/cn-hangzhou/instances
(3)创建仓库镜像
https://cr.console.aliyun.com/repository/cn-hangzhou/lonten/myubuntu/details
①选择控制台,进入容器镜像服务
②选择个人实例
③命名空间
lonten
④仓库名称
myubuntu
⑤进入管理界面获得脚本

docker login --username=jason_puf registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lonten/myubuntu:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/lonten/myubuntu:[镜像版本号]
示例:
docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED          VIRTUAL SIZE
registry.aliyuncs.com/acs/agent   0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
(4)将镜像推送到阿里云
docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

4、将阿里云上的镜像下载到本地

docker pull registry.cn-hangzhou.aliyuncs.com/lonten/myubuntu:[镜像版本号]

5、将本地镜像发布到私有库流程
(1)下载镜像Docker Registry

docker pull registry
(2)运行私有库Registry,相当于本地有私有的Docker hub
docker run -d -p 5000:5000 -v /root/myregistry/:/tmp/registry   --privileged=true registry
默认情况下,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调
(3)案例演示创建一个新镜像,Ubuntu安装ifconfig命令
docker run -it ubnuntu /bin/bash
apt-get update
agt-get install net-tools

步骤三.4
(4)curl验证私有服库上有什么镜像

curl -XGET  http://192.168.110.129:5000/v2/_catalog

在这里插入图片描述
可以看到,目前私服库没有任何镜像上传过
(5)将新镜像myubuntu:1.0修改符合私服规范的Tag

docker tag 镜像Tag Host:Port/Registry:Tag
docker	tag  myubuntu:2.0 192.168.110.129:5000/myubuntu:2.0

自己host主机IP地址,填写
使用命令docket tag 将myubuntu:2.0这个镜像修改为192.168.110.129:5000/myubuntu:2.0
(6)修改配置文件使之支持http

cat  /etc/docker/daemon.json
vim  /etc/docker/daemon.json
"insecure-registries":["192.168.110.129"]

docker 默认不允许http方式推送镜像,通过配置选项来取消在这个限制。======》修改完不生效,建议重启docker
(7)push推送到私有服

docker push 容器名:标签
docker push 192.168.110.129:5000/myubuntu:2.0
systemctl restart docker
(8)curl验证私有库上有什么镜像2
curl  -XGET http://192.168.110.129:5000/v2/_catalog
(9)pull到本地并运行
docker pull 192.168.110.129:5000/myubuntu:2.0

五、Docker容器数据卷

1、坑:容器卷记得加入 -v 添加自定义卷
宿主机的路径 : 容器内的路径

--privileged=true

Docker 挂载主机目录访问如果出现cannot open directory.:Permission denied
解决方法:在挂载目录后多加一个–privileged = true 参数即可

如果是Centos 7 安全模块会比之前系统版本增强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为
在SELinux里面挂载的目录被禁止掉了,如果要开启,我们一般使用–Priviledged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即是使用该参数,container的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。

2、Docker 容器卷是什么
有点类似于redis的RDB和AOF文件,将Docker容器内的数据保存进宿主机的磁盘中运行一个带有容器卷存储功能的容器实例
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能绕过Union File System
提供一些用于持续存储或共享数据的特性。
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
3、

docker run -it --priviledged=true -v /宿主机绝对路径目录:/容器内目录    镜像名
  • 将运用与运行的环境打包镜像,run后形成容器实例运行,但是我们对数据的要求希望是持久化的
    Docker 容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然就没有了。
    为了能保存数据在docker中我们使用卷。

    特点:

    • 数据卷可在容器之间共享或重用数据
    • 卷中的更改可以直接实时共存,
    • 数据卷中的更改不会包含在镜像的更新中
    • 数据卷的生命周期一直持续到容器使用它为止
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值