Docker (一) Docker基础

 
1. Docker 简介
        Docker 两个组成部分:
        Docker :开源的容器虚拟化平台 
        Docker Hub :管理Docker容器的Docker SaaS 平台
        Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包装系统。 
        Docker 使用客户端-服务器 (C/S) 架构模式。Docker 客户端会与 Docker 守护进程进行通信。Docker 守护进程会处理复杂繁重的任务,例如建立、运行、发布你的 Docker 容器。Docker 客户端和守护进程可以运行在同一个系统上,当然你也可以使用 Docker 客户端去连接一个远程的 Docker 守护进程。Docker 客户端和守护进程之间通过 socket 或者 RESTful API 进行通信。如下图所示:
 

 

1.1 Docker特性
        文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里
        资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup
        网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址
        日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索
        变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置
        交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。    
1.2 Docker 组成
            要理解 Docker 内部构建,需要理解以下三种部件:

            Docker 镜像 - Docker images

            Docker 仓库 - Docker registeries

            Docker 容器 - Docker containers

 

 Docker 镜像:

          Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS(一个堆栈式的联合文件系统来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新 的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。

 

 

Docker 仓库:

  用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的Docker 仓库名字是 Docker HubDocker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。

 

Docker 容器:

  和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。

2.Docker 宿主机

环境任选其一

1CentOS7 Minimal 64位,Docker必须要64位的系统;

2Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64)64位操作系

建议内核在 3.8 以上,执行uname –r 查看内核。 

3.Docker安装 
 
安装
先安装curl命令集 
执行命令安装:curl https://releases.rancher.com/install-docker/17.03.sh | sh
(上面那个命令会报错,应该先用wget 下载shell文件,然后修改docker 的version 去官网找个最新的版本号https://docs.docker.com/engine/release-notes/ ,保存再执行)
查看安装情况
查看docker是否安装成功,docker version
 
root@ubuntu:/home# docker version
Client:
 Version:      17.03.2-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 03:11:13 2017
 OS/Arch:      linux/amd64
 
Server:
 Version:      17.03.2-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 03:11:13 2017
 OS/Arch:      linux/amd64
 Experimental: false
 
4.Docker 实战

 4.1 下载基础镜像    
   docker pull centos:latest (联网下载镜像    centos:linux操作系统发行版之一)
4.2 docker 常用命令
     查看所有镜像(指导入的有效的镜像)
root@ubuntu:/home# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              196e0ce0c9fb        6 weeks ago         197 MB
 
    查看镜像详细信息
root@ubuntu:/home/ubuntu# docker inspect 196e0ce0c9fb

 

 
    导出镜像
root@ubuntu:/home# docker save centos -o /home/centos.tar 
 
     导入镜像
root@ubuntu:/home# docker load < /home/centos.tar 
cf516324493c: Loading layer [==================================================>] 205.2 MB/205.2 MB
Loaded image: centos:latest
 
   删除镜像
root@ubuntu:/home# docker rmi 196e0ce0c9fb
Untagged: centos:latest
Deleted: sha256:196e0ce0c9fbb31da595b893dd39bc9fd4aa78a474bbdc21459a3ebe855b7768
Deleted: sha256:cf516324493c00941ac20020801553e87ed24c564fb3f269409ad138945948d4
 
   导出容器
root@ubuntu:/home# docker export c5edda95c3af > /home/test_name.tar
 
  导入容器(这里导入容器,只是创建了镜像)
root@ubuntu:/home# docker import /home/test_name.tar
 
4.3 制作镜像
        首先将系统需要的组件准备好放置到指定目录,我们以 /home/test/ 目录为例。
        我们需要的组件有,dk-8u144-linux-x64.tar.gz,platform-1.0-SNAPSHOT.jar(部署的工程包   当然也可以是war包等,如果是war包,应该还需要tomcat组件等)
        然后我们在该目录下创建dockerfile文件(命令   vim dockerfile) 
        以下是dockerfile示例
# 设置继承的镜像
 
FROM centos:latest
MAINTAINER liuxiang 245816989@qq.com
 
# 安装JDK
 
RUN mkdir /var/tmp/jdk
COPY jdk-8u144-linux-x64.tar.gz /var/tmp/jdk
RUN tar xzf /var/tmp/jdk/jdk-8u144-linux-x64.tar.gz -C /var/tmp/jdk && rm -rf /var/tmp/jdk/jdk-8u144-linux-x64.tar.gz
 
#设置环境变量
 
ENV JAVA_HOME /var/tmp/jdk/jdk1.8.0_144
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
 
#打包项目并拷贝到tomcat webapps目录
 
COPY platform-1.0-SNAPSHOT.jar /home/
 
#开启内部服务端口
 
EXPOSE 8089
 
#启动命令(相当于开机自启,即镜像启动后执行的命令)
 
CMD java -jar platform-1.0-SNAPSHOT.jar
 
然后保存,dockfile 的更多命令及用法,请点击链接接----【链接】,并查看目录结构
root@ubuntu:/home/devops-platform# ls
dockerfile  jdk-8u144-linux-x64.tar.gz  platform-1.0-SNAPSHOT.jar
 
根据dockerfile创建镜像
root@ubuntu:/home/devops-platform# docker build -t test ./
Sending build context to Docker daemon 223.3 MB
Step 1/10 : FROM centos:latest
 ---> 196e0ce0c9fb
Step 2/10 : MAINTAINER liuxiang 245816989@qq.com
 ---> Running in e790f3175e1c
 ---> 61973378b83f
Removing intermediate container e790f3175e1c
Step 3/10 : RUN mkdir /var/tmp/jdk
 ---> Running in c13e1e755361
 ---> 105b0dde02a7
Removing intermediate container c13e1e755361
Step 4/10 : COPY jdk-8u144-linux-x64.tar.gz /var/tmp/jdk
 ---> d19001eaa8c6
Removing intermediate container b83e842d76d7
Step 5/10 : RUN tar xzf /var/tmp/jdk/jdk-8u144-linux-x64.tar.gz -C /var/tmp/jdk && rm -rf /var/tmp/jdk/jdk-8u144-linux-x64.tar.gz
 ---> Running in 7481ac97a48c
 ---> 09c68f182b2b
Removing intermediate container 7481ac97a48c
Step 6/10 : ENV JAVA_HOME /var/tmp/jdk/jdk1.8.0_144
 ---> Running in 5c2cca2d28e7
 ---> b8fb64111299
Removing intermediate container 5c2cca2d28e7
Step 7/10 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
 ---> Running in 1360bb64d274
 ---> cabe72d0c6be
Removing intermediate container 1360bb64d274
Step 8/10 : COPY platform-1.0-SNAPSHOT.jar /home/
 ---> 24a098b0000b
Removing intermediate container f28d59230832
Step 9/10 : EXPOSE 8089
 ---> Running in 2ded62fff800
 ---> c496927556a1
Removing intermediate container 2ded62fff800
Step 10/10 : CMD java -jar platform-1.0-SNAPSHOT.jar
 ---> Running in 175a4dbfa240
 ---> b74fcf013c12
Removing intermediate container 175a4dbfa240
Successfully built b74fcf013c12
 
ok了,可以用docker images 查看该镜像

 

4.4 创建并启动容器
    创建容器:

    root@ubuntu:/home/ubuntu# docker create -it centoswithifconfig:latest cwf

    创建容器并启动:
 root@ubuntu:/home# docker run -i -t -p 32112:8089 -p 8082:8082  --name test_names test
 
    注释:-p 做端口映射(宿主机端口:容器暴露端口;一组一组可写多个)     
               --name 注明创建容器的名称(上面命令中的test_name;test指上面做好的镜像名称)  
               -t:让Docker分配一个为终端并绑定到容器的标准输入上

     -i:让这个标准输入保持打开

    
    然后Ctrl + c 关闭,查看创建好的容器
root@ubuntu:/home/ubuntu# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
8bb8f6dc0908        test                "/bin/bash"         4 hours ago         Exited (130) 4 hours ago                       test_name
 
    启动该容器
root@ubuntu:/home/ubuntu# docker start 8bb8f6dc0908
8bb8f6dc0908
 
    查看正在运行的容器
root@ubuntu:/home/ubuntu# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
8bb8f6dc0908        test                "/bin/bash"         4 hours ago         Up 13 seconds       0.0.0.0:32111->8089/tcp   test_name
posted @   南巷清风--大R  阅读(130)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示