Docker介绍及常用操作演示(一)
Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
- dockerClient客户端
- Docker Daemon守护进程
- Docker Image镜像
- DockerContainer容器
容器:
存储、运输工具
实现对容器内部的物品实现包含(实现了一个相对隔离的环境)
容器:模拟(虚拟)出一个相对隔离的空间
镜像:
用来创建容器的模版,放在镜像仓库中,例如nginx,redis,httpd等
Docker与Kvm的对比
kvm:
1. 虚拟机
2. 使用复杂
3. 启动过程相对慢(分钟)
4. 模版文件较大
5. 和物理完全隔离
6. 模拟的是一个完整系统,可以登录并实现管理
docker:
1. 直接虚拟出来一个用户空间
2. 使用简单
3. 启动非常块(秒级)
4. 模版文件很小
5. 在一定程度上和物理机隔离
6. 仅仅是模拟一部分用户空间,不方便管理
Docker使用理由
1. 快速部署服务
2. 实现隔离
3. 让一个主机运行多个容器
4. 提高开发效率
5. 简化配置过程
6. 实现软件的跨平台
Docker镜像加速配置
第一步:打开阿里云网站
- https://www.aliyun.com/?utm_content=se_1000301910
第二步:进行阿里云注册
略
第三步:点击控制台
第四步:点击产品与服务>镜像与服务
第五步:点击镜像加速器,记住自己的加速器地址
Docker的安装与配置
安装docker需要配置网络yum源,centos7自带的版本太低了
第一步:下载阿里云的docker安装包
在yum仓库的目录之下
- [root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
还需要使用到extra和epel源
- [extra]
- name=centos extra
- enabled=1
- gpgcheck=0
- baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
- [epel]
- name=epel
- enabled=1
- gpgcheck=0
- baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/
第二步:使用yum即可进行安装
docker-ce是社区版,是免费的
docker-ee是企业版,是收费的
这里我们下载社区版的
- [root@ken ~]# yum install docker-ce -y
第三步:添加加速器地址
把刚才注册得到的镜像加速地址如下步骤填写进去
- [root@ken ~]# mkdir /etc/docker
- [root@ken ~]# cat /etc/docker/daemon.json
- {
- "registry-mirrors": ["https://XXX.mirror.aliyuncs.com"]
- }
第四步:重启docker
- [root@ken ~]# systemctl restart docker
Docker有关镜像的操作命令详解
第一步:获取镜像的使用帮助
- [root@ken ~]# docker image --help
- Usage: docker image COMMAND
- Manage images
第二步:docker镜像的使用命令详解
- build 从docker文件里面创建镜像
- history 显示一个镜像的历史
- import 从归档文件中创建镜像
- inspect 显示一个一个或多个镜像的详细信息
- load 加载一个镜像从tar压缩包或者标准输入
- ls 列出镜像
- prune 移除没有被使用的镜像
- pull 从注册处拉取一个镜像或者镜像库
- push 把一个镜像或者镜像库推送至注册处
- rm 移除一个或多个镜像
- save 保存一个或者多个镜像到tar压缩包,默认情况下流式传输到
- tag 创建一个引用SOURCE_IMAGE的标记TARGET_IMAGE
Docker镜像的操作命令演示
一. 查看注册表中是否有nginx镜像
- [root@ken ~]# docker search nginx
- NAME DESCRIPTION STARS OFFICIAL AUTOMATED
- nginx Official build of Nginx. 10326 [OK]
- jwilder/nginx-proxy Automated Nginx reverse proxy for docker con?? 1471 [OK]
- richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of?? 650 [OK]
- jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as p?? 441 [OK]
- kong Open-source Microservice & API Management la?? 249 [OK]
- webdevops/php-nginx Nginx with PHP-FPM 117 [OK]
- kitematic/hello-world-nginx A light-weight nginx container that demonstr?? 112
- ...
二.下载nginx镜像
- [root@ken ~]# docker image pull nginx
三:查看本地镜像
- [root@ken ~]# docker image ls
- REPOSITORY TAG IMAGE ID CREATED SIZE
- nginx latest e81eb098537d 10 days ago 109MB
四:导入镜像
这里我准备了一个redis的镜像压缩包
这样就获取到了redis的镜像
压缩包不需要解压
- [root@ken ~]# docker image load < redis_img.tar.gz
- d626a8ad97a1: Loading layer [==================================================>] 58.46MB/58.46MB
- fd0ff4158c63: Loading layer [==================================================>] 338.4kB/338.4kB
- f1e69ab74fb6: Loading layer [==================================================>] 3.034MB/3.034MB
- 5935063a73de: Loading layer [==================================================>] 24.83MB/24.83MB
- 72ebea29957d: Loading layer [==================================================>] 1.536kB/1.536kB
- 56631ad86187: Loading layer [==================================================>] 3.584kB/3.584kB
- Loaded image: redis:latest
- [root@ken ~]# docker image ls
- REPOSITORY TAG IMAGE ID CREATED SIZE
- nginx latest e81eb098537d 10 days ago 109MB
- redis latest 55cb7014c24f 5 months ago 83.4MB
- [root@ken ~]#
五:镜像导出
写成压缩包的形式
- [root@ken ~]# docker image save nginx > /tmp/nginx.tar.gz
- [root@ken ~]# ls /tmp/nginx.tar.gz
- /tmp/nginx.tar.gz
六:显示nginx镜像的详细信息
- [root@ken ~]# docker inspect nginx
- [
- {
- "Id": "sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a",
- "RepoTags": [
- "nginx:latest"
- ],
- "RepoDigests": [
- "nginx@sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991"
- ],
- "Parent": "",
- "Comment": "",
- "Created": "2018-11-16T13:32:10.147294787Z",
- "Container": "d4fa15093ad8ad3df60d7403c1752a379503686e32a76b70771b3ea268ec5d66",
- "ContainerConfig": {
- "Hostname": "d4fa15093ad8",
- "Domainname": "",
- "User": "",
- "AttachStdin": false,
- "AttachStdout": false,
- "AttachStderr": false,
- "ExposedPorts": {
- ...
七:删除nginx的镜像
- [root@ken ~]# docker image rm nginx
- Untagged: nginx:latest
- Untagged: nginx@sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991
- Deleted: sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a
- Deleted: sha256:7055505a92c39c6f943403d54a1cda020bfeb523b55d9d78bfe1dad0dd32bb2d
- Deleted: sha256:378a8fcc106dc4d3a9f2dc0b642b164e25de3aab98a829e72b2d8c0cf0bad8ee
- Deleted: sha256:ef68f6734aa485edf13a8509fe60e4272428deaf63f446a441b79d47fc5d17d3
- [root@ken ~]# docker image ls
- REPOSITORY TAG IMAGE ID CREATED SIZE
- redis latest 55cb7014c24f 5 months ago 83.4MB
Docker有关容器的操作命令详解
第一步:获取容器的命令的使用帮助
- [root@ken ~]# docker container --help
- Usage: docker container COMMAND
- Manage containers
第二步:docker容器的使用命令详解
- attach 将本地标准输入,输出和错误流附加到正在运行的容器
- commit 根据容器的更改创建新镜像
- cp 在容器和本地文件系统之间复制文件/文件夹
- create 创建一个新的容器
- diff 检查容器文件系统上的文件或目录的更改
- exec 在正在运行的容器中运行命令
- export 将容器的文件系统导出为tar存档
- inspect 显示一个或多个容器的详细信息
- kill 杀死一个或多个正在运行的容器
- logs 获取容器的日志
- ls 列出容器
- pause 暂停一个或多个容器中的所有进程
- port 列出端口映射或容器的特定映射
- prune 删除所有已停止的容器
- rename 重命名容器
- restart 重启一个或多个容器
- rm 删除一个或多个容器
- run 在新容器中运行命令
- start 启动一个或多个已停止的容器
- stats 显示容器资源使用情况统计信息的实时流
- stop 停止一个或多个正在运行的容器
- top 显示容器的运行进程
- unpause 取消暂停一个或多个容器中的所有进程
- update 更新一个或多个容器的配置
- wait 等待,直到一个或多个容器停止,然后打印退出代码
Docker容器的操作命令演示
一.启动redis容器
–name:指定容器名字
-d:表示后台运行
- [root@ken ~]# docker container run --name redis1 -d redis
- 4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd
二.查看容器
使用ls
- [root@ken ~]# docker container ls
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4cd31fa09d48 redis "docker-entrypoint.s?? 39 seconds ago Up 38 seconds 6379/tcp redis1
三.查看所有的容器
ps -a: 列出所有的容器包括运行和停止的
ps: 仅仅列出正在运行的
- [root@ken ~]# docker container ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4cd31fa09d48 redis "docker-entrypoint.s?? About a minute ago Up About a minute 6379/tcp redis1
- 054bc8b8aab7 redis "docker-entrypoint.s?? 2 minutes ago Exited (0) 2 minutes ago confident_goldstine
四.查看容器的详细信息
inspect后面加上容器名字即可获取有关容器的详细信息
- [root@ken ~]# docker container inspect redis1
- [
- {
- "Id": "4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd",
- "Created": "2018-11-26T20:22:23.099937767Z",
- "Path": "docker-entrypoint.sh",
- "Args": [
- "redis-server"
- ],
- "State": {
- "Status": "running",
- "Running": true,
- "Paused": false,
- "Restarting": false,
- "OOMKilled": false,
- "Dead": false,
- ...
五.停止容器
使用stop
- [root@ken ~]# docker container stop redis1
- redis1
- [root@ken ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
六.启动容器
使用start
- [root@ken ~]# docker container start redis1
- redis1
- [root@ken ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4cd31fa09d48 redis "docker-entrypoint.s?? 8 minutes ago Up 1 second 6379/tcp redis1
七.登录容器
第一种方法:
exec -it 容器名 /bin/sh
-i: 表示启动为交互模式
-t:表示分配一个终端
登录进去之后发现我们可以执行有挂redis的命令了
- [root@ken ~]# docker container exec -i -t redis1 /bin/sh
- #
- #
- # redis-cli
- 127.0.0.1:6379> set ken 520
- OK
- 127.0.0.1:6379> get ken
- "520"
退出之后容器没有停止
- [root@ken ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4cd31fa09d48 redis "docker-entrypoint.s?? 13 minutes ago Up 4 minutes 6379/tcp redis1
第二种方法:
attach:会导致当退出的时候,自动停止容器
不建议使用
- [root@ken ~]# docker container attach redis1
- ^C1:signal-handler (1543264604) Received SIGINT scheduling shutdown...
- 1:M 26 Nov 20:36:44.315 # User requested shutdown...
- 1:M 26 Nov 20:36:44.315 * Saving the final RDB snapshot before exiting.
- 1:M 26 Nov 20:36:44.327 * DB saved on disk
- 1:M 26 Nov 20:36:44.327 # Redis is now ready to exit, bye bye...
- [root@ken ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
第三种方法:
基于nsenter进入
第一步:启动容器
- [root@ken ~]# docker container start redis1
- redis1
- [root@ken ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4cd31fa09d48 redis "docker-entrypoint.s?? 16 minutes ago Up 6 seconds 6379/tcp redis1
第二步:获取容器的pid
- [root@ken ~]# docker container inspect -f '{{.State.Pid}}' redis1
- 6036
第三步:登录容器
-t: 从中获取名称空间的目标进程
-u: 输入UTS名称空间(主机名等)
-i: 进入System V IPC命名空间
-n: 输入网络命名空间
-p:输入pid命名空间
- [root@ken ~]# nsenter -t 6036 -u -i -n -p
- [root@4cd31fa09d48 ~]# ps
- PID TTY TIME CMD
- 2595 pts/0 00:00:01 bash
- 6216 pts/0 00:00:00 nsenter
- 6217 pts/0 00:00:00 bash
- 6250 pts/0 00:00:00 ps
退出时不会停止容器
- [root@4cd31fa09d48 ~]# exit
- logout
- [root@ken ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4cd31fa09d48 redis "docker-entrypoint.s?? 23 minutes ago Up 6 minutes 6379/tcp redis1
八.删除容器
第一步:需要停止容器
- [root@ken ~]# docker container stop redis1
- redis1
- [root@ken ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
第二步:删掉容器
- [root@ken ~]# docker container rm redis1
- redis1
- [root@ken ~]# docker container ls
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
补充:一次性删除全部已经退出的容器
[root@ken1 ~]# docker rm $(docker ps -aq)
docker stop 与 docker kill 均可以将容器停掉,但二者究竟有什么区别呢?首先,摘录一下官网对这两个功能的描述:
- docker stop: Stop a running container (send SIGTERM, and then SIGKILL after grace period) […] The main process inside the container will receive SIGTERM, and after a grace period, SIGKILL. [emphasis mine]
- docker kill: Kill a running container (send SIGKILL, or specified signal) […] The main process inside the container will be sent SIGKILL, or any signal specified with option –signal. [emphasis mine]
docker stop,支持“优雅退出”。先发送SIGTERM信号,在一段时间之后(10s)再发送SIGKILL信号。Docker内部的应用程序可以接收SIGTERM信号,然后做一些“退出前工作”,比如保存状态、处理当前请求等。
docker kill,发送SIGKILL信号,应用程序直接退出。
按用途容器大致可分为两类:服务类容器和工具类的容器。
1. 服务类容器以 daemon 的形式运行,对外提供服务。比如 web server,数据库等。通过 -d
以后台方式启动这类容器是非常合适的。如果要排查问题,可以通过 exec -it
进入容器。
2. 工具类容器通常给能我们提供一个临时的工作环境,通常以 run -it
方式运行,比如:
运行 busybox,run -it
的作用是在容器启动后就直接进入。执行 exit
退出终端,同时容器停止。
工具类容器多使用基础镜像,例如 busybox、debian、ubuntu 等。
- 当 CMD 或 Entrypoint 或 docker run 命令行指定的命令运行结束时,容器停止。如下图
- 通过
-d
参数在后台启动容器。 - 通过
exec -it
可进入容器并执行命令。
指定容器的三种方法:
- 短ID。
- 长ID。
- 容器名称。 可通过
--name
为容器命名。重命名容器可执行docker rename
。
容器按用途可分为两类:
- 服务类的容器。
- 工具类的容器。
无效的 none 镜像
另一种类型的 < none>:< none> 镜像是dangling images ,这种类型会造成磁盘空间占用问题。
像这些 dangling镜像主要是我们触发 docker build 和 docker pull命令产生的。
用一个例子来讲解:
假设我们要构建一个新的镜像,Dockerfile 文件如下
1
2
|
FORM Ubuntu:latest
RUN echo ‘hello world’
|
当我们构建 docker build -t hello-world ./ 的时候,会生成一个新的镜像。
可是过了一个月之后,Ubuntu发布了新的镜像,这个时候我们再次构建一个 hello world镜像,会依赖于最新的 Ubuntu
问题来了,我们引用旧的Ubuntu的hello-world镜像,这个时候就会成为没有标签的 dangling镜像!使用下面的命令可以清理
[root@ken-node3 ~]# docker rmi $(docker images -f "dangling=true" -q)
docker没有自动垃圾回收处理机制,未来可能会有这方面的改进,但是目前我们只能这样手动清理(写个脚本就好)。
Docker介绍及常用操作演示(一)的更多相关文章
- Docker介绍及常用操作演示(一)--技术流ken
Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互 ...
- Git介绍及常用操作演示(一)--技术流ken
Git介绍 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发 ...
- docker 介绍及安装操作
docker 介绍及安装操作 1.docker概述 2.docker安装及操作 1.docker概述: Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源 是在L ...
- Docker安装及常用操作
Docker简介: Docker是一个轻量级容器技术,类似于虚拟机技术,但性能远远高于虚拟机,Docker支持将软件编译成一个镜像(image),在这个镜像中做好对软件的各种配置,然后可以运行这个镜像 ...
- CI 知识 :Git介绍及常用操作
Git介绍 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发 ...
- Docker 镜像的常用操作
镜像作为 Docker 三大核心概念中,最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌握的.本文将带您一步一步,图文并重,上手操作来学习它. 目录 一 Docker 下载镜像 1.1 下 ...
- 二、docker 镜像容器常用操作(让我们用docker 溜得飞起)
前言 上篇讲了我们如何安装docker,现在该我们一展拳脚的时候了.接下来让我们一起学习一下docker常见的操作,让我们能够会使用 docker. 基本概念 在讲使用之前,还是先将一下docker ...
- docker swarm的常用操作
1. 说明 本文档针对docker swarm操作. 针对的系统是以一个本地的测试系统为例.其中机器信息如下,172.16.1.13作为docker swarm的管理机. 本地测试的机器列表信息: 主 ...
- docker镜像的常用操作
获取镜像 比如说我们可以这样操作 当然把这个镜像拉过来时间非常长. 查看镜像列表 命令: docker images 说明: 使用docker images命令可以列出本地主机上已有的镜像. 信息 ...
随机推荐
- LeetCode 到底怎么刷?GitHub 上多位大厂程序员亲测的高效刷题方式
作者:HelloGitHub-小鱼干 在众多的诸如阿里.腾讯等大厂之中,最看中面试者刷题技能的大概要数有"链表厂"之称的字节跳动了.作为一个新晋大厂,字节跳动以高薪.技术大佬云集吸 ...
- Ubuntu操作系统(文件传输)
首先选择Ubuntu版本为偶数版本--(系统比较稳定软件源比较齐全) Ubuntu和windows之间的文件传输首先在Windows上安装连接工具winscp 在Ubuntu开启SSH服务(https ...
- SpringBoot中Mybatis打印sql日志
application.yml中加上 # springBoot+Mybatis 控制台打印SQL语句 (方式一) logging: level: com.zoctan.api.mapper : deb ...
- python基础 Day5
python Day5 字典 其他数据类型的缺点 列表可以存储大量的数据,但是关联性不强. 列表的查询速度比较慢 其容器的数据类型为dict 其数据类型的分类 可变(不可哈希)的数据类型:list d ...
- linux命令查询网站
http://linux.51yip.com/ http://man.linuxde.net/ Linux命令查询手册Linux终端下 esc + . 可以获取上次文件名
- 2020.5.27 第七篇 Scrum冲刺博客
Team:银河超级无敌舰队 Project:招新通 项目冲刺集合贴:链接 目录 一.每日站立会议 1.1 会议照片 1.2 项目完成情况 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3. ...
- 火狐Firefox 52.90版是最后一个支持WinXP和Vista的版本
Firefox 52.90版是最后一个支持 Windows XP 和 Windows Vista 的升级版.(参考:https://support.mozilla.org/zh-CN/kb/firef ...
- 安装oracleXE快捷版(一)
yum找不到包,参考了一些文章,用iso上的包安装了.在文章后面贴有我实际的操作(黑体)和日志. 更换yum源https://www.cnblogs.com/zrxuexi/p/11587173.ht ...
- js中map()、some()、every()、filter()的区别
js的Array对象有map.some.every.filter几个方法都能对数组中的每个对象进行处理,但是他们之间的功能又各有差别,所以在记下. map():通过指定函数处理数组的每个元素,并返回处 ...
- 熟练剖分(tree) 树形DP
熟练剖分(tree) 树形DP 题目描述 题目传送门 分析 我们设\(f[i][j]\)为以\(i\)为根节点的子树中最坏时间复杂度小于等于\(j\)的概率 设\(g[i][j]\)为当前扫到的以\( ...