Docker的理解和基本命令详解

如何通俗解释D ocker是什么?

Docker思想来自于集装箱,集装箱解决了什么问题呢?比如,在一艘大船上,要把各种各样的货物要整理起来,集装箱(Docker)就可以做到,并且相互间不会影响。就不需要指定运输的船了(这个船运吃的那个船运穿的)。只要把货物装在集装箱里封装好,就可以用一艘大船把他们都运走。

1.Docker就是类似的理念。云计算是运输船,Docker就是集装箱。

1.不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。

2.你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。

3.在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。
总之docker就是集装箱原理。

4.docker就是用来存放应用的一个容器

容器管理

# docker run -it –name vm1 ubuntu bash //创建容器
# docker ps -a //查看容器状态
# docker attach vm1 //链接容器
# docker top vm1 //查看容器进程
[root@foundation22 ~]# docker run -it –name vm1 ubuntu
root@b6e503aec1e3:/# [root@foundation17 ~]#
//////用ubuntu这个镜像生成一个名为vm1的容器///
[root@foundation22 ~]# docker run -it ubuntu //未制定容器名称
[root@foundation22 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2c94bd4ef22 ubuntu “/bin/bash” 2 minutes ago Up 2 minutes silly_curie
a2798a01f075 ubuntu “/bin/bash” 4 minutes ago Up 8 seconds vm1
[root@foundation22 ~]# docker stop c2c94bd4ef22 //结束一个容器(用进程id结束)
c2c94bd4ef22
[root@foundation22 ~]# docker rm c2c94bd4ef22 //删除容器(用进程id删除)
c2c94bd4ef22
[root@foundation22 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a2798a01f075 ubuntu “/bin/bash” 5 minutes ago Up About a minute vm1
root@bd4961841626:/# [root@foundation17 ~]# docker attach vm1
root@bd4961841626:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@bd4961841626:/# touch file{1..5}
root@bd4961841626:/# ls
bin dev file1 file3 file5 lib media opt root sbin sys usr
boot etc file2 file4 home lib64 mnt proc run srv tmp var
[root@foundation22 ~]# docker pause vm1 //暂停容器
vm1
[root@foundation22 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd4961841626 ubuntu “/bin/bash” 2 minutes ago Up 41 seconds (Paused) vm1
[root@foundation22 ~]# docker unpause vm1 //启动容器
vm1
[root@foundation22 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd4961841626 ubuntu “/bin/bash” 3 minutes ago Up About a minute vm1
[root@foundation22 ~]# docker run -it –name vm2 ubuntu
root@aac0080d0606:/# [root@foundation17 ~]# docker run -it –name vm3 ubuntu
root@13e9f0e36ea0:/# [root@foundation17 ~]# docker run -it –name vm4 ubuntu
root@2e4adfc6ea87:/# [root@foundation17 ~]# docker run -it –name vm5 ubuntu
root@cf98619960fc:/# [root@foundation17 ~]#
[root@foundation22 ~]# docker ps -aq
cf98619960fc
2e4adfc6ea87
13e9f0e36ea0
aac0080d0606
bd4961841626
[root@foundation22 ~]# docker stop docker ps -aq
cf98619960fc
2e4adfc6ea87
13e9f0e36ea0
aac0080d0606
bd4961841626 

容器内的数据提交:(docker commit vm3 ubuntu//提交vm3容器里面的数据到ubuntu镜像放到仓库)

[root@foundation22 ~]# docker commit vm3 ubuntu
sha256:ca9b1aa4a9aee738f632999bfad3baf5bda20b5a8b51de82b8f288a922cb4a66
[root@foundation22~]# docker stop vm3
vm3
[root@foundation22 ~]# docker rm vm3
vm3
[root@foundation22 ~]# docker run -it –name vm4 ubuntu
root@6cb52f07dcde:/# ls
bin dev file1 file3 file5 lib media opt root sbin sys usr
boot etc file2 file4 home lib64 mnt proc run srv tmp var

提交的内容是在镜像里面的内容上加一层(只读):

[root@foundation22 ~]# docker run -it –name vm1 ubuntu
root@59026e7f5104:/# ls
bin dev file1 file3 file5 lib media opt root sbin sys usr
boot etc file2 file4 home lib64 mnt proc run srv tmp var
root@59026e7f5104:/# rm -fr file*
root@59026e7f5104:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@59026e7f5104:/# exit
exit
[root@foundation22 ~]# docker commit vm1 ubuntu
sha256:734d5eba88071735584a1c22519d9000d133b531df3dd7b56e6bbd0dca2abdd3
[root@foundation22 ~]# docker run -it –name vm8 ubuntu
root@e05171f7c0c7:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
[root@foundation22 ~]# docker history ubuntu //查看镜像的层(最多不能超过127层)
IMAGE CREATED CREATED BY SIZE COMMENT
734d5eba8807 29 minutes ago /bin/bash 52 B
ca9b1aa4a9ae 51 minutes ago /bin/bash 28 B
07c86167cdc4 14 months ago /bin/sh -c #(nop) CMD [“/bin/bash”] 0 B
220d2912ab1d 14 months ago /bin/sh -c sed -i ‘s/^#\s*(deb.*universe)$/ 1.895 kB
cc77a2e3d72c 14 months ago /bin/sh -c echo ‘#!/bin/sh' > /usr/sbin/polic 194.5 kB
c8fa7cdceff3 14 months ago /bin/sh -c #(nop) ADD file:b9504126dc55908988 187.7 MB 

////vm1里面新建文件后,提交,vm1里面的文件提交到ubuntu之后,ubuntu里面就有记录,再用镜像ubuntu建立容器,容器内部包含有vm1里面的文件。如果删除vm1里面新建的文件,再次提交,ubuntu里面的内容就会被覆盖掉。再次用ubuntu建立容器,新建立的容器不就没有最早vm1里面建立的文件。

复制文件到容器里面需要制定路径(即容器源)

[root@foundation22~]# docker cp /etc/passwd vm1
must specify at least one container source
[root@foundation22 ~]# docker cp /etc/passwd vm1:/
[root@foundation22 ~]# docker export -o vm2.tar vm1 //导出到当前目录,并命名为vm2.tar
[root@foundation22 ~]# docker save -o ubuntu.tar ubuntu:v1 // 将ubuntu:v1镜像制成 ubuntu:v1文件
[root@foundation22 ~]# docker run -d –name web -p 8000:80 nginx
3cca467e17717b7dd09dd997d7df4e2239e8505be8f0fc79ec11804c5365103d
[root@foundation22 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3cca467e1771 nginx “nginx -g ‘daemon off” 15 seconds ago Up 11 seconds 443/tcp, 0.0.0.0:8000->80/tcp web
[root@foundation22 ~]# netstat -antlp | grep :8000
tcp6 0 0 :::8000 :::* LISTEN 16093/docker-proxy
[root@foundation22 ~]# docker diff vm1
C /root
C /root/.bash_history
A /passwd
D /file2
D /file5
D /file1
D /file3
D /file4

D:表示删除
A:表示增加add

以上所述是小编给大家介绍的Docker的理解和基本命令详解,希望对大家有所帮助!

(0)

相关推荐

  • 常用的Docker基本命令及用法汇总

    查看docker安装信息 docker info 获取docker镜像 docker pull azraelrabbit/monupw 创建docker容器 docker run --name monojexus -d -p 32022:22 -p 32080:80 -v /mydata:/data azraelrabbit/monupw 以后台进程的方式运行docker容器 sample_job=$(docker run -d monojexus /bin/sh -c "while true;

  • 解决执行docker daemon命令时出错的问题

    最近在工作中遇到了一个问题,在一开始执行docker daemon命令时总是会出错导致进程stop,按照网上的方法在/etc/fstab文件里添加了一行 none /sys/fs/cgroup cgroup defaults 0 0 这时Docker daemon可以起来了,但是有了新的问题--执行docker run命令时出现"no left space on device"字样的错误: 后来又使用apt-get update&&apt-get upgrade升级了包

  • Docker常用的清除容器镜像命令小结

    前言 Docker 是一个非常有趣的项目.它自己宣称可以减轻部署服务器的难度,当然我相信里面有炒作的成分.但是实际使用后,我觉得 Docker 的表现还是可圈可点的.这篇文章主要总结了Docker清除容器镜像常用的命令,下面来一起看看吧. 杀死所有running状态的容器 docker kill $(docker ps -q) 删除所有已经停止的容器 docker rm $(docker ps -a -q) 删除所有\'untagged/dangling\' ()状态的镜像 docker rmi

  • docker images,info,-d等命令报错的解决方法

    一.发现问题 楼主不管输入那个命令,都出现了: FATA[0000] Cannot connect to the Docker daemon. Is 'docker -d' running on this host? 二.解决方法 以及类似的错误,就连docker version命令都报错了,楼主开始找啊找,找到了好多东西,结果发现没一个能行的,最后楼主使用这样的命令: # vim /etc/default/docker 在该文件中添加如下内容: DOCKER_OPTS="-H unix:///

  • docker测试时候命令无法补全的解决方法

    发现问题 在输入docker swarm 然后tab键不能像这样进行提示 和补全 tab 键也无法补全nginx容器名,下面是运行截图 解决方法: yum install -y bash-completion 退出 后重进就正常了 总结 以上就是这篇文章的全部内容了,希望本文的内容对同样遇到这个问题的朋友们能有所帮助,如果有疑问大家可以留言交流.

  • Docker基础命令详解

    docker基本概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上. Docker是一个重新定义了程序开发测试.交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是docker提出的"Build once,Run anywhere" 创建镜像 创建镜像的方法有三种: 基于已有的容器创建 基于本地模板导入 基于dockerfile 基于已有的容器创建 主要使用docker

  • Docker的理解和基本命令详解

    如何通俗解释D ocker是什么? Docker思想来自于集装箱,集装箱解决了什么问题呢?比如,在一艘大船上,要把各种各样的货物要整理起来,集装箱(Docker)就可以做到,并且相互间不会影响.就不需要指定运输的船了(这个船运吃的那个船运穿的).只要把货物装在集装箱里封装好,就可以用一艘大船把他们都运走. 1.Docker就是类似的理念.云计算是运输船,Docker就是集装箱. 1.不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的

  • Docker run流程及镜像的基本命令详解

    目录 1.run 的工作流程 2.镜像的基本命令 1.run 的工作流程 当我们在安装完Docker引擎的时候,都会通过运行hello-world 镜像验证 Docker Engine 是否已正确安装: 下面我们来分析 run 命令的执行流程:run的执行流程图如下 当我们尝试运行一个在本机和DockerHub都找不到的镜像时: 首先启动Docker 引擎: systemctl start docker 然后进行测试: docker run wanliguyicheng123456789 Doc

  • Docker(黑马spring cloud笔记)详解

    目录 介绍和安装 安装 启动 镜像加速 Docker基本操作 镜像操作 容器操作 数据卷操作 Dockerfile 镜像结构 Dockerfile Docker-Compose 安装 基本命令 Docker 私 服搭建 练习 练习1:save和load 练习2:docker部署nginx 练习3:部署MySQL 练习4:基于Ubuntu构建一个新镜像,运行一个java项目 练习5:部署微服务集群 问题:微服务注册失败 介绍和安装 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从

  • Docker核心原理之 Cgroup详解

    内核中强大的工具cgroup,不仅可以限制被NameSpace隔离起来的资源,还可以为资源设置权重,计算用量等 什么是cgroup cgroup全称是control groups control groups:控制组,被整合在了linux内核当中,把进程(tasks)放到组里面,对组设置权限,对进程进行控制.可以理解为用户和组的概念,用户会继承它所在组的权限. cgroups是linux内核中的机制,这种机制可以根据特定的行为把一系列的任务,子任务整合或者分离,按照资源划分的等级的不同,从而实现

  • Docker工作模式及原理详解

    如下图所示: 我们在使用虚拟机和docker的时候,就会出现这样一个疑问:Docker为什么比VM虚拟机快呢? 上面这张图就很客观的说明了这个问题 1.Docker有着比虚拟机更少的抽象层. 2.Docker利用的是宿主机的内核,VM需要的是Guest os. 所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统.虚拟机是加载Guest os(花费时间分钟级别),而docker利用的是宿主机的操作系统,省略了这个复杂的过程(花费时间秒级别). 搞清楚这些,我们再来看看对

  • Docker 打包python的命令详解

    最近用Python写了一段爬虫程序,为了隔离其运行环境,易于分发,把项目打包成Docker镜像 Dockerfile FROM python:2.7.12-alpine ADD ./src /job CMD ["python", "/job/main.py"] 构建命令 $ docker build -t job . 运行 $ docker run -d --name job job 比较简单 以上所述是小编给大家介绍的Docker 打包python的命令详解,希望

  • Linux Docker安装wordpress的方法详解教程

    安装mysql服务 下载mysql镜像: docker pull mysql 创建mysql容器并后台运行,指定数据库密码是123456.-e指定环境变量. docker run --name mysql_db -e MYSQL_ROOT_PASSWORD=123456 -d mysql 使用官方的wordpress wordpress镜像daocloud.io: docker pull daocloud.io/daocloud/dao-wordpress:latest 拉取镜像前请先登录: d

  • docker cgroup 资源监控的详解

    docker cgroup 资源监控的详解 1.cgroup术语解析: blkio: 这个subsystem可以为块设备设定输入/输出限制,比如物理驱动设备(包括磁盘.固态硬盘.USB等). cpu: 这个subsystem使用调度程序控制task对CPU的使用. cpuacct: 这个subsystem自动生成cgroup中task对CPU资源使用情况的报告. cpuset: 这个subsystem可以为cgroup中的task分配独立的CPU(此处针对多处理器系统)和内存. devices

  • CentOS 7上安装Docker 1.8 的步骤详解

    Docker支持运行在以下CentOS版本: •CentOS 7.X 安装在二进制兼容的EL7版本如 Scientific Linux也是可能成功的,但是Docker 没有测试过并且不官方支持. 此文带你通过使用Docker管理的发行包和安装机制来安装.使用这些报能确保你使用最新的Docker版本. 如果你希望使用CentOS管理的包,请阅读你的CentOS文档. 要求 不过你的系统版本是多少,Docker都要求64位.并且当CentOS7时你的内核必须不小于3.10. 检查当前内核版本: #

  • java时区转换的理解及示例详解

    一.时区的基本概念 GMT(Greenwich Mean Time),即格林威治标准时,是东西经零度的地方.人们将地球人为的分为24等份,每一等份为一个时区,每时区横跨经度15度,时间正好为1小时.往西一个时区,则减去一小时:往东一个时区,则加上一小时.中国在东经120度上,(东经120°-东经0°)所得度数再除以15,即得8. UTC(Coordinated Universal Time),即世界协调时间,是经过平均太阳时(以格林威治时间GMT为准).地轴运动修正后的新时标以及以「秒」为单位的

随机推荐