洞察了解什么是信创国产化,如何通过小程序技术推动数字化转型,满足行业合规与多样化需求。
850
2022-11-18
【学习笔记】Docker基础
基本概念
Docker是什么?
Docker是一种基于Golang开发的虚拟化技术,开发人员和系统管理员使用容器开发,部署和运行应用程序的平台。 使用Linux容器部署应用程序称为容器化。 容器不是新的概念,但它们用于轻松部署应用程序。
统一了开发与实施运维的系统环境,减轻实施与运维人员的负担。
Docker是轻量级的,可以与虚拟机做类比
对比项 | 虚拟机 | Docker |
---|---|---|
占用内存与硬盘大小 | 大 | 小 |
启动速度 | 慢 | 快 |
集成部署 | 难以集成 | 容易集成,自带隔离 |
下图左侧为docker与宿主机的关系,右侧为虚拟机与宿主机的关系
我们看到docker是运行在宿主机系统上的,共用了宿主机OS的内核,而虚拟机需要虚拟出完整的OS。一台机器可以运行成百上千个docker容器,而使用虚拟机只能开不到10台,这已经很说明问题了。
镜像(Image)
镜像是由Dockerfile + docker build 或 docker commit 等打包而成,相当于我们安装系统用的iso镜像文件
容器(Container)
容器是镜像运行后的实体,有独立的命名空间,相当于iso镜像安装好的操作系统,这个“系统” 可以开机、关机、重启、输出为“iso镜像文件”
这里是比喻,严格来说容器不是完整的操作系统,容器与当前宿主机共用内核,没有自己的内核
仓库(Registry)
Docker提供的仓库是用于存放其他人制作好的镜像的地方,使用者可以通过简单的操作获取这些镜像。本地可配置多个仓库(Repository)
优点
灵活好用易上手:上手简单,可以灵活地打包环境与工具轻量高效:容器利用并共享主机内核,占用硬件资源少,更高效。一致性运行环境:Docker镜像保证了除内核外的完整运行环境,确保了应用运行环境的一致性便携式:您可以在本地构建,部署到云,并在任何地方运行。即时堆叠服务:您可以垂直和即时堆叠服务。持续交付和部署:使用Dockerfile构建镜像,使用CI/CD工具进行自动测试与部署
初步安装与配置
安装与启动HelloWolrd
加快docker镜像拉取速度
由于默认docker仓库在国外,为了加快拉取速度,需要指定其为国内的,向 /etc/docker/daemon.json 中添加:
有的系统里没有daemon.json,新增即可。当然不止这一种mirror,类似linux的镜像站,ustc/163/aliyun/tuna等等,如有需要请自行搜索。
不使用sudo使用Docker设置
如果您想将Docker用作非root用户,您现在应该考虑将您的用户添加到“docker”组,例如:
sudo usermod -aG docker 要使用的用户名newgrp docker #更新用户组,立即生效
镜像操作
镜像创建
docker commit命令:由容器生成镜像,下文有写Dockerfile文件+docker build命令;等下篇吧从本地文件系统导入:OpenVZ的模板。这个还没有用过
Dockerfile是创建docker镜像的配置文件
镜像搜索
根据应用名查找镜像
sudo docker search 应用名[:tag] #不写:tag版本号,默认使用lastest最新版
列出镜像
列出所有-的镜像文件与信息
sudo docker images
拉取镜像
从Docker Hub仓库拉取别人打包好的docker镜像文件
sudo docker pull 镜像名[:tag]
tag相当于版本号,为可选参数,不写的话默认为lastest,即摘取最新版本的镜像
删除镜像
sudo docker rmi 镜像名 #删除一个镜像sudo docker rmi `sudo docker images -q` #删除所有未使用的镜像,已使用的镜像会报错但不会被删除
删除镜像时,如果这个镜像已经创建了容器,需要先删除容器,否则你将得到类似如下的错误hellxz@hz:/etc/docker$ sudo docker rmi tomcatError response from daemon: conflict: unable to remove repository reference "tomcat" (must force) - container adbf710bd7a0 is using its referenced image 894b39cf2fa1
容器操作
查看容器
sudo docker ps #查看当前运行中的容器sudo docker ps -a #查看所有的容器
创建与启动容器
sudo docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用可选操作OPTIONS部分参数:
-d : 启动守护线程后台启动-p :指定端口号,格式为宿主机端口:容器占用端口-P: 随机端口映射,容器内部端口随机映射到主机的高端口-i : 可交互,保持可输入状态-t : 分配一个虚拟tty终端--name : 为容器起名,例--name=myworld-v : 将容器里的目录挂载到宿主机目录,格式为宿主机目录绝对路径:容器内绝对路径-e : 添加容器内的环境变量
文件拷贝
用于宿主机文件与容器之间的
sudo docker cp 宿主机文件路径 容器名:容器内目录 #从宿主机到容器sudo docker cp 容器名:容器内目录/文件 宿主机文件路径 #从容器到宿主机
宿主机可用相对路径,容器内目录需要用绝对路径注意:此命令不支持容器之间文件的拷贝
文件挂载(目录映射)
sudo docker run -v 宿主机目录绝对路径:容器内绝对路径
这块提出来说是因为:如果挂载的目录是多级目录,在某些发行版(centos 7)访问挂载的多级目录会出现cannot open directory xxx:Permission denied,这是因为selinux的控制,如果碰到这个问题,除了关闭selinux外,还有就是在命令上加 --privileged=true,举例,sudo docker run -di -v /home/hz/elk:/usr/elk --privileged=true centos:7
访问后台运行的容器
sudo docker exec -it 容器名或容器id /bin/bash #访问后台执行的容器,开启一个终端
获取容器/镜像的元数据
sudo docker inspect [-f |-s |--type] 容器名|容器id|镜像名:tag
-f : 指定返回值的模板-s: 显示总的文件大小--type:指定返回数据类型,默认JSON
查看容器IP
sudo docker inspect 容器名或容器id #这个命令本身为获取容器/镜像的元数据,在NetworkSettings.IPAddress处展示#除了上边这种,还可以指定输出条件,直接输出ipsudo docker inspect -f "{{ .NetworkSettings.IPAddress}}" 容器id或容器名
这里主要是为了容器之间互联用,容器之间互联使用的是容器的ip
重启容器
sudo docker restart 容器名或容器id
关闭容器
sudo docker stop 容器名或容器id
启动未运行的容器
sudo docker start 容器名或容器id
重复执行已经启动的容器,会被docker忽略,不会启动新的容器,尽管显示就像是启动成功一样,哈哈
删除容器
sudo docker container rm 容器名或容器id #删除一个容器sudo docker rm -f $(docker ps -qa) #删除所有容器,无论是否处于启动中【谨慎操作】
删除容器前需要确认这个容器已经关闭状态,如果没有,请先执行sudo docker stop 容器名或容器id
容器与镜像的备份与恢复
容器保存为镜像
sudo docker commit 容器名或容器id 期望的镜像名 #创建镜像
镜像保存为压缩包
sudo docker save -o 保存名称.tar 镜像名 #其中扩展名和保存名称均可随意写
最后的保存名称使用的是相对路径,相对于宿主机当前路径,必要时可以指绝对路径+名称-o 表示的是输出文件
备份文件恢复为镜像
sudo docker load -i 备份镜像文件名或者sudo docker load < 备份镜像文件名
无需指定恢复的镜像名,这些信息已经记录在备份文件中了
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~