Docker 初识

Posted sunnypoem

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 初识相关的知识,希望对你有一定的参考价值。

参考:

https://www.cnblogs.com/SzeCheng/p/6822905.html

https://blog.csdn.net/yugongpeng_blog/article/details/43022769

https://blog.csdn.net/taiyangdao/article/details/71718805

 

Docker简介

Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。使用Docker,开发人员只需关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生成环境的一致性。

由于客居于操作系统,容器只能运行在与顶层宿主机相同或相似的操作系统。yu

简单说就是,开发环境打包成镜像,可以搬移到任何支持Docker的环境,然后运行。

 

图来源:https://www.cnblogs.com/SzeCheng/p/6822905.html

技术分享图片

 

 

Docker组件

核心组件:

Docker客户端和服务器(Docker引擎)、Docker镜像、RegistryDocker容器。

Docker的技术组件:

一个原生的Linux容器格式(libcontainer);

Linuxnamespace,用于隔离文件系统、进程和网络;

资源隔离和分组:使用cgroupsCPU和内存之类的资源独立分配给每个Docker容器;

写时复制

日志

交互式shelll

一个Dockerfile

FROM alpine_bash:latest

MAINTAINER sp

RUN echo hello

CMD echo world

 

为什么加载一个OS基础镜像?https://blog.csdn.net/yugongpeng_blog/article/details/43022769

Container内需不需要OS

Container不是一个VM技术,所以和OS没有关系。如果我没有理解错,这个Container应该指的是Docker Run出的运行环境,因为在里面我们可以运行一些命令,让使用者以为它就是一个完整的OS环境。这是不对的。其实Docker只是一个进程。当你使用docker exec登录进去的也只是一个Terminal的模拟环境。它不是真实的OS。正因为它不是OS,所以它是直接调用主机的Kernel的。而Container本身只是一个系统进程。

 

为何需要OS的基础镜像?

首先,OS的问题上面已经解释过了,它不是一个OS,但为何需要OS的基础镜像?其实这里的基础镜像是一个包含rootfs的镜像。Kernel启动后是需要把启动文件解压到rootfs上的,然后kernel找到init文件启动就可以得到一个Linux环境了,Docker做的事情就是模拟这个过程,让kernel给出一个独立的隔离环境。

docker build 构建镜像

sudo docker build -t qt:v1 /home/sp/dockertest/

查看

sudo docker images qt

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

qt                  v1                  aaec4961ec31        2 minutes ago       19.83 MB

 

 

查看镜像如何构建出来的

sudo docker history qt:v1

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT

aaec4961ec31        11 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo    0 B

1f10b0c38e9a        11 minutes ago      /bin/sh -c echo hello                           0 B

b00f1a7fc4a7        11 minutes ago      /bin/sh -c #(nop)  MAINTAINER sp        0 B

91370d5da095        3 months ago        bash                                            182 B

090950687196        3 months ago        bash                                            267 B

62fc0977df76        3 months ago        sh                                              9.032 MB

a0f29218fb23        3 months ago        sh                                              42.86 kB

c3447930f3bc        3 months ago        sh                                              6.606 MB

<missing>           3 months ago                                                        4.144 MB            Imported from -

 

 

docker save 保存镜像

sudo docker save -o /home/sp/dockertest/qt_pack.tar qt:v1

 

docker rmi 删除镜像

sudo docker rmi qt

 

docker run 运行容器

sudo docker run -i -t --name=qttest  qt:v1

 

docker exec 在容器内部运行进程

docker top 查看容器内的进程

docker stats 查看容器统计信息

Docker 命令&参数

build构建命令参数

转自:https://blog.csdn.net/taiyangdao/article/details/71718805

docker build命令用于根据给定的Dockerfile和上下文以构建Docker镜像。

docker build命令的使用格式:
docker build [OPTIONS] <PATH | URL | ->
1. 常用选项说明
--build-arg,设置构建时的变量
--no-cache,默认false。设置该选项,将不使用Build Cache构建镜像
--pull,默认false。设置该选项,总是尝试pull镜像的最新版本
--compress,默认false。设置该选项,将使用gzip压缩构建的上下文
--disable-content-trust,默认true。设置该选项,将对镜像进行验证
--file, -fDockerfile的完整路径,默认值为‘PATH/Dockerfile’
--isolation,默认--isolation="default",即Linux命名空间;其他还有processhyperv
--label,为生成的镜像设置metadata
--squash,默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image
--tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
--network,默认default。设置该选项,Set the networking mode for the RUN instructions during build
--quiet, -q ,默认false。设置该选项,Suppress the build output and print image ID on success
--force-rm,默认false。设置该选项,总是删除掉中间环节的容器
--rm,默认--rm=true,即整个构建过程成功后删除中间环节的容器

2. PATH | URL | -说明:
给出命令执行的上下文。
上下文可以是构建执行所在的本地路径,也可以是远程URL,如Git库、tarball或文本文件等。
如果是Git库,如https://github.com/docker/rootfs.git#container:docker,则隐含先执行git clone --depth 1 --recursive,到本地临时目录;然后再将该临时目录发送给构建进程。
构建镜像的进程中,可以通过ADD命令将上下文中的任何文件(注意文件必须在上下文中)加入到镜像中。
- 表示通过STDIN给出Dockerfile或上下文。
示例:

docker build - < Dockerfile

说明:该构建过程只有Dockerfile,没有上下文

docker build - < context.tar.gz

说明:其中Dockerfile位于context.tar.gz的根路径

docker build -t champagne/bbauto:latest -t champagne/bbauto:v2.1 .

docker build -f dockerfiles/Dockerfile.debug -t myapp_debug .

 

 

以上是关于Docker 初识的主要内容,如果未能解决你的问题,请参考以下文章

从零开始学习Docker (初识Docker)

初识Docker

Docker初识

Docker初识

Docker学习之旅--初识docker

Docker学习之旅--初识docker