Docker

Docker简介与常用命令

一、技术简介

Docker 是基于Go语言实现的云开源项目,主要目标是“Build, Ship and Run Any App, Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”

**Docker:**解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

**镜像:**Docker镜像(Image)就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。

**容器:**Docker利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。它可以被启动、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。容器的定义个镜像几乎一模一样,也是一维层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

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

二、安装(CentOS 7)

官方安装文档:https://docs.docker.com/engine/install/centos/

系统要求:CentOS 7 及以上(查看内核版本:uname -r)

1、卸载旧版本

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

2、设置仓库

yum install -y yum-utils

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
# 以下配置可选
yum-config-manager --enable docker-ce-nightly

yum-config-manager --enable docker-ce-test

yum-config-manager --disable docker-ce-nightly

3、安装Docker Engine

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

4、配置阿里云镜像加速器

登录阿里云获取个人镜像加速器地址

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["阿里云加速器地址"]
}
EOF
systemctl daemon-reload
systemctl restart docker

5、运行Hello World镜像实例

docker run hello-world

输出如下:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete 
Digest: sha256:37a0b92b08d4919615c3ee023f7ddb068d12b8387475d64c622ac30f45c29c51
Status: 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://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

至此,Docker安装成功!

三、Docker容器与虚拟机区别

Docker容器虚拟机(VM)
操作系统与宿主机共享OS宿主机OS上运行虚拟机OS
存储大小镜像小,便于存储与传输镜像庞大(vmdk、vdi等)
运行性能几乎无额外性能损失操作系统额外的CPU、内存消耗
移植性轻便、灵活,适应于Linux笨重,与虚拟化技术耦合度高
硬件亲和性面向软件开发者面向硬件运维者
部署速度快速,秒级较慢,10s以上

四、常用命令

1、帮助命令

# 获取版本信息
docker version

# 获取docker详细信息
docker info 

# 获取docker帮助信息
docker help

2、镜像命令

# 查看主机上当前存在的镜像
docker images
options:
	-a	列出本地所有的镜像
	-q	只显示镜像ID
	--digests	显示镜像的摘要信息
	--no-trunc	显示完整的镜像信息
# 查找某一镜像
docker search 某个镜像的名字
网站:https://hub.docker.com
# 下载镜像
docker pull 镜像名字
docker pull 镜像名字:指定版本
# 删除镜像
docker rmi 镜像名字或ID
# 删除单个镜像
docker rmi -f 镜像ID
# 删除多个镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG ...
# 删除全部镜像
docker rmi -f $(docker images -qa)

3、容器命令

# 新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARGS...]
options:
	--name	为容器指定一个名称
	-d	后台运行容器,并返回容器ID,也即启动守护式容器
	-i	以交互模式运行容器,通常与-t同时使用
	-t	为容器重新分配一个伪输入终端,通常与-i同时使用
	-P	随机端口映射
	-p	指定端口映射,有以下四种格式
		ip:hostPort:containerPort
		ip::containerPort
		hostPort:containerPort
		containerPort

# 列出当前所有正在运行的容器
docker ps [OPTIONS]
options:
	-l	显示最近创建的容器
	-n + 数字	显示最近n个创建的容器
	-a	显示当前所有正在运行的容器 + 历史上运行过的
	-q	静默模式,只显示容器编号
	--no-trunc	不截断输出

# 退出容器
两种退出方式:
	exit	容器停止退出
	ctrl + P + Q	容器不停止退出

# 启动容器
docker start 容器ID或者容器名

# 重启容器
docker restart 容器ID或者容器名

# 停止容器
docker stop 容器ID或者容器名

# 强制停止容器
docker kill 容器ID或者容器名

# 删除已停止的容器
docker rm 容器ID
	一次性删除多个容器
		① docker rm -f $(docker ps -a -q)
		② docker ps -a -q | xargs docker rm

# 启动守护式容器
docker run -d 容器名

# 查看容器日志
docker logs -f -t --tail 容器ID
	参数解读:
		-t	加入时间戳
		-f	跟随最新的日志打印
		--tail 数字	显示最后多少条

# 查看容器内的进程
docker top 容器ID

# 查看容器内部细节
docker inspect 容器ID

# 对退出的容器进行命令行交互
	① 不进入容器直接执行命令,启动新的进程
		docker exec -it 容器ID 命令
	② 进入容器启动命令的终端,不会启动新的进程
		docker attach 容器ID

# 从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径

五、Docker镜像原理

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

1、UnionFS(联合文件系统)

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

2、Docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs(root file system),在bootfs之上。包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版比如Ubuntu,Centos等等。

3、分层的镜像

以pull为例,镜像在下载的过程中是一层一层的下载

4、为什么Docker镜像要采用这种分层结构

最大的一个好处:共享资源

比如:有多个镜像都从相同的base镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

5、commit操作

docker commit 提交容器副本使之成为一个新的镜像

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

ull为例,镜像在下载的过程中是一层一层的下载

4、为什么Docker镜像要采用这种分层结构

最大的一个好处:共享资源

比如:有多个镜像都从相同的base镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

5、commit操作

docker commit 提交容器副本使之成为一个新的镜像

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值