Docker 基础知识

小七学习网,助您升职加薪,遇问题可联系:客服微信【1601371900】 备注:来自网站

Docker 是整个系统开发中最重要的一环,使用 Docker 可以将环境进行直接配置文件化。 你将会看到如下内容: 什么是 Docker Dockerfile 的基本格式 Docker 的基本安装与…

Docker 是整个系统开发中最重要的一环,使用 Docker 可以将环境进行直接配置文件化。

你将会看到如下内容:

  1. 什么是 Docker
  2. Dockerfile 的基本格式
  3. Docker 的基本安装与使用
  4. Docker 的生命周期
  5. 什么是 Docker 镜像,以及 Docker 镜像仓库
  6. Docker 文件如何持久化


什么是 Docker

Docker 项目是由 dotCloud 公司创始人在法国期间发起的一个项目,属于 dotCloud 公司在云服务技术上的革新,并于 2013 年进行开源,其代码在 Github 上进行维护,该项目加入了 Linux 基金会,并成立推动了 OCI,开放容器联盟。

Docker 项目最初是在 Ubuntu 上进行实现的,后来广泛在 Red Hat, Windows 等操作系统上进行了实现。谷歌也在 PaaS 项目上大量使用了 Docker。

Docker 使用的 Google 公司的 Go 语言进行开发的,基于 Linux 内核的 cgroup,namespace 等技术,对进程进行封装隔离。

其项目构成如下图所示:

在这里插入图片描述

  • runc 是一个 LInux 的命令行工具,用于进行创建和运行容器。
  • containerd 是一个守护程序,用于管理容器的生命周期。

Docker 在容器的基础上,进行了进一步的封装,封装了文件系统,网络系统,以及进程隔离等,简化了容器的维护与创建,使得 Docker 更加的轻松,快捷。

一般来说,传统的虚拟化过程,如下图所示:

在这里插入图片描述

而对于 Docker 虚拟化来说,其过程如下图所示:

在这里插入图片描述

为什么要使用 Docker

对于 Docker 来说,使用 Docker 具有以下的优势。

1. 更好的利用系统资源

Docker 由于不需要进行硬件以及完整的运行操作系统等其他开销,所以对于系统的资源利用效率更高,所以在相同的配置条件下,使用 Docker 可以创建更多的虚拟化。

2. 启动时间更快

使用 Docker,启动时间更快,而使用虚拟机启动时间则会延长到数分钟,节省了开发的时间。

3. 运行环境一致

通过 DockerFile 实现了运行环境的配置化,实现了整个流程中运行环境的一致性,避免了由于环境的不一致导致系统出现莫名其妙的 Bug。

4. 可以完成 CL/CD

对于 DevOps 来说,使用 Docker 中的 DockerFile 可以轻松的完成持续集成,持续交付,持续部署等功能,并且使得构建的镜像透明化,帮助开发团队更方便的部署镜像。

5. 轻松的迁移

由于 DockerFile 的存在,可以将环境进行轻松的迁移,而不用担心环境的变化而应用无法启动。

6. 轻松的维护和扩展

Docker 使用分称存储和镜像技术,使得对于环境的复用更加的方便,同时还可以快速的扩展出更多的 Docker 容器,达到快速的负载均衡。

Docker 的安装与使用

卸载之前的版本

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

安装

安装依赖包:

sudo yum install -y yum-utils

安装 Docker:

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

启动 Docker

sudo systemctl enable dockersudo systemctl start docker

测试 Docker

$ docker run --rm hello-worldUnable to find image \'hello-world:latest\' locallylatest: Pulling from library/hello-worldb8dfde127a29: Pull completeDigest: sha256:308866a43596e83578c7dfa15e27a73011bdd402185a84c5cd7f32a88b501a24Status: Downloaded newer image for hello-world:latestHello 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 bashShare 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/

如果出现上述信息,则测试基本通过。

DockerFile 的基本格式

在 Dokcer 镜像中,最重要的就是 DockerFile 文件,DockerFile 文件是 Docker 的镜像配置文件,配置了环境的基本信息。

基本结构

其基本结构如下所示:

### This dockerfile uses the Ubuntu image### VERSION 2### Author: docker_user### Command format: Instruction [arguments / command] …### 第一行必须指定基于的容器镜像FROM ubuntu### 维护者信息MAINTAINER docker_user docker_user@email.com### 镜像的操作指令RUN echo “deb http://archive.ubuntu.com/ubuntu/ raring main universe” >> /etc/apt/sources.listRUN apt-get update && apt-get install -y nginxRUN echo “\\ndaemon off;” >> /etc/nginx/nginx.conf### 容器启动时执行指令CMD /usr/sbin/nginx

第一部分是注释,第二部分是指定基于哪个容器镜像,第三部分是 Docker 镜像的维护者信息,第四部分是 Docker 镜像的操作指令,按照一行一个指令,一行一层指令进行执行。最后一行是容器的启动的执行指令,通过该指令将会执行 Docker 容器,让 Docker 容器保持运行。 在 Nginx 镜像基础上,安装 Apache2、openssh-server 等软件。

### nginx### VERSION 0.0.1FROM ubuntuMAINTAINER Victor Vieus <victor@docker.com>RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server

在 Ubuntu 上安装 Firefox 以及 VNC 软件等。

### Firefox over VNC### VERSION 0.3FROM Ubuntu### Install vnc, xvfb in order to create a ‘fake’ display and firefoxRUN apt-get update && apt-get install -y x11vnc xvfb firefoxRUN mkdir /.vnc### setup a passwordRUN x11vnc -storepasswd 1234 ~/.vnc/passwd### Autostart firefoxRUN bash -c ‘echo “firefox” >> /.bashrc’EXPOSE 5900CMD [“x11vnc”, “-forever”, “-usepw”, “-create”]

指令

FROM

FROM 的格式为:

FROM <image>

DockerFile 的第一行指令,必须为 FROM 指令。

MAINTAINER

格式为:

MAINTAINER <name>
LABE

格式为:

LABEL <key>=<value> <key>=<value> <key>=<value> ...

为镜像添加标签。

RUN

镜像的构建命令,其命令格式如下所示:

RUN <command>
CMD

为容器的前台命令,启动容器时的命令:

CMD [“executable”, “param1”, “param2”] 使用 exec 执行,推荐方式。
EXPOSE

设置暴露的端口:

EXPOSE <port> [<port>…]
ENV

设置环境变量:

ENV PG_MAJOR 9.3
ADD

进行宿主机的文件复制到容器中。

ADD <src> <dest>
COPY

进行宿主机的相对路径复制到容器中

COPY <src> <dest>
ENTRYPOINT

设置容器启动后的命令:

ENTRYPOINT [“executable”, “param1”, “param2”]
VOLUME

设置文件挂载到容器中:

VOLUME [\"/data\"]
USER

指定容器运行时候的用户明或者 UID:

USER daemon
WORKDIR

为后续的 RUN、CMD 指令配置工作目录:

WORKDIR /path/to/workdir

创建镜像

创建镜像的格式如下所示:

sudo docker build -t build_repo/first_image /tmp/docker_builder/

Docker 的生命周期

在这里插入图片描述

容器创建

格式为:

docker create [参数] 镜像名称[容器执行命令][执行命令时需要提供的参数]
-t 分配一个虚拟终端-i 提供一个模拟输入,不提供则无法输入默认命令--name 为创建好的容器提供一个容器名,不提供的话随机分配一个

容器启动

启动容器格式为:

docker start [参数] 容器[容器..]

参数为:

-a 将当前的输入/输出连接到容器-i 将当前的输入连接到容器上

容器创建并启动

格式为:

docker run [参数] 镜像 [容器执行命令] [执行命令提供的参数]

参数为:

-t 分配一个虚拟终端-i 保持输入打开-d 容器后台运行,并打印容器 id--rm 容器结束后自动删除容器

容器暂停

格式为:

docker pause/unpause 容器[容器..]

容器关闭

docker stop 容器[容器..]

容器终止

docker kill [参数] 容器[容器..]

容器重启

docker restart [参数] 容器[容器..]

参数:

-t 关闭前的等待时间,默认是 10 秒,实则是关闭前的等待时间

容器删除

docker container rm [参数] 容器[容器..]

参数:

-f 强制删除-v 删除容器的同时删除容器的数据卷

什么是 Docker 镜像,以及 Docker 镜像仓库

Docker 镜像

一般来说,操作系统分为内核和用户空间,DOcker 镜像,就是一个 root 的文件系统,包含了完整的操作系统的文件系统。

Docker 镜像还包含了程序运行的时候,需要的库,资源,配置等信息。不包含任何动态数据,在构建之后不会发生改变。

分层存储

Docker 在设计的时候,采用了 UnionFS 技术,设计为分层的存储架构,即是由一组一组文件构成。

在构建的时候,构建上一层完成以后,再构建下一层文件,每一层文件通过指针进行连接。

在删除镜像的时候,只会删除当前层的镜像,不会删除下一层的镜像。

分层存储的方式还使得镜像容易进行复用,定制化变得更加容易。

Docker 镜像仓库

Docker 官方有镜像仓库,仓库的地址为:

https://hub.docker.com/

使用的时候,搜索相关的镜像,例如搜索 Nginx 相关的镜像。

在这里插入图片描述

这里选择第一个镜像。

在这里插入图片描述

其中

docker pull nginx

命令为下载 Docker 镜像。在下方文件中,详细讲解了 Nginx 镜像的使用方法。

Docker 文件如何持久化

Docker 文件一共有三种持久化方式。

volume

volume 是由 Docker 直接管理的,同一个 volume 可以共享给多个容器使用,相互独立,删除容器的时候 volume 仍然存在。

基本操作:

 ### 查看所有 volume    docker volume ls    ### 删除指定 volume    docker volume rm [volume name]    ### 查看 volume 详细    docker volume inspect [volume name]    ### docker 挂在 volume,-v 指令表示挂载,: 前为指定的 volume 名字,后面为 volume 数据备份文件路径    docker run -d -v mysql:/test/mysql/data --name mysql mysql

bind mount

bind mount 是直接将宿主机上的文件系统映射到容器中,两边双向同步,两边不管是那一边,都会同步。

基本操作:

和 volume 基本相同,不过使用 volume 的时候,-v 参数,第一个参数为宿主机的绑定目录路径,第二个参数为挂载的容器的目录路径。

tmpfs

这是使用宿主机的内存作为存储,不会写到宿主机的文件系统中。 只需要在参数中加入 tmpfs 参数即可。

其例子如下所示:

docker run -d \\  -it \\  --name tmptest \\  --tmpfs /app \\  nginx:latest

在上方 diamante 中,使用了 tmpfs 挂载容器的 /app 目录。

小七学习网,助您升职加薪,遇问题可联系:客服微信【1601371900】 备注:来自网站

免责声明: 1、本站信息来自网络,版权争议与本站无关 2、本站所有主题由该帖子作者发表,该帖子作者与本站享有帖子相关版权 3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和本站的同意 4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责 5、用户所发布的一切软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 6、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 7、请支持正版软件、得到更好的正版服务。 8、如有侵权请立即告知本站(邮箱:1099252741@qq.com,备用微信:1099252741),本站将及时予与删除 9、本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章和视频仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。