前言

Docker是什么?

Docker是Go语言开发实现的容器。2013年发布至今,备受推崇。相关文档、学习资料十分详尽。近期有docker相关项目,得重新学习一下。博客以笔记

为什么要使用 Docker?

  • Docker 容器的启动在秒级
  • Docker 对系统资源利用率高,一台主机上可以同时运行数千个 Docker 容器。
  • Docker 基本不消耗系统资源,使得运行在 Docker 里面的应用的性能很高。

相比于传统的虚拟化技术,Docker 有哪些优势?

  • 更快速的支付和部署:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。
  • 更高效的虚拟化:Docker 容器的运行不需要额外的 Hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效。
  • 更轻松的迁移和扩展:Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。
  • 更简单的管理:使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

容器诞生背景及优势

(1)软件开发和运维中,环境部署、配置,不胜其烦。举例说明,Python开发和部署都必须配置Python解释器;运维过程中,有时测试环境能通过,但是到线上却报错,究其原因,是环境不一致。传统运维过程中,线上有十台机器,每增加一台都需要重新部署一次,简直就是“体力劳动”。(2)虚拟机在一定程度可以解决这些问题,但是存在几个缺点:- 资源占用多 虚机启动需要占用几百M的内存。- 冗余步骤多 系统级别的操作步骤,往往无法跳过,比如用户登录。- 启动慢,往往几分钟 启动操作系统需要多久,启动虚拟机就需要多久。

(3)容器优势容器不是模拟一个操作系统,而是对进程进行隔离。属于进程级别。- 启动快, 相当于启动本机底层系统的一个进程,而不是虚拟机内部的进程,速度快很多。- 占用资源少,容器只占用需要的资源,不占用那些没有用到的资源;多个容器可以共享资源,虚拟机是独享资源。- 体积小,容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。

传统虚拟化示意图:

传统虚拟化示意图

docker虚拟化示意图:

docker虚拟化示意图

Docker核心概念

docker镜像(Images):docker镜像是用于创建docker容器的模板;软件打包好的镜像,放在docker仓库中。镜像启动后的实例成为一个容器。

docker容器(Container):容器是独立运行的一个或一组应用

dokcer客户端(Client):客户端通过命令行或者其他工具使用DockerAPI与Docker的守护进程通信。连接docker主机进行操作

docker主机:一个物理或者虚拟的机器用于执行docker守护进程和容器。即安装了docker程序的机器(Docker直接安装在操作系统之上)

docker仓库(Registries):docker仓库用来保存镜像(保存打包好的软件镜像),可以理解为代码控制中的代码仓库。

dockerHub(https://hub.docker.com)提供了庞大的镜像集合供使用

使用Docker的步骤

1.安装Docker

2.去docker仓库 找到对应的软件镜像

3.使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;容器就代表当前正在运行的应用。

4.对容器的启动停止就是对软件的启动停止

安装docker

以CentOS为例:

Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。

(1)卸载旧版本

sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

(2)安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

(3)安装国内源

yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

(4)安装docker-ce

yum makecache fastyum install docker-ce  

也可以使用脚本自动安装:

curl -fsSL get.docker.com -o get-docker.shsh get-docker.sh --mirror Aliyun

(5)启动docker-ce

systemctl enable dockersystemctl start docker

示例:

(6)创建docker用户组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。

因此,更好的做法是将需要使用 docker 的用户加入 docker 用户组。

# 建立 docker 组:sudo groupadd docker# 将当前用户加入 docker 组:sudo usermod -aG docker $USER# 退出当前终端并重新登录,进行如下测试   

注意:本次使用的是root用户。

(7)测试docker是否安装成功

docker run hello-world  

如果出现如下信息表明安装成功了:

Unable to find image 'hello-world:latest' locallylatest: Pulling from library/hello-worldca4f61b1923c: Pull completeDigest: sha256:97ce6fa4b6cdc0790cda65fe7290b74cfebd9fa0c9b8c38e979330d547d22ce1Status: Downloaded newer image for hello-world:latest Hello from Docker!This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.    (amd64) 3. The Docker daemon created a new container from that image which runs the    executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it    to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/

(8)配置内核参数

默认配置下,如果在 CentOS 使用 Docker CE 看到下面的这些警告信息:

WARNING: bridge-nf-call-iptables is disabledWARNING: bridge-nf-call-ip6tables is disabled

添加内核配置参数以启用这些功能:

tee -a /etc/sysctl.conf <

重新加载内核配置

sysctl -p

Docker镜像操作常用命令

操作命令说明备注

检索 docker search 关键字

eg: docker search mysql

我们经常去docker hub 上检索镜像的详细信息 如镜像的TAG

拉取 docker pull 镜像名:tag:tag 是可选的,tag表示标签 多为软件的版本,默认是latest

列表 docker images 查看所有本地镜像

删除 docker rmi image-id 删除指定的本地镜像

上面命令需要在docker服务启动的情况下执行

操作命令详解

docker search mysql

对上面搜索结果的说明INDEX镜像的索引NAME镜像的名称DESCRIPTION对镜像的描述STARS有多少人关注了此镜像 单位是k 多少千人OFFICIAL表示镜像是否官方 OK表示官方的 AUTOMATED 表示是否自动配置 OK表示运行此镜像会自动配置

Docker容器操作常用命令

操作命令说明备注

运行docker run --name container -name -d image-name

eg: docker run --name mytomcat -d tomcat

--name:自定义容器名

-d:后台运行

image-name:指定镜像模板

如果镜像有标签 则镜像名称后面需要加上对应的标签

image-name:标签

注:目前这样的参数命令启动起来是外部是不能访问的,还需要添加端口映射

列表docker ps (查看运行中的容器)加上 -a 可以查看所有容器(包括停止的容器)

停止docker stop container-name/container-id停止当前你运行的容器

启动docker start container-name/container-id启动容器

删除docker rm container-id删除指定容器(删除的容器需要为停止状态)注意

rmi 是删除镜像的

rm 是删除容器的

端口映射-p 6378:6379

eg: docker run -d -p 6378:6379 --name myredis docker.io/redis

-p:主机端口(映射到)容器内部的端口

6378为服务器的端口

6379为容器的端口

真正的运行命令

镜像名称也可以只写docker.io后面的名称

容器日志docker logs container-name/container-id

更多命令https://docs.docker.com/engine/reference/commandline/docker/

注:docker容器启动时一定要 指定端口映射

如果启动命令如下图所示,通过IP+端口号 将访问失败

注意:此时使用ip:8080的方式访问tomcat是访问不成功的,因为目前ip:8080访问的是服务器的端口,访问不到容器里面,还差一步端口号的映射

一个镜像可以启动多个容器,且每个容器都是独立的,互不干扰

五、容器生命周期管理命令

1、docker run

docker run :创建一个新的容器并运行一个命令docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS说明:-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;-d: 后台运行容器,并返回容器ID;-i: 以交互模式运行容器,通常与 -t 同时使用;-p: 端口映射,格式为:主机(宿主)端口:容器端口-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;--name="nginx-lb": 为容器指定一个名称;--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;-h "mars": 指定容器的hostname;-e username="ritchie": 设置环境变量;--env-file=[]: 从指定文件读入环境变量;--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;-m :设置容器使用内存最大值;--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;--link=[]: 添加链接到另一个容器;--expose=[]: 开放一个端口或一组端口;

docker run --name mynginx -d nginx:latest使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginxdocker run -P -d nginx:latest使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口docker run -p 80:80 -v /data:/data -d nginx:latest使用镜像 nginx:latest,以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data。docker run -p 127.0.0.1:80:8080/tcp ubuntu bash绑定容器的8080端口,并将其映射到本地主机127.0.0.1的80端口上。docker run -it nginx:latest /bin/bash使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

2、docker start

docker start :启动一个或多少已经被停止的容器docker start [OPTIONS] CONTAINER [CONTAINER...]docker start myapp启动已被停止的容器myapp

3、docker stop

docker stop :停止一个运行中的容器docker stop [OPTIONS] CONTAINER [CONTAINER...]docker stop myapp停止运行中的容器myapp

4、docker restart

docker restart :重启容器docker restart [OPTIONS] CONTAINER [CONTAINER...]docker restart myapp重启容器myapp

5、docker kill

docker kill :杀掉一个运行中的容器。docker kill [OPTIONS] CONTAINER [CONTAINER...]OPTIONS说明:-s :向容器发送一个信号

docker kill -s KILL mynginx杀掉运行中的容器mynginx

6、docker rm

docker rm :删除一个或多个容器docker rm [OPTIONS] CONTAINER [CONTAINER...]OPTIONS说明:-f :通过SIGKILL信号强制删除一个运行中的容器-l :移除容器间的网络连接,而非容器本身-v :-v 删除与容器关联的卷

docker rm -f db01 db02强制删除容器db01、db02docker rm -l db移除容器nginx01对容器db01的连接,连接名dbdocker rm -v nginx01删除容器nginx01,并删除容器挂载的数据卷

7、docker pause

docker pause :暂停容器中所有的进程。docker pause [OPTIONS] CONTAINER [CONTAINER...]docker pause db01暂停数据库容器db01提供服务。

8、docker unpause

docker unpause :恢复容器中所有的进程docker unpause [OPTIONS] CONTAINER [CONTAINER...]docker unpause db01恢复数据库容器db01提供服务。

9、docker create

docker create :创建一个新的容器但不启动它docker create [OPTIONS] IMAGE [COMMAND] [ARG...]docker create --name myapp nginx:latest使用docker镜像nginx:latest创建一个容器,并将容器命名为myapp

10、docker exec

docker exec :在运行的容器中执行命令docker exec [OPTIONS] CONTAINER COMMAND [ARG...]OPTIONS说明:-d :分离模式: 在后台运行-i :即使没有附加也保持STDIN 打开-t :分配一个伪终端

docker exec -it mynginx /bin/sh /root/runoob.sh在容器mynginx中以交互模式执行容器内/root/runoob.sh脚本docker exec -it mynginx /bin/bash在容器mynginx中开启一个交互模式的终端

Docker Hub服务相关命令

1、docker login

docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库Docker Hub。docker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub。

docker login [OPTIONS] [SERVER]docker logout [OPTIONS] [SERVER]

OPTIONS说明:-u :登陆的用户名-p :登陆的密码登陆到Docker Hubdocker login -u 用户名 -p 密码

2、docker logout

登出Docker Hubdocker logout

3、docker pull

docker pull : 从镜像仓库中拉取或者更新指定镜像docker pull [OPTIONS] NAME[:TAG|@DIGEST]OPTIONS说明:-a :拉取所有 tagged 镜像--disable-content-trust :忽略镜像的校验,默认开启从Docker Hub下载java最新版镜像。docker pull java从Docker Hub下载REPOSITORY为java的所有镜像。docker pull -a java

4、docker push

docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库docker push [OPTIONS] NAME[:TAG]OPTIONS说明:--disable-content-trust :忽略镜像的校验,默认开启

上传本地镜像myapache:v1到镜像仓库中。docker push myapache:v1

5、docker search

docker search : 从Docker Hub查找镜像docker search [OPTIONS] TERMOPTIONS说明:--automated :只列出 automated build类型的镜像;--no-trunc :显示完整的镜像描述;-s :列出收藏数不小于指定值的镜像。

从Docker Hub查找所有镜像名包含java,并且收藏数大于10的镜像docker search -s 10 java

容器rootfs操作命令

1、docker commit

docker commit :从容器创建一个新的镜像。docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]OPTIONS说明:-a :提交的镜像作者;-c :使用Dockerfile指令来创建镜像;-m :提交时的说明文字;-p :在commit时,将容器暂停。将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。docker commit -a "scorpio.com" -m "my apache" a404c6c174a2 mymysql:v1

2、docker cp

docker cp :用于容器与主机之间的数据拷贝。

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

OPTIONS说明:-L :保持源目标中的链接

将主机/www/docker目录拷贝到容器96f7f14e99ab的/www目录下。docker cp /www/docker 96f7f14e99ab:/www/将主机/www/docker目录拷贝到容器96f7f14e99ab中,目录重命名为www。docker cp /www/docker 96f7f14e99ab:/www将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。docker cp 96f7f14e99ab:/www /tmp/

3、docker diff

docker diff : 检查容器里文件结构的更改docker diff [OPTIONS] CONTAINER查看容器mymysql的文件结构更改。docker diff mymysql

总结

本文介绍了Docker是什么、Docker思想、Docker核心概念、Docker安装等内容,看完本文,Docker算是入门了,但是万里长征只走完了第一步,学无止境,共勉。

docker 删除包含关键字的镜像_30分钟带你轻松掌握Docker原理相关推荐

  1. docker 删除包含关键字的镜像_Docker 架构及工作原理

    通过下图可以得知,Docker 在运行时分为 Docker 引擎(服务端守护进程) 和 客户端工具,我们日常使用各种 docker 命令,其实就是在使用 客户端工具 与 Docker 引擎 进行交互. ...

  2. docker删除无用容器、镜像

    docker 删除已停止的容器 根据容器的状态,删除Exited状态的容器 sudo docker rm $(sudo docker ps -qf status=exited) 删除所有未运行的容器( ...

  3. 【Docker】Docker 删除所有容器和镜像

    1.删除所有容器 docker rm `docker ps -a -q` 停用并删除容器: docker stop $(docker ps -q) & docker rm $(docker p ...

  4. docker删除所有容器和镜像

    docker删除所有镜像: docker rmi -f $(docker images -qa) docker删除所有容器: 停止容器 docker stop $(sudo docker ps -a ...

  5. 【全干货】5分钟带你看懂 Docker!

    作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付.自动部署,并且实现开发环境.测试环境.运维环境三方环境的 ...

  6. 【 全干货 】5 分钟带你看懂 Docker !

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付 ...

  7. 【 全干货 】5 分钟带你看懂 Docker ! 1

    作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付.自动部署,并且实现开发环境.测试环境.运维环境三方环境的 ...

  8. 这就是你日日夜夜想要的docker!!!---------三分钟带你玩转docker命令

    文章目录 docker version 查看版本信息 docker inspect 查看镜像全部信息 docker search 搜索镜像 docker pull 下载镜像 docker images ...

  9. docker 删除所有容器和镜像的命令

    1.杀死运行的容器: # docker kill $(docker ps -a -q) 2.删除所有容器: # docker rm $(docker ps -a -q) 3.强制删除所有镜像: # d ...

最新文章

  1. 富数据控件 GridView(定义列、格式化、样式)
  2. html em vw,CSS3 的视口单位vw、vh实现自适应(带有px,em,rem的简单介绍)
  3. 学校计算机协会招新策划案,本部 | 计算机协会招新中
  4. 海量数据挖掘MMDS week2: 频繁项集挖掘 Apriori算法的改进:基于hash的方法
  5. Atitit 软件设计中的各种图纸 uml 之道 1. 常见设计成果与图纸 2 1.1. 总图 2 1.2. ui原型图与html 2 1.3. 业务逻辑 伪代码 各种uml图 2 1.4. 总体
  6. xshell4连接ubuntu20.04失败,提示“找不到匹配的key exchange算法“
  7. Libpng源码的使用
  8. CIS基线合集-常用版本操作系统、数据库及中间件
  9. 【专业课程】网络协议分析与安全
  10. 蚂蚁金服 Java开发专家 一面在线编程题
  11. Out of range value for column
  12. 校验日期+时间部分的常用方法
  13. 关机整蛊小程序(c语言实现)
  14. 【数据说第十二期】如何在留存数据中,找到业务的提升点?
  15. JSP+MYSQL+SSH医疗器械管理系统租赁
  16. 计算机应用基础试题及参考答案
  17. Pico四通道汽车诊断示波器柴油车套装(型号:PQ179)
  18. 对话平安科技CTO方国伟:平安云差异化在哪?
  19. Asp.NetMVC利用LigerUI搭建一个简单的后台管理详解(含登录验证)
  20. java事务中使用try catch 导致事务不回滚的问题

热门文章

  1. IPv4地址和IPv6地址的比较,IPv6地址及其表示
  2. Springboot中@ComponentScan 注解
  3. Java番外篇3——线程池
  4. axios vue 动态date_Web前端Vue系列之-Vue.js 实战
  5. linux时间跳变影响,MONGO 集群 修改linux主机时间后的影响
  6. javamail发送html正文文件_Python实现-生成测试报告amp;自动邮件发送
  7. 继上一篇博客--javaweb通过接口来实现多个文件压缩和下载(包括单文件下载,多文件批量下载)
  8. java 多态判断非空_Java 多态
  9. 某系统有6台输出设备 有多个进程均需要使用2台_系统设计硬核知识(4)——操作系统的设备管理...
  10. Windows底层窗口的实现———学习笔记