docker命令

什么是Docker:
Docker是一种开源的容器化平台,用于开发、部署和运行应用程序。它利用容器技术,将应用程序及其所有依赖项打包到一个标准化单元中,称为容器。这使得应用程序可以在几乎任何环境中轻松部署和运行,而无需担心环境差异或依赖问题。

Docker的作用:

  • 应用程序隔离:Docker容器提供了应用程序级别的隔离,使得不同应用程序可以在同一主机上独立运行,互不干扰。
  • 跨平台部署:Docker容器可以在任何支持Docker的平台上运行,无论是开发、测试还是生产环境。
  • 快速部署:由于容器化的特性,Docker可以快速部署应用程序,减少部署时间和复杂性。
  • 资源利用率:Docker容器共享主机的操作系统内核,因此比传统虚拟化方式更轻量级,资源利用率更高。

Docker的优势:

  • 轻量级:Docker容器与虚拟机相比更轻量级,启动更快,占用更少资源。
  • 便携性:Docker容器可以在不同环境中以相同的方式运行,提高了应用程序的便携性。
  • 灵活性:Docker提供了丰富的工具和功能,使得容器的管理、部署和扩展更加灵活和便捷。
  • 高效性:Docker的镜像和容器机制使得应用程序的构建、发布和更新更加高效。

Docker的历史:

  • Docker最初由Docker公司(前身为Dotcloud)的创始人Solomon Hykes在2013年发布。它基于Linux容器技术(LXC)和AUFS文件系统,并提供了易用的工具和接口,使得容器的使用变得更加简单和便捷。
  • Docker很快获得了广泛的关注和采用,成为当时最流行的容器化解决方案之一。
  • 后来,Docker开源了其核心技术,形成了Docker开源项目,并成立了Docker社区,吸引了众多开发者和公司的参与和贡献。
  • Docker技术的发展推动了容器化技术的普及和发展,也催生了一系列相关的生态系统和工具,如Docker Compose、Docker Swarm等。
  1. Docker镜像(Docker Images)

    • Docker镜像是用于创建Docker容器的模板。它包含应用程序及其所有运行时环境所需的文件、库和依赖项。镜像可以通过Dockerfile定义,也可以从Docker Hub等镜像仓库中获取。
  2. Docker容器(Docker Containers)

    • Docker容器是由Docker镜像创建的运行实例。每个容器都是一个独立的、轻量级的运行环境,具有自己的文件系统、网络和进程空间。容器可以快速启动、停止、删除和迁移。
  3. Docker仓库(Docker Registry)

    • Docker仓库是用于存储和分享Docker镜像的地方。最常见的是Docker Hub,其中包含了大量的公共镜像供开发者使用。除了Docker Hub,还可以搭建私有的Docker仓库来管理自己的镜像。
  4. Docker网络(Docker Networking)

    • Docker提供了各种网络模式,使得容器之间可以进行通信,也可以连接到外部网络。通过Docker网络,可以实现容器之间的隔离、通信和联网。
  5. Docker数据管理(Docker Volumes)

    • Docker Volumes用于持久化容器中的数据,使得数据在容器销毁后仍然存在。通过挂载数据卷,可以实现数据的持久化存储和共享。
  6. Docker Compose

    • Docker Compose是用于定义和运行多个Docker容器的工具。通过一个单独的YAML文件,可以定义多个服务、网络和数据卷,并一键启动整个应用程序。
  7. Docker Swarm

    • Docker Swarm是Docker官方提供的集群管理工具,用于管理多个Docker主机上的容器。它可以实现容器的自动部署、扩展和负载均衡,提高了容器化应用程序的可靠性和可扩展性。
  1. Docker安全性(Docker Security)

    • Docker提供了一系列安全功能,如命名空间隔离、控制组隔离、容器加密等,以确保容器的安全性。此外,还可以使用Docker安全扫描工具来检查镜像中的漏洞和安全性问题。
  2. Docker日志管理(Docker Logging)

    • Docker提供了日志驱动程序,可以将容器的日志输出到标准输出、文件、syslog等位置。通过良好的日志管理,可以更好地监控和分析容器的运行状态。
  3. Docker插件(Docker Plugins)

    • Docker支持插件机制,允许用户扩展Docker功能。可以使用各种插件来增强Docker的能力,如存储插件、网络插件、日志插件等。
  4. Docker容器编排(Container Orchestration)

    • 除了Docker Swarm外,还有其他容器编排工具如Kubernetes、Docker Compose等,用于管理和调度大规模容器集群。这些工具可以实现自动化部署、伸缩、负载均衡等功能。
  5. Docker监控(Docker Monitoring)

    • 通过监控Docker容器的资源利用率、性能指标、日志等信息,可以及时发现和解决问题,确保容器化应用程序的稳定性和可靠性。
  6. Docker与持续集成/持续部署(CI/CD)

    • Docker与CI/CD工具的集成可以实现自动化构建、测试和部署,加速软件开发和交付过程。通过Docker容器,可以实现环境一致性和快速部署。
  7. Docker与微服务架构(Microservices)

    • Docker容器与微服务架构相互结合,可以实现应用程序的模块化、弹性扩展和快速部署,促进软件开发的敏捷性和灵活性。

这些方面涉及了Docker在安全性、日志管理、插件扩展、容器编排、监控、持续集成部署以及与微服务架构的结合等

PRD/PROD production 产品、生产、

企业运行环境

1.Dev环境:开发环境,外部人员无法访问,开发人员使用,版本变动很大。

2.Test环境:测试环境,外部用户无法访问,专门给测试人员使用的,版本相对稳定。

3.Pre环境:灰度环境,外部用户可以访问,但是服务器配置相对低,其他和生产一样。

4.Pro环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式版本

云原生(CNCF)四要素:微服务+DevOps+持续交付+容器化

云计算:

公有云:阿里云、腾讯云

私有云:openstack+KVM

混合云:共+私

云计算三种产品:基础设施即服务(laas)、平台即服务(paas)、软件即服务(saas)

docker容器与传统虚拟机对比区别:

容器

虚拟机

启动时间

秒级别

分钟级

资源损耗

几乎无损

至少损耗50%左右(系统占用)

硬盘空间

MB级别

GB级别

系统支持

上千个

几十个

隔离性

有资源限制

完全隔离

性能

接近原生

弱于原生

Docker特点:

快速交互和部署

更高效的虚拟化

更轻松的迁移和扩展

简单的管理

秒级启动

进程级别的隔离

可以启动成百上千个

docker三大核心

镜像 image

基础 只读 方便迁移

容器 continer

从镜像创建 运行的 可写的

仓库 repository

registry 注册地:ducker hub

repository 仓库 :nginx举例,多个镜像:官方的、个人的;版本靠标签区分

存放镜像

分类:

共有仓库 docker hub(默认)

私有仓库 自己搭建

docker基本命令

镜像操作

🦐info 查看详细信息(不常用) 🦐veresion 查看版本 🦐search 镜像名 查看仓库中的镜像 🦐pull 镜像名[:标签] 拉取镜像 若不写标签,表示最新latest(尽量指定版本) 所有参数:docker pull 域名或IP:端口号/账号名或项目名/镜像名:标签 域名或IP 省略 默认hub.docker.com 端口 省略 默认80 账号名或项目名省略 表示官方 标签 省略 表示latest 🦐images 查看镜像 🦐inspect 获取详细信息 docker inspect 镜像或容器名或id号(id号可以加前边几位就行) 🦐tag 为镜像添加新的标签(只是改了个名,镜像id号不变) docker tag 镜像名[:标签] 新镜像名[:新标签] 🦐rmi 删除镜像(若此镜像已经运行了容器,则无法删除,可以加-f强制删除) docker rmi 镜像名[:标签] docker rmi 镜像id -f 强制删除 🦐save 导出镜像 docker save 镜像名 >本地文件名 🦐load 载入镜像 docker load < 路径/本地文件名 🦐push 上传镜像 docker push 域名或IP:端口号/账号名或项目名/镜像名:标签 docker push 镜像名:标签 域名或IP 省略 默认hub.docker.com 端口 省略 默认80 账号名或项目名省略 表示官方 标签 省略 表示latest 🦐login 登录 docker login [地址] 登录 默认登录到hub.docker.com 🦐history 查看镜像层级 docker history 镜像名或id

🦐pull 拉取镜像

docker pull 镜像名

所有参数:docker pull 域名或IP:端口号/名称/镜像名:标签

【域名或IP:端口号 如果省略,表示hub.docker.com】

【名称省略,表示官方】

【标签省略,表示最新】

拉取busybox镜像

busybox镜像 称为linux的瑞士军刀,封装了linux常用命令

[root@client ~] # docker pull busybox Using default tag: latest latest: Pulling from library/busybox 50783e0dfb64: Pull complete ##只有一层 Digest: sha256:ef320ff10026a50cf5f0213d35537ce0041ac1d96e9b7800bafd8bc9eff6c693 Status: Downloaded newer image for busybox:latest docker.io/library/busybox:latest 查看镜像 [root@client ~] # docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 7a80323521cc 2 weeks ago 1.24MB REPOSITORY:镜像名 TAG:标签名 IMAGE ID:镜像id CREATED:镜像构建时间 SIZE:大小

🦐images 查看镜像

[root@client ~] # docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 7a80323521cc 2 weeks ago 1.24MB REPOSITORY:镜像名 TAG:标签名 IMAGE ID:镜像id CREATED:构建时间 SIZE:大小

🦐inspect 详细信息

docker inspect 镜像名或id号(id号可以加前边几位就行)

查看busybox镜像详细信息 [root@client ~] # docker inspect busybox [ { "Id": "sha256:7a80323521ccd4c2b4b423fa6e38e5cea156600f40cd855e464cc52a321a24dd", "RepoTags": [ "busybox:latest" ], "RepoDigests": [ "busybox@sha256:ef320ff10026a50cf5f0213d35537ce0041ac1d96e9b7800bafd8bc9eff6c693" ], "Parent": "", "Comment": "", "Created": "2022-07-29T20:26:22.673054623Z", "Container": "fdc0fb1ac5a15ce9a0984262d3f42e8789b70424e508ccc63c7fbee3038b9ad6", "ContainerConfig": { "Hostname": "fdc0fb1ac5a1", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh", "-c", "#(nop) ", "CMD [\"sh\"]" ], "Image": "sha256:5e05bdcc415663af6650ce9dbb471a0063048e6c40a5e018f33c8b4a248775d3", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": {} }, "DockerVersion": "20.10.12", "Author": "", "Config": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "sh" ], "Image": "sha256:5e05bdcc415663af6650ce9dbb471a0063048e6c40a5e018f33c8b4a248775d3", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": null }, "Architecture": "amd64", "Os": "linux", "Size": 1243868, "VirtualSize": 1243868, "GraphDriver": { "Data": { "MergedDir": "/var/lib/docker/overlay2/a503ccf949eedfcc6674e390c46c36a0308d5f49a9db2b7eed0fb44d5cb25e5b/merged", "UpperDir": "/var/lib/docker/overlay2/a503ccf949eedfcc6674e390c46c36a0308d5f49a9db2b7eed0fb44d5cb25e5b/diff", "WorkDir": "/var/lib/docker/overlay2/a503ccf949eedfcc6674e390c46c36a0308d5f49a9db2b7eed0fb44d5cb25e5b/work" }, "Name": "overlay2" }, "RootFS": { "Type": "layers", "Layers": [ "sha256:084326605ab6715ca698453e530e4d0319d4e402b468894a06affef944b4ef04" ] }, "Metadata": { "LastTagTime": "0001-01-01T00:00:00Z" } } ]

🦐tag 为镜像添加新的标签

(只是改了个名,镜像id号不变)

docker tag 镜像名[:标签] 新镜像名[:新标签]

注意!!!若要往docker hub上传镜像,那么标签应该这样写:在docker hub上建立了一个叫做busybox的库,我的用户名叫876456882,那么打标签的时候的全名就应该是876456882/busybox:标签 否则就会上传失败

###将busybox镜像改个名字和标签 [root@client ~] # docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 7a80323521cc 2 weeks ago 1.24MB [root@client ~] # docker tag busybox:latest busybox_tag:lyf [root@client ~] # docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 7a80323521cc 2 weeks ago 1.24MB ###注意看image id号 busybox_tag lyf 7a80323521cc 2 weeks ago 1.24MB

🦐rmi 删除镜像

(若此镜像已经运行了容器,则无法删除,可以加-f强制删除)

docker rmi 镜像名[:标签]

docker rmi 镜像id

-f 强制删除

将busybox_tag:lyf删除,由于两个镜像的id相同,所以不能删id,如果删了id,那么两个镜像都会消失

将busybox_tag:lyf删除,由于两个镜像的id相同,所以不能删id,如果删了id,那么两个镜像都会消失 [root@client ~] # docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 7a80323521cc 2 weeks ago 1.24MB busybox_tag lyf 7a80323521cc 2 weeks ago 1.24MB [root@client ~] # docker rmi busybox_tag:lyf Untagged: busybox_tag:lyf [root@client ~] # docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 7a80323521cc 2 weeks ago 1.24MB

🦐save 导出镜像

docker save 镜像名 > 路径/本地文件名

[root@client ~] # docker save nginx:latest > nginx.tgz

🦐load 载入镜像

docker load < 路径/本地文件名

[root@client ~] # docker load < nginx.tgz 92a4e8a3140f: Loading layer 83.87MB/83.87MB e3257a399753: Loading layer 62.04MB/62.04MB 3a89c8160a43: Loading layer 3.072kB/3.072kB f91d0987b144: Loading layer 4.096kB/4.096kB bdc7a32279cc: Loading layer 3.584kB/3.584kB b539cf60d7bb: Loading layer 7.168kB/7.168kB Loaded image: nginx:latest

🦐push 上传镜像

docker push 域名或IP:端口号/名称/镜像名:标签

注意,打标签时候需要在标签前加上自己docker hub用户名

例如,在docker hub上建立了一个叫做busybox的库,我的用户名叫876456882,那么打标签的时候的全名就应该是876456882/busybox:标签 否则就会上传失败

上传一个镜像(bsybox)到docker hub 先给busybox打一个标签 [root@client ~] # docker tag busybox:latest 876456882/yunbusybox:v8.16 [root@client ~] # docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest b692a91e4e15 2 weeks ago 142MB busybox latest 7a80323521cc 2 weeks ago 1.24MB yunbusybox v8.16 7a80323521cc 2 weeks ago 1.24MB 登录docker hub [root@client ~] # docker login 上传

🦐login 登录

docker login [地址] 登录 默认登录到hub.docker.com

logout登出

[root@client ~] # docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: 876456882 Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded 这样是登录成功

容器操作

运行容器的命令执行后容器就停止

命令持续执行容器就不停止

系统启动流程

开机自检

MRB引导

GRUB菜单

加载内核

init初始化

查看运行级别

系统初始化

并行运行各个服务

登录界面

主机名即是容器id(前12位)

/etc/hosts文件中有 容器本地IP地址和主机名的映射关系

hostname -I 查看ip地址(大i)

🦐create 创建容器 【创建容器,但不启动】 docker create [选项] 镜像名[:标签] 命令 参数 创建 docker start 镜像名或id 启动容器 选项: -i input 输入保持打开 -t tty 伪终端 -d deamo 守护进程 后台 🦐run 创建并启动容器 运行过程: 检查是否有镜像 有 直接使用 无 自动从docker hub下载 创建并启动一个容器 分配文件系统给容器 数据目录:/var/lib/docker 只读的镜像层上面加上一个可读写层(容器层) 宿主机网桥接一个接口到容器 分配IP地址 执行用户指定的程序 执行完毕后容器会终止 docker run [选项] 镜像名[:标签] 命令 参数 docker run -d centos /bin/bash -c "命令" 选项:-i 输入 -t 伪终端 -d 守护进程(后台运行) --rm 停止容器就自动删除 --name 给容器起一个名字 -p 端口映射,前面为宿主机的端口,后面为容器服务进程端口,访问宿主机的80,最终会转发给容器的80端口 -p 宿主机端口:容器端口 -P 随机给端口 -v 指定卷 -v 宿主机目录:容器目录 --restart=always 相当于开机启动,只要关闭就重启,以后要默认加上 docker container update --restart=always 容器名或id -e 环境变量 --network 🦐ps 查看正在运行的容器 docker ps -a 查看所有容器 -q 只列出镜像id(静默输出) -s 查看容器真正用到的文件大小 🦐start 启动容器 docker start 镜像名或id 【id可以写id 的前几位】 stop restart kill pause 挂起 unpause 取消挂起 🦐stop 停止容器 docker stop 镜像名或id 🦐restart 重启容器 docker restart 镜像名或id 🦐kill 杀死容器 docker kill 镜像名或id 🦐logs 查看容器日志 docker logs 容器名或id 查看容器日志 🦐exec 进入容器 docker exec -it 容器名或id /bin/bash 若使用/bin/bash不成功,则使用/bin/sh(例如busybox) 通过ctrl +pq退出 🦐$() -q 静默输出 只显示ID docker 子命令 $(docker 子命令 -q) 批量操作 🦐export 将容器打包成文件 docker export 容器名或id > 本地包名 🦐import ##将本地包名上传为镜像 cat 本地包名 | docker import - 镜像名:标签 ##将本地包名上传为镜像 🦐rm 删除容器 docker rm 容器名或id 删除已经停止的容器 -f 强制删除 docker rm $(docker ps -aq) 删除所有停止的容器 🦐cp 复制 docker cp 路径/文件 容器id:路径 docker cp [选项] 路径/文件或目录 容器名:路径 ##宿主机——容器 docker cp [选项] 容器名:路径 主机路径/文件或目录 ##容器——宿主机 🦐docker stop $(docker ps -aq) ##批量停止容器 -q 静默输出 🦐stats 查看容器资源使用率 docker stats 🦐top 查看容器状态 docker top 容器id 🦐update 更新容器配置 docker update --restart=always 容器名

🦐create 创建容器

创建一个centos的容器 [root@client ~] # docker create -it centos:latest /bin/bash 这时可能会警告,此容器无法上网,容器若是想上网,需要与本机做一个桥接

🦐使centos容器上网

centos无法上网,容器若是想上网,需要与本机做一个桥接,开启路由转发功能

[root@client ~] # vim /etc/sysctl.conf 末尾添加 net.ipv4.ip_forward=1 [root@client ~] # sysctl -p ##加载配置 net.ipv4.ip_forward = 1 再之后就不会提示了

🦐start 启动容器

三种方式 [root@client ~] # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07322966c459 centos:latest "/bin/bash" 7 minutes ago Created intelligent_lumiere [root@client ~] # docker start intelligent_lumiere ##镜像名启动 [root@client ~] # docker start 07322966c459 ##镜像id启动 [root@client ~] # docker start 07 ##id前几位启动 07 [root@client ~] # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07322966c459 centos:latest "/bin/bash" 9 minutes ago Up 51 seconds intelligent_lumiere

🦐export 将容器打包成文件

docker export 容器名或id > 文件名

将centos容器打包成镜像 [root@client ~] # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07322966c459 centos:latest "/bin/bash" About an hour ago Up 58 minutes intelligent_lumiere [root@client ~] # docker export 073 > centos.test [root@client ~] # ls centos.test

🦐import 将文件上传为镜像

cat 文件名 | docker import - 镜像名:标签 ##将文件上传为镜像

将刚刚打包的文件上传为镜像 [root@client ~] # cat centos.test | docker import - centos:test sha256:afc13f2bc94d4197decf4616e2999ece4960e9ced3279268ba16f61d59c0fe0c [root@client ~] # docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos test afc13f2bc94d 53 seconds ago 231MB

🦐cp 复制

docker cp 路径/文件 容器id:路径

docker cp [选项] 路径/文件或目录 容器名:路径 ##宿主机——容器

docker cp [选项] 容器名:路径 主机路径/文件或目录 ##容器——宿主机

宿主机——容器 [root@client ~] # docker cp 1.txt 073:/root/ [root@client ~] # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07322966c459 centos:latest "/bin/bash" 2 hours ago Up 2 hours intelligent_lumiere [root@client ~] # docker cp 1.txt 073:/root/ [root@client ~] # docker exec -it 073 /bin/bash [root@07322966c459 /]# ls /root/ 1.txt anaconda-ks.cfg anaconda-post.log original-ks.cfg 容器——宿主机 容器内部操作:[root@07322966c459 /]# touch 2.txt 退出 宿主机 [root@client ~] # docker cp 073:/2.txt . [root@client ~] # ls 2.txt

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

line.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值