docker入门01

docker介绍:

 Docker简介

Docker是DotCloud开源的、可以将任何应用包装在Linux container中运行的工具。2013年3月发布首个版本,当前最新版本为1.3。Docker基于Go语言开发,代码托管在Github上,目前超过10000次commit。基于Docker的沙箱环境可以实现轻型隔离,多个容器间不会相互影响;Docker可以自动化打包和部署任何应用,方便地创建一个轻量级私有PaaS云,也可以用于搭建开发测试环境以及部署可扩展的web应用等。

Docker vs VM
从下图可以看出,VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。但Docker目前还不够完善,比如隔离效果不如VM,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。

Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并
且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水
果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他
们都运走。

历史

2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司。
这家公司主要提供基于PaaS的云计算技术服务。具体来说,是和LXC有关的容器技术。
后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为——Docker。
2013年3月,dotCloud公司的创始人之一,Docker之父,28岁的SolomonꢀHykes正式决定,将
Docker项目开源。
不开则已,一开惊人。
越来越多的IT工程师发现了Docker的优点,然后蜂拥而至,加入Docker开源社区。
Docker的人气迅速攀升,速度之快,令人瞠目结舌。
开源当月,Docker 0.1 版本发布。此后的每一个月,Docker都会发布一个版本。到2014年6月9日,
Docker 1.0 版本正式发布。
此时的Docker,已经成为行业里人气最火爆的开源技术,没有之一。甚至像Google、微软、Amazon、
VMware这样的巨头,都对它青睐有加,表示将全力支持。
Docker和容器技术为什么会这么火爆?说白了,就是因为它“轻”。

Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App , Anywhere”,也就是通过对应用组件的封装、分
发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行
环境能够做到“一次封装,到处运行”。
Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在
Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需
要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

Docker官网:http://www.docker.com
Docker中文网站:https://www.docker-cn.com
Docker Hub官网:https://hub.docker.com (仓库)

Docker的基本组成

在这里插入图片描述

docker 三大要素

镜像(image):

Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很
多容器。 就好似 Java 中的 类和对象,类就是镜像,容器就是对象!

容器(container):

Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。

它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)
和运行在其中的应用程序。。

容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写
的。

仓库(repository):

仓库(Repository)是集中存放镜像文件的场所。
仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓
库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。
国内的公开仓库包括阿里云 、网易云 等

centos 安装步骤

1、官网安装参考手册:https://docs.docker.com/engine/install/centos/
2、确定你是CentOS7及以上版本,我们已经做过了
3、yum安装gcc相关环境(需要确保 虚拟机可以上外网 )

yum -y install gcc
yum -y install gcc-c++

4、卸载旧版本

yum remove docker \ docker-client \ docker-client-latest
docker-common \ docker-latest \ docker-latest-logrotate
docker-logrotate \ docker-engine

5、安装需要的软件包

yum install -y yum-utils

6、设置镜像仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

7、更新yum软件包索引

yum makecache fast

8、安装 Docker CE

yum install docker-ce docker-ce-cli containerd.io

9、启动 Docker

systemctl start docker

10、测试命令

docker version

docker run hello-world

docker images

11、卸载

systemctl stop docker

yum -y remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker

阿里云镜像加速

1、介绍:https://www.aliyun.com/product/acr
2、注册一个属于自己的阿里云账户(可复用淘宝账号)
3、进入管理控制台设置密码,开通
4、查看镜像加速器自己的
在这里插入图片描述

配置镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{

“registry-mirrors”: [“https://qiyb9988.mirror.aliyuncs.com”]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

测试 HelloWorld

1、启动hello-world

docker run hello-world

2、run干了什么?
在这里插入图片描述

底层原理

Docker是怎么工作的
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户
端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们
前面说到的集装箱。
在这里插入图片描述

为什么Docker比较 VM 快很多?

1、docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在
docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在
效率上有明显优势。
2、docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机
一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建
一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主
机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。在这里插入图片描述

Docker常用命令

帮助命令

docker version # 显示 Docker 版本信息。
docker info # 显示 Docker 系统信息,包括镜像和容器数。。
docker --help # 帮助

镜像命令
docker images

#列出本地主机上的镜像
[root@dw1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 0712d5dc1b14 2 weeks ago 448MB
mysql latest d1dc36cf8d9e 2 weeks ago 519MB
hello-world latest feb5d9fea6a5 4 months ago 13.3kB

REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像创建时间
SIZE 镜像大小
#同一个仓库源可以有多个 TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG 定义不同 的镜像,如果你不定义镜像的标签版本,docker将默认使用 lastest 镜像!

docker search

docker search mysql

docker pull

docker pull mysql # 不写tag,默认是latest
docker pull mysql:5.7 # 不写tag,默认是latest

docker rmi

删除镜像

docker rmi -f 镜像id
docker rmi -f 镜像名:tag 镜像名:tag
docker rmi -f $(docker images -qa)

容器命令

说明:有镜像才能创建容器,我们这里使用 centos 的镜像来测试,就是虚拟一个 centos !

docker pull centos

新建容器并启动

docker run [OPTIONS] IMAGE [COMMAND][ARG…]

常用参数说明

在这里插入图片描述

在这里插入图片描述

虚拟一个centos 系统出来:
exit 退出,回到主机页面:
列出所有运行的容器

docker ps [OPTIONS]
#常用参数说明
-a # 列出当前所有正在运行的容器 + 历史运行过的容器
-l # 显示最近创建的容器
-n=? # 显示最近n个创建的容器
-q # 静默模式,只显示容器编号。
退出容器
exit #容器停止并退出
ctrl+P+Q #容器不停止退出

启动停止容器

docker start (容器id or 容器名)
docker restart (容器id or 容器名)
docker stop (容器id or 容器名)
docker kill (容器id or 容器名)

删除容器

docker rm 容器id #删除指定容器
docker rm -f $(docker ps -a -q) # 删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器

常用其他命令

后台启动容器

docker run -d 容器名

docker run -d centos # 启动centos,使用后台方式启动

问题: 使用docker ps 查看,发现容器已经退出了!

解释:Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命 令,就会自动退出。
比如,你运行了nginx服务,但是docker前台没有运行应用,这种情况下,容器启动后,会立即自
杀,因为他觉得没有程序了,所以最好的情况是,将你的应用使用前台进程的方式运行启动。

查看日志

docker logs -f -t --tail 容器id

例子:我们启动 centos,并编写一段脚本来测试玩玩!最后查看日志

进入正在运行的容器

命令1

docker exec -it 容器id bashShell
在这里插入图片描述

命令2

docker attach 容器id

exec 是在容器中打开新的终端,并且可以启动新的进程
attach 直接进入容器启动命令的终端,不会启动新的进程

从容器内拷贝文件到主机上

docker cp 容器id:容器内路径 目的主机路径

容器内执行,创建一个文件测试

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值