Docker基础知识

Stella981
• 阅读 558

Docker基础知识

Docker基础知识

Docker

Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。

Docker利用Linux核心中的资源分脱机制,例如cgroups,以及Linux核心名字空间(name space),来创建独立的软件容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机造成的额外负担。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施。

Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。

Docker安装

 1.  `## 下载docker源`

 
 
 2.  `curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo`

 
 
 

 
 
 4.  `## 安装docker服务`

 
 
 5.  `yum install -y docker-ce`

 
 
 

 
 
 7.  `## 启动docker服务`

 
 
 8.  `systemctl start docker`

Docker镜像管理

 1.  `## 下载docker镜像`

 
 
 2.  `docker pull centos // 从官方下载centos镜像,速度很慢`
安装/升级你的Docker客户端
  • 推荐安装 1.10.0以上版本的Docker客户端,参考文档 docker-ce
如何配置镜像加速器
  • 针对Docker客户端版本大于1.10.0的用户

通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

 1.  `sudo mkdir -p /etc/docker`

 
 
 2.  `sudo tee /etc/docker/daemon.json <<- 'EOF'`

 
 
 3.  `{`

 
 
 4.   `"registry-mirrors":["https://sqvb9629.mirror.aliyuncs.com"]`

 
 
 5.  `}`

 
 
 6.  `EOF`

 
 
 7.  `sudo systemctl daemon-reload // 重启daomon`

 
 
 8.  `sudo systemctl restart docker // 配置后,重启docker服务`

每次重启docker服务时,都会停止当前所有正在运行中的容器

创建镜像

通过容器创建镜像

 1.  `## 1. 准备一个现有镜像`

 
 
 2.  `docker tag centos centos:liubao`

 
 
 

 
 
 4.  `## 2. 启动容器`

 
 
 5.  `docker run -itd centos:liubao`

 
 
 

 
 
 7.  `## 3. 进入容器`

 
 
 8.  `docker exec -it [容器ID] bash // 针对这个容器进行创建新的镜像`

 
 
 9.  `yum install net-tools -y`

 
 
 

 
 
 11.  `## 4. 通过容器创建镜像`

 
 
 12.  `docker commit -m "[改动信息]" -a "[指定做着相关信息]" [容器id] [新镜像名称]`

 
 
 13.  `docker commit -m "install net-tools" -a "liubaolong" 1640295ec284 centos_with_nettools`

通过容器创建镜像时,必须在针对 运行中的容器安装相应信息才能使 commit命令所创建的容器生效相应服务

通过模板创建****镜像

 1.  `## 1. 下载一个模板镜像`

 
 
 2.  `wget http://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz`

 
 
 

 
 
 4.  `## 2. 导入该模板镜像【命名为centos6】`

 
 
 5.  `cat centos-6-x86-minimal.tar.gz |docker import - centos6`

 
 
 

 
 
 7.  `## 3. 把现有镜像,导出为一个文件`

 
 
 8.  `docker save -o centos_with_nettool.tar centos_with_nettool`

 
 
 

 
 
 10.  `## 4. 用导出的文件恢复本地镜像`

 
 
 11.  `[root@localhost ~]$ ll centos_with_nettool.tar` 

 
 
 12.  `-rw-------. 1 root root 307501568 Mar 19 00:42 centos_with_nettool.tar`

 
 
 

 
 
 14.  `docker load < centos_with_nettool.tar // 恢复本地镜像`

容器管理

 1.  `docker create -it [image_name] bash ## 创建容器,但该容器并没有启动`

 
 
 2.  `docker start [容器id] ## 启动容器,可通过 docker ps 命令查看运行状态;`

 
 
 3.  `docker stop [容器id] ## 停止容器`

 
 
 4.  `docker restart [容器id] ## 重启容器`

 
 
 

 
 
 6.  `docker run -itd [image_name] bash ## 创建并启动容器`

 
 
 7.  `// -i 参数: 让容器标准输入打开`

 
 
 8.  `// -t 参数: 分配一个伪终端`

 
 
 9.  `// -d 参数: 后台启动`

 
 
 

 
 
 11.  `docker run --name [容器名字] -itd [image_name] ## 给容器自定义名称`

 
 
 12.  `docker run --rm -it centos bash -c "sleep 30" ## 通过--rm可让容器退出后直接删除`

 
 
 

 
 
 14.  `docker logs [容器id] ##  获取容器的运行历史信息`

 
 
 15.  `docker attach [容器id] ##  进入一个后台运行的容器【该命令不好用】`

 
 
 16.  `docker exec -it [容器id] bash ##  临时打开一个虚拟终端,并exit退出后容器依然运行`

 
 
 17.  `docker rm [容器id] ## 删除一个容器,-f参数表示为强制删除运行中的容器`

 
 
 

 
 
 19.  `docker export [容器id] > file.tar ##  导出容器,可以迁移到其它机器上面;`

 
 
 20.  `cat file.tar | docker import - [new_image_name] ## 导入容器,`

 
 
 

 
 
 22.  `#### import 和 load 命令区别`

 
 
 23.  `import命令:加载容器导出的归档文件,导入容器归档文件时并不会维护文件系统历史;`

 
 
 24.  `load命令: 加载镜像归档文件,导入image归档文件是会维护历史记录;`

 
 
 

 
 
 26.  `#### export 和 save 命令区别`

 
 
 27.  `export命令: 导出容器的命令,导出的归档文件不包含文件系统的历史记录,只有最近一次的读写层数据;【docker不建议移植容器,但预留了export命令来导出容器】`

 
 
 28.  `save命令: export命令只能一次导出一个容器的文件系统,而save命令可以同时导出多个镜像文件系统;且多个镜像互无关系,同一个镜像的不同tag`

docker仓库管理

 1.  `docker pull registry ##  下载registry镜像,该镜像为docker官方提供的可用阿里创建私有仓库`

 
 
 

 
 
 3.  `docker run -d -p 5000:5000 registry ## 创建启动registry容器【私有仓库】`

 
 
 4.  `## -p 参数: 将容器的端口映射到宿主机上 [宿主机监听端口]:[容器监听端口]`

 
 
 

 
 
 6.  `curl 127.0.0.1:5000/v2/_catalog ##   访问私有仓库`

 
 
 7.  `docker tag [image_name] [宿主机IP地址:端口]/[tag_name] ## 打标签【上传镜像到仓库前】`

 
 
 

 
 
 9.  `$ cat /etc/docker/daemon.json`

 
 
 10.  `{"insecure-registries":["宿主机ip:5000"]} ## 更改配置文件,并重启docker`

 
 
 

 
 
 12.  `systemctl restart docker` 

 
 
 

 
 
 14.  `## 上传镜像到仓库`

 
 
 15.  `docker push [宿主机IP]:5000/[标签名称]`

 
 
 

 
 
 17.  `## 下载私有仓库中的镜像`

 
 
 

 
 
 19.  `docker pull 10.0.55.134:5000/ubuntu-1`

docker小结

docker 常用命令

命令

方法[示例]

说明

docker images

docker images

查看当前所有镜像

docker search

docker search [关键字]

搜索镜像,其中[]内为搜索对象

docker pull

docker pull image_name

下载一个镜像

docker push

docker push image_name

上传一个镜像

docker tag

docker tag centos centos:liubao

给镜像centos 打标签为一个新的镜像

docker run

docker run -itd --name lbl centos

创建并允许一个单独的容器

docker ps

docker ps / docker ps -a

查看当前容器运行状态

docker rmi

docker rmi [image_name]

删除一个镜像

docker exec

docker exec -it [容器id] bash

进入运行中的容器

docker rm -f

docker rm -f [容器id]

强制删除运行中的容器

docker save

docker save -o save-centos.tar centos

把现有镜像导出为文件

docker load

docker load < save-centos.tar

用该文件恢复本地镜像

docker create

docker create -it [image_name] bash

创建一个容器,但该容器并没有启动

docker start

docker start [容器id]

启动容器,其它相关命令有:start、stop、restart

END

Docker基础知识

Docker基础知识

Docker基础知识

Docker基础知识

本文分享自微信公众号 - 杰哥的IT之旅(Jake_Internet)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这