栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

初识 Docker

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初识 Docker

部分内容参考自:这可能是最为详细的Docker入门吐血总结

Docker 是什么

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包环境到一个可移植的容器中,然后一并发布到任何操作系统的机器上。

LXC:Linux Container 容器是一种内核虚拟化技术。与宿主机使用同一个内核。

Docker 利用LXC来实现类似传统虚拟机如 VMware的功能。同VM的方式不同,LXC 并不是硬件虚拟化,而是一个操作系统级虚拟化方法。设计之初也不是VM替代品。相较于VM,LXC与宿主机使用同一个内核,性能损耗小。docker 启动快速属于秒级别。VM通常需要几分钟去启动。

Docker在本质上是一个附加系统。 可能更为重要的是,Docker旨在用于弹性计算。每个Docker实例的运营生命周期有限,实例数量根据需求增减。在一个管理适度的系统中,这些实例生而平等,不再需要时便各自消亡了。

Docker实例是无状态的。这意味着它们不应该承载任何数据,所有数据应该保存在数据库服务器中。

Docker 有什么

Docker 中包括三个基本的概念:

  • Image(镜像)
  • Container(容器)
  • Repository(仓库)

Docker Image 可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。就是一堆只读层(read-only layer)。

Docker Container 镜像运行起来就是容器,可以理解是镜像的实例。是静态的镜像文件在宿主机上动态运行的进程。
容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件。镜像是文件,容器是进程。
容器服务运行的过程中,基于原始镜像做了改变,比如安装了程序,添加了文件,也可以提交回去 (commit)成为新的镜像。

Docker Repository 是集中存放镜像文件的仓库。镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry (仓库注册服务器)就是这样的服务。有时候会把仓库 (Repository) 和仓库注册服务器 (Registry) 混为一谈,并不严格区分。Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。

Docker Registry 公有仓库是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。
除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry 。Docker 官方提供了 Docker Registry镜像,可以直接使用做为私有 Registry 服务。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

Docker 架构
  1. DockerClient 客户端
  2. Docker Daemon 守护进程
  3. Docker Image 镜像
  4. DockerContainer 容器

Docker daemon 一般在宿主主机后台运行,作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。

Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。

客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。

Docker 安装和使用

Docker 分为 CE 和 EE 两大版本。 CE 即社区版(免费,支持周期 7 个月), EE 即企业版,强调安全,付费使用,支持周期 24 个月。

Docker CE 的安装请参考官方文档:

MacOS:https://docs.docker.com/docker-for-mac/install/
Windows:https://docs.docker.com/docker-for-windows/install/
Ubuntu:https://docs.docker.com/install/linux/docker-ce/ubuntu/
CentOS:https://docs.docker.com/install/linux/docker-ce/centos/
其他 Linux 发行版:https://docs.docker.com/install/linux/docker-ce/binaries/

以 CentOS7 作为本文的演示。

卸载掉旧版本的 Docker
$ yum remove docker 
      docker-client 
      docker-client-latest 
      docker-common 
      docker-latest 
      docker-latest-logrotate 
      docker-logrotate 
      docker-selinux 
      docker-engine-selinux 
      docker-engine
安装依赖包
$ yum install -y yum-utils 
      device-mapper-persistent-data 
      lvm2
安装Docker

Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。所以可以直接使用yum 命令

$ yum install docker

验证是否安装成功

docker version
# or
docker info

启动Docker-CE

$ systemctl enable docker
$ systemctl start docker

搜索 仓库中 image 文件

docker search mysql

抓取 image 文件

docker pull library/hello-world
# OR
docker pull mysql:5.7

docker pull 是抓取 image 文件。
library/hello-world 是 image 文件在仓库里面的位置,其中 library 是 image 文件所在的组, hello-world 是 image 文件的名字。

mysql:5.7 是mysql 在docker仓库中的位置,mysql是文件名,:5.7是一个可选tag,如上述hello-world没有tag则默认latest。

查看本机 image 文件

docker images

运行 hello-world 这个 image 文件。运行后就会创建出对应的容器。

docker run hello-world
# OR
docker run --name mysql  # mysql5.7在docker中的别名mysql
-p 23306:3306             # 映射到docker的23306端口,由docker所在主机:23306提供mysql读写
-v /dockerdir/mysql/conf:/etc/mysql/conf.d  
-v /dockerdir/mysql/logs:/logs  
-v /dockerdir/mysql/data:/var/lib/mysql    # 数据目录映射到docker的目录
-e MYSQL_ROOT_PASSWORD=123456  
-d mysql:5.7 # 镜像

查看当前有哪些容器

docker ps -a

-a 是查看当前所有的容器,包括未运行的。
对一个现有的容器进行启动,重启和停止。

docker start container_name/container_id
docker restart container_name/container_id
docker stop container_name/container_id

进入到这个容器中

docker attach container_name/container_id

删除指定镜像。由于 image 被某个 container 引用(正在被运行),如果不将这个引用的 container 销毁,那 image 肯定是不能被删除。
1先去停止这个容器

docker stop container_name/container_id

2删除这个容器

docker rm container_name/container_id

3删除这个镜像

docker rmi image_name
Dockerfile 是什么

Dockerfile由一行行命令语句组成,指令集;Dockerfile 中的命令非常类似于 linux 下的 .sh 、windows下的.bat

一般来说,我们可以将 Dockerfile 分为四个部分:

  1. 基础镜像(父镜像)信息指令 FROM
  2. 维护者信息指令 MAINTAINER
  3. 镜像操作指令 RUN 、 EVN 、 ADD 和 WORKDIR 等
  4. 容器启动指令 CMD 、 ENTRYPOINT 和 USER 等

下面是一段简单的Dockerfile的例子:

FROM python:2.7
MAINTAINER Angel_Kitty 
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python"]
CMD ["app.py"]

分析一下上面这个过程:

1、从 Docker Hub 上 pull 下 python 2.7 的基础镜像
2、显示维护者的信息
3、copy 当前目录到容器中的 /app 目录下 复制本地主机的 ( Dockerfile 所在目录的相对路径)到容器里
4、指定工作路径为 /app
5、安装依赖包
6、暴露 5000 端口
7、启动 app

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/888077.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号